* sysdeps/unix/sysv/linux/x86_64/bits/mman.h: Define MAP_STACK.
authorUlrich Drepper <drepper@redhat.com>
Fri, 15 Aug 2008 22:35:53 +0000 (22:35 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 15 Aug 2008 22:35:53 +0000 (22:35 +0000)
* sysdeps/unix/sysv/linux/i386/bits/mman.h: Likewise.

ChangeLog
nptl/ChangeLog
nptl/allocatestack.c
nptl/sysdeps/x86_64/pthreaddef.h
sysdeps/unix/sysv/linux/i386/bits/mman.h
sysdeps/unix/sysv/linux/x86_64/bits/mman.h

index a9a9e95..e41c768 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-15  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/x86_64/bits/mman.h: Define MAP_STACK.
+       * sysdeps/unix/sysv/linux/i386/bits/mman.h: Likewise.
+
 2008-08-14  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/x86_64/memset.S: Reduce size of tables for PIC.
index 0ecbce3..d638dde 100644 (file)
@@ -1,3 +1,12 @@
+2008-08-15  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/x86_64/pthreaddef.h: Remove ARCH_MAP_FLAGS and
+       ARCH_RETRY_MMAP definitions.
+       * allocatestack.c: Remove definition of ARCH_MAP_FLAGS.
+       Define MAP_STACK when not defined.
+       (allocate_stack): Use MAP_STACK instead of ARCH_MAP_FLAGS.  Remove
+       handling of ARCH_RETRY_MMAP.
+
 2008-07-30  Ulrich Drepper  <drepper@redhat.com>
 
        * tst-align2.c (f): Print message that f is reached.
index 66128e4..9ab4d62 100644 (file)
 #endif
 
 
-/* Let the architecture add some flags to the mmap() call used to
-   allocate stacks.  */
-#ifndef ARCH_MAP_FLAGS
-# define ARCH_MAP_FLAGS 0
+/* Newer kernels have the MAP_STACK flag to indicate a mapping is used for
+   a stack.  Use it when possible.  */
+#ifndef MAP_STACK
+# define MAP_STACK 0
 #endif
 
 /* This yields the pointer that TLS support code calls the thread pointer.  */
@@ -454,20 +454,14 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
 #endif
 
          mem = mmap (NULL, size, prot,
-                     MAP_PRIVATE | MAP_ANONYMOUS | ARCH_MAP_FLAGS, -1, 0);
+                     MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
 
          if (__builtin_expect (mem == MAP_FAILED, 0))
            {
-#ifdef ARCH_RETRY_MMAP
-             mem = ARCH_RETRY_MMAP (size, prot);
-             if (__builtin_expect (mem == MAP_FAILED, 0))
-#endif
-               {
-                 if (errno == ENOMEM)
-                   errno = EAGAIN;
+             if (errno == ENOMEM)
+               __set_errno (EAGAIN);
 
-                 return errno;
-               }
+              return errno;
            }
 
          /* SIZE is guaranteed to be greater than zero.
index 0195bc9..be63a8c 100644 (file)
   ({ char *frame; asm ("movq %%rsp, %0" : "=r" (frame)); frame; })
 
 
-/* We prefer to have the stack allocated in the low 4GB since this
-   allows faster context switches.  */
-#define ARCH_MAP_FLAGS MAP_32BIT
-
-/* If it is not possible to allocate memory there retry without that
-   flag.  */
-#define ARCH_RETRY_MMAP(size, prot) \
-  mmap (NULL, size, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)
-
-
 /* XXX Until we have a better place keep the definitions here.  */
 
 /* While there is no such syscall.  */
index 00cb982..2b90c8d 100644 (file)
@@ -63,6 +63,7 @@
 # define MAP_NORESERVE 0x04000         /* Don't check for reservations.  */
 # define MAP_POPULATE  0x08000         /* Populate (prefault) pagetables.  */
 # define MAP_NONBLOCK  0x10000         /* Do not block on IO.  */
+# define MAP_STACK     0x20000         /* Allocation is for a stack.  */
 #endif
 
 /* Flags to `msync'.  */
index 535c9ed..7810682 100644 (file)
@@ -64,6 +64,7 @@
 # define MAP_NORESERVE 0x04000         /* Don't check for reservations.  */
 # define MAP_POPULATE  0x08000         /* Populate (prefault) pagetables.  */
 # define MAP_NONBLOCK  0x10000         /* Do not block on IO.  */
+# define MAP_STACK     0x20000         /* Allocation is for a stack.  */
 #endif
 
 /* Flags to `msync'.  */