00db10
diff -pruN glibc-2.17-c758a686/nptl/Makefile glibc-2.17-c758a686/nptl/Makefile
00db10
--- glibc-2.17-c758a686/nptl/Makefile	2013-07-31 11:51:24.882747234 +0530
00db10
+++ glibc-2.17-c758a686/nptl/Makefile	2013-07-31 11:58:55.964731526 +0530
00db10
@@ -276,10 +276,7 @@ gen-as-const-headers = pthread-errnos.sy
00db10
 
00db10
 LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
00db10
 
00db10
-# The size is 1MB + 4KB.  The extra 4KB has been added to prevent allocatestack
00db10
-# from resizing the input size to avoid the 64K aliasing conflict on Intel
00db10
-# processors.
00db10
-DEFAULT_STACKSIZE=1052672
00db10
+DEFAULT_STACKSIZE=1048576
00db10
 CFLAGS-tst-default-attr.c = -DDEFAULT_STACKSIZE=$(DEFAULT_STACKSIZE)
00db10
 tst-default-attr-ENV = GLIBC_PTHREAD_STACKSIZE=$(DEFAULT_STACKSIZE)
00db10
 
00db10
diff -pruN glibc-2.17-c758a686/nptl/tst-default-attr.c glibc-2.17-c758a686/nptl/tst-default-attr.c
00db10
--- glibc-2.17-c758a686/nptl/tst-default-attr.c	2013-07-31 11:51:24.885747234 +0530
00db10
+++ glibc-2.17-c758a686/nptl/tst-default-attr.c	2013-07-31 12:18:10.016691337 +0530
00db10
@@ -38,6 +38,7 @@
00db10
 
00db10
 /* DEFAULT_STACKSIZE macro is defined in the Makefile.  */
00db10
 static size_t stacksize = DEFAULT_STACKSIZE;
00db10
+long int pagesize;
00db10
 
00db10
 static int
00db10
 verify_stacksize_result (pthread_attr_t *attr)
00db10
@@ -46,12 +47,20 @@ verify_stacksize_result (pthread_attr_t
00db10
 
00db10
   RETURN_IF_FAIL (pthread_attr_getstacksize, attr, &stack);
00db10
 
00db10
-  if (stacksize != stack)
00db10
+  /* pthread_create perturbs the stack size by a page if it aligns to 64K to
00db10
+     avoid the 64K aliasing conflict.  We cannot simply add 4K to the size in
00db10
+     the Makefile because it breaks the test on powerpc since the page size
00db10
+     there is 64K, resulting in a resize in __pthread_initialize_minimal.
00db10
+     Hence, our check is to ensure that the stack size is not more than a page
00db10
+     more than the requested size.  */
00db10
+  if (stack < stacksize || stack > stacksize + pagesize)
00db10
     {
00db10
       printf ("failed to set default stacksize (%zu, %zu)\n", stacksize, stack);
00db10
       return 1;
00db10
     }
00db10
 
00db10
+  printf ("Requested %zu and got %zu\n", stacksize, stack);
00db10
+
00db10
   return 0;
00db10
 }
00db10
 
00db10
@@ -101,6 +110,15 @@ run_threads (void)
00db10
 static int
00db10
 do_test (void)
00db10
 {
00db10
+  pthread_attr_t attr;
00db10
+
00db10
+  pagesize = sysconf (_SC_PAGESIZE);
00db10
+  if (pagesize < 0)
00db10
+    {
00db10
+      printf ("sysconf failed: %s\n", strerror (errno));
00db10
+      return 1;
00db10
+    }
00db10
+
00db10
   RETURN_IF_FAIL (run_threads);
00db10
   return 0;
00db10
 }