Don't corrupt the thread list in static executables.

Several previous changes conspired to make a mess of the thread list
in static binaries. This was most obvious when trying to call
pthread_key_delete(3) on the main thread.

Bug: http://code.google.com/p/android/issues/detail?id=36893
Change-Id: I2a2f553114d8fb40533c481252b410c10656da2e
diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h
index 2bd110c..58a809a 100644
--- a/libc/bionic/pthread_internal.h
+++ b/libc/bionic/pthread_internal.h
@@ -29,13 +29,14 @@
 #define _PTHREAD_INTERNAL_H_
 
 #include <pthread.h>
+#include <stdbool.h>
 
 __BEGIN_DECLS
 
 typedef struct pthread_internal_t
 {
     struct pthread_internal_t*  next;
-    struct pthread_internal_t** pref;
+    struct pthread_internal_t** prev;
     pthread_attr_t              attr;
     pid_t                       kernel_id;
     pthread_cond_t              join_cond;
@@ -46,7 +47,8 @@
     void**                      tls;         /* thread-local storage area */
 } pthread_internal_t;
 
-extern int _init_thread(pthread_internal_t * thread, pid_t kernel_id, pthread_attr_t * attr, void * stack_base);
+int _init_thread(pthread_internal_t* thread, pid_t kernel_id, pthread_attr_t* attr,
+                 void* stack_base, bool add_to_thread_list);
 void _pthread_internal_add( pthread_internal_t*  thread );
 pthread_internal_t* __get_thread(void);
 
@@ -100,9 +102,9 @@
     return 0;
 }
 
-extern int  __pthread_cond_timedwait(pthread_cond_t*, 
+extern int  __pthread_cond_timedwait(pthread_cond_t*,
                                      pthread_mutex_t*,
-                                     const struct timespec*, 
+                                     const struct timespec*,
                                      clockid_t);
 
 extern int  __pthread_cond_timedwait_relative(pthread_cond_t*,