From 965805e888b25d24cd5ca74b81ffdc61de6e0869 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 15 Aug 2008 22:35:53 +0000 Subject: [PATCH] * sysdeps/unix/sysv/linux/x86_64/bits/mman.h: Define MAP_STACK. * sysdeps/unix/sysv/linux/i386/bits/mman.h: Likewise. --- ChangeLog | 5 +++++ nptl/ChangeLog | 9 +++++++++ nptl/allocatestack.c | 22 ++++++++-------------- nptl/sysdeps/x86_64/pthreaddef.h | 10 ---------- sysdeps/unix/sysv/linux/i386/bits/mman.h | 1 + sysdeps/unix/sysv/linux/x86_64/bits/mman.h | 1 + 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index a9a9e95bec..e41c768fbb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-08-15 Ulrich Drepper + + * 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 * sysdeps/x86_64/memset.S: Reduce size of tables for PIC. diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 0ecbce3f64..d638dde585 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,12 @@ +2008-08-15 Ulrich Drepper + + * 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 * tst-align2.c (f): Print message that f is reached. diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index 66128e455b..9ab4d6281c 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -84,10 +84,10 @@ #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. diff --git a/nptl/sysdeps/x86_64/pthreaddef.h b/nptl/sysdeps/x86_64/pthreaddef.h index 0195bc928f..be63a8c74a 100644 --- a/nptl/sysdeps/x86_64/pthreaddef.h +++ b/nptl/sysdeps/x86_64/pthreaddef.h @@ -36,16 +36,6 @@ ({ 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. */ diff --git a/sysdeps/unix/sysv/linux/i386/bits/mman.h b/sysdeps/unix/sysv/linux/i386/bits/mman.h index 00cb982395..2b90c8d7d5 100644 --- a/sysdeps/unix/sysv/linux/i386/bits/mman.h +++ b/sysdeps/unix/sysv/linux/i386/bits/mman.h @@ -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'. */ diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/mman.h b/sysdeps/unix/sysv/linux/x86_64/bits/mman.h index 535c9edcf9..7810682536 100644 --- a/sysdeps/unix/sysv/linux/x86_64/bits/mman.h +++ b/sysdeps/unix/sysv/linux/x86_64/bits/mman.h @@ -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'. */