Remove PTHREAD_ATTR_FLAG_MAIN_THREAD.

Make this change because I think it is more reasonable to check stack info
in pthread_getattr_np. I believe pthread_attr_t is not tied with any thread,
and can't have a flag saying who using it is the main thread.
This change also helps refactor of g_thread_list_lock.

Bug: 19636317
Change-Id: Iedbb85a391ac3e1849dd036d01445dac4bc63db9
diff --git a/libc/bionic/libc_init_common.cpp b/libc/bionic/libc_init_common.cpp
index f82ec73..52ca0f2 100644
--- a/libc/bionic/libc_init_common.cpp
+++ b/libc/bionic/libc_init_common.cpp
@@ -88,7 +88,6 @@
   // The main thread has no mmap allocated space for stack or pthread_internal_t.
   main_thread.mmap_size = 0;
   pthread_attr_init(&main_thread.attr);
-  main_thread.attr.flags = PTHREAD_ATTR_FLAG_MAIN_THREAD;
   main_thread.attr.guard_size = 0; // The main thread has no guard page.
   main_thread.attr.stack_size = 0; // User code should never see this; we'll compute it when asked.
   // TODO: the main thread's sched_policy and sched_priority need to be queried.
diff --git a/libc/bionic/pthread_attr.cpp b/libc/bionic/pthread_attr.cpp
index c65ccc1..be1c252 100644
--- a/libc/bionic/pthread_attr.cpp
+++ b/libc/bionic/pthread_attr.cpp
@@ -152,9 +152,6 @@
 }
 
 int pthread_attr_getstack(const pthread_attr_t* attr, void** stack_base, size_t* stack_size) {
-  if ((attr->flags & PTHREAD_ATTR_FLAG_MAIN_THREAD) != 0) {
-    return __pthread_attr_getstack_main_thread(stack_base, stack_size);
-  }
   *stack_base = attr->stack_base;
   *stack_size = attr->stack_size;
   return 0;
@@ -171,7 +168,13 @@
 }
 
 int pthread_getattr_np(pthread_t t, pthread_attr_t* attr) {
-  *attr = reinterpret_cast<pthread_internal_t*>(t)->attr;
+  pthread_internal_t* thread = reinterpret_cast<pthread_internal_t*>(t);
+  *attr = thread->attr;
+  // The main thread's stack information is not stored in thread->attr, and we need to
+  // collect that at runtime.
+  if (thread->tid == getpid()) {
+    return __pthread_attr_getstack_main_thread(&attr->stack_base, &attr->stack_size);
+  }
   return 0;
 }
 
diff --git a/libc/bionic/pthread_internal.h b/libc/bionic/pthread_internal.h
index f131d7a..6ace301 100644
--- a/libc/bionic/pthread_internal.h
+++ b/libc/bionic/pthread_internal.h
@@ -41,9 +41,6 @@
 /* Did the thread exit without freeing pthread_internal_t? */
 #define PTHREAD_ATTR_FLAG_ZOMBIE 0x00000004
 
-/* Is this the main thread? */
-#define PTHREAD_ATTR_FLAG_MAIN_THREAD 0x80000000
-
 struct pthread_key_data_t {
   uintptr_t seq; // Use uintptr_t just for alignment, as we use pointer below.
   void* data;