arch: personality independent stack top
Peter Zijlstra [Thu, 19 Jul 2007 08:48:14 +0000 (01:48 -0700)]
New arch macro STACK_TOP_MAX it gives the larges valid stack address for the
architecture in question.

It differs from STACK_TOP in that it will not distinguish between
personalities but will always return the largest possible address.

This is used to create the initial stack on execve, which we will move down to
the proper location once the binfmt code has figured out where that is.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ollie Wild <aaw@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

22 files changed:
include/asm-alpha/a.out.h
include/asm-arm/a.out.h
include/asm-arm26/a.out.h
include/asm-avr32/a.out.h
include/asm-cris/a.out.h
include/asm-frv/mem-layout.h
include/asm-h8300/a.out.h
include/asm-i386/a.out.h
include/asm-ia64/ustack.h
include/asm-m32r/a.out.h
include/asm-m68k/a.out.h
include/asm-mips/a.out.h
include/asm-parisc/a.out.h
include/asm-powerpc/a.out.h
include/asm-s390/a.out.h
include/asm-sh/a.out.h
include/asm-sh64/a.out.h
include/asm-sparc/a.out.h
include/asm-sparc64/a.out.h
include/asm-um/a.out.h
include/asm-x86_64/a.out.h
include/asm-xtensa/a.out.h

index d97daf4..e43cf61 100644 (file)
@@ -101,6 +101,8 @@ struct exec
 #define STACK_TOP \
   (current->personality & ADDR_LIMIT_32BIT ? 0x80000000 : 0x00120000000UL)
 
+#define STACK_TOP_MAX  0x00120000000UL
+
 #endif
 
 #endif /* __A_OUT_GNU_H__ */
index 3e5fe64..d7165e8 100644 (file)
@@ -30,6 +30,7 @@ struct exec
 #ifdef __KERNEL__
 #define STACK_TOP      ((current->personality == PER_LINUX_32BIT) ? \
                         TASK_SIZE : TASK_SIZE_26)
+#define STACK_TOP_MAX  TASK_SIZE
 #endif
 
 #ifndef LIBRARY_START_TEXT
index 9b2702c..7167f54 100644 (file)
@@ -29,6 +29,7 @@ struct exec
 
 #ifdef __KERNEL__
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 #endif
 
 #ifndef LIBRARY_START_TEXT
index 50bf6e3..9f398ab 100644 (file)
@@ -20,6 +20,7 @@ struct exec
 #ifdef __KERNEL__
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif
 
index 770734c..919b34a 100644 (file)
@@ -8,6 +8,7 @@
 
 /* grabbed from the intel stuff  */   
 #define STACK_TOP TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 
 struct exec
index a025dd4..aaf2a77 100644 (file)
@@ -60,6 +60,7 @@
  */
 #define BRK_BASE                       __UL(2 * 1024 * 1024 + PAGE_SIZE)
 #define STACK_TOP                      __UL(2 * 1024 * 1024)
+#define STACK_TOP_MAX  STACK_TOP
 
 /* userspace process size */
 #ifdef CONFIG_MMU
index 3c70939..aa5d227 100644 (file)
@@ -20,6 +20,7 @@ struct exec
 #ifdef __KERNEL__
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif
 
index ab17bb8..851a60f 100644 (file)
@@ -20,6 +20,7 @@ struct exec
 #ifdef __KERNEL__
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif
 
index a349467..504167c 100644 (file)
@@ -11,6 +11,7 @@
 /* The absolute hard limit for stack size is 1/2 of the mappable space in the region */
 #define MAX_USER_STACK_SIZE    (RGN_MAP_LIMIT/2)
 #define STACK_TOP              (0x6000000000000000UL + RGN_MAP_LIMIT)
+#define STACK_TOP_MAX          STACK_TOP
 #endif
 
 /* Make a default stack size of 2GiB */
index 9a4a5d2..6a1b5d4 100644 (file)
@@ -20,6 +20,7 @@ struct exec
 #ifdef __KERNEL__
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif
 
index eda1662..6fc86a2 100644 (file)
@@ -20,6 +20,7 @@ struct exec
 #ifdef __KERNEL__
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif
 
index ef33c3f..1ad60ba 100644 (file)
@@ -40,6 +40,7 @@ struct exec
 #ifdef CONFIG_64BIT
 #define STACK_TOP      (current->thread.mflags & MF_32BIT_ADDR ? TASK_SIZE32 : TASK_SIZE)
 #endif
+#define STACK_TOP_MAX  TASK_SIZE
 
 #endif
 
index 2a490cc..23e2c90 100644 (file)
@@ -23,6 +23,7 @@ struct exec
  * prumpf */
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  DEFAULT_TASK_SIZE
 
 #endif
 
index c7393a9..5c5ea83 100644 (file)
@@ -26,9 +26,12 @@ struct exec
 #define STACK_TOP (test_thread_flag(TIF_32BIT) ? \
                   STACK_TOP_USER32 : STACK_TOP_USER64)
 
+#define STACK_TOP_MAX STACK_TOP_USER64
+
 #else /* __powerpc64__ */
 
 #define STACK_TOP TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif /* __powerpc64__ */
 #endif /* __KERNEL__ */
index 72adee6..46158dc 100644 (file)
@@ -32,6 +32,7 @@ struct exec
 #ifdef __KERNEL__
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  DEFAULT_TASK_SIZE
 
 #endif
 
index 6e9fca9..685d0f6 100644 (file)
@@ -20,6 +20,7 @@ struct exec
 #ifdef __KERNEL__
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif
 
index e1995e8..237ee4e 100644 (file)
@@ -31,6 +31,7 @@ struct exec
 #ifdef __KERNEL__
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif
 
index 9090060..917e042 100644 (file)
@@ -92,6 +92,7 @@ struct relocation_info /* used when header.a_machtype == M_SPARC */
 #include <asm/page.h>
 
 #define STACK_TOP      (PAGE_OFFSET - PAGE_SIZE)
+#define STACK_TOP_MAX  STACK_TOP
 
 #endif /* __KERNEL__ */
 
index eb3b8e9..902e07f 100644 (file)
@@ -101,6 +101,8 @@ struct relocation_info /* used when header.a_machtype == M_SPARC */
 #define STACK_TOP (test_thread_flag(TIF_32BIT) ? \
                   STACK_TOP32 : STACK_TOP64)
 
+#define STACK_TOP_MAX STACK_TOP64
+
 #endif
 
 #endif /* !(__ASSEMBLY__) */
index 7016b89..78bc9ee 100644 (file)
@@ -17,4 +17,6 @@ extern int honeypot;
 #define STACK_TOP \
        CHOOSE_MODE((honeypot ? host_task_size : task_size), task_size)
 
+#define STACK_TOP_MAX  STACK_TOP
+
 #endif
index 7255cde..e789300 100644 (file)
@@ -21,7 +21,8 @@ struct exec
 
 #ifdef __KERNEL__
 #include <linux/thread_info.h>
-#define STACK_TOP TASK_SIZE
+#define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  TASK_SIZE64
 #endif
 
 #endif /* __A_OUT_GNU_H__ */
index ffc4dcf..05a2f67 100644 (file)
@@ -17,6 +17,7 @@
 /* Note: the kernel needs the a.out definitions, even if only ELF is used. */
 
 #define STACK_TOP      TASK_SIZE
+#define STACK_TOP_MAX  STACK_TOP
 
 struct exec
 {