2002-08-02 Roland McGrath <roland@redhat.com>
[kopensolaris-gnu/glibc.git] / linuxthreads / attr.c
index eba93f1..8b7e8ce 100644 (file)
@@ -22,7 +22,6 @@
 #include "pthread.h"
 #include "internals.h"
 #include <shlib-compat.h>
-#include <stackinfo.h>
 
 int __pthread_attr_init_2_1(pthread_attr_t *attr)
 {
@@ -284,10 +283,19 @@ int pthread_getattr_np (pthread_t thread, pthread_attr_t *attr)
   attr->__inheritsched = descr->p_inheritsched;
   attr->__scope = PTHREAD_SCOPE_SYSTEM;
 #ifdef _STACK_GROWS_DOWN
+# ifdef USE_TLS
+  attr->__stacksize = descr->p_stackaddr - (char *)descr->p_guardaddr
+                     - descr->p_guardsize;
+# else
   attr->__stacksize = (char *)(descr + 1) - (char *)descr->p_guardaddr
                      - descr->p_guardsize;
+# endif
 #else
+# ifdef USE_TLS
+  attr->__stacksize = (char *)descr->p_guardaddr - descr->p_stackaddr;
+# else
   attr->__stacksize = (char *)descr->p_guardaddr - (char *)descr;
+# endif
 #endif
   attr->__guardsize = descr->p_guardsize;
   attr->__stackaddr_set = descr->p_userstack;
@@ -299,10 +307,14 @@ int pthread_getattr_np (pthread_t thread, pthread_attr_t *attr)
      otherwise the range of the stack area cannot be computed.  */
   attr->__stacksize += attr->__guardsize;
 #endif
-#ifndef _STACK_GROWS_UP
-  attr->__stackaddr = (char *)(descr + 1);
+#ifdef USE_TLS
+  attr->__stackaddr = descr->p_stackaddr;
 #else
+# ifndef _STACK_GROWS_UP
+  attr->__stackaddr = (char *)(descr + 1);
+# else
   attr->__stackaddr = (char *)descr;
+# endif
 #endif
 
   return 0;