Revert "Remove the global thread list."

This reverts commit b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5.

Breaks swiftshader (http:/b/34883464).

Change-Id: I7b21193ba8a78f07d7ac65e41d0fe8516940a83b
diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h
index e40f5a4..d2abea0 100644
--- a/libc/bionic/pthread_internal.h
+++ b/libc/bionic/pthread_internal.h
@@ -56,12 +56,10 @@
 class thread_local_dtor;
 
 class pthread_internal_t {
-  // These two fields preserve backwards compatibility for code accessing the `tid` field,
-  // since we didn't always offer pthread_gettid_np.
-  void* unused0 __unused;
-  void* unused1 __unused;
-
  public:
+  class pthread_internal_t* next;
+  class pthread_internal_t* prev;
+
   pid_t tid;
 
  private:
@@ -114,13 +112,16 @@
   char dlerror_buffer[__BIONIC_DLERROR_BUFFER_SIZE];
 };
 
-__LIBC_HIDDEN__ int __init_thread(pthread_internal_t*);
-__LIBC_HIDDEN__ void __free_thread(pthread_internal_t*);
-
-__LIBC_HIDDEN__ void __init_tls(pthread_internal_t*);
-__LIBC_HIDDEN__ void __init_thread_stack_guard(pthread_internal_t*);
+__LIBC_HIDDEN__ int __init_thread(pthread_internal_t* thread);
+__LIBC_HIDDEN__ void __init_tls(pthread_internal_t* thread);
+__LIBC_HIDDEN__ void __init_thread_stack_guard(pthread_internal_t* thread);
 __LIBC_HIDDEN__ void __init_alternate_signal_stack(pthread_internal_t*);
 
+__LIBC_HIDDEN__ pthread_t           __pthread_internal_add(pthread_internal_t* thread);
+__LIBC_HIDDEN__ pthread_internal_t* __pthread_internal_find(pthread_t pthread_id);
+__LIBC_HIDDEN__ void                __pthread_internal_remove(pthread_internal_t* thread);
+__LIBC_HIDDEN__ void                __pthread_internal_remove_and_free(pthread_internal_t* thread);
+
 // Make __get_thread() inlined for performance reason. See http://b/19825434.
 static inline __always_inline pthread_internal_t* __get_thread() {
   void** tls = __get_tls();