Put it one page below the top of the 32-bit address space.
This gives us ~16MB more address space to work with.
Signed-off-by: David S. Miller <davem@davemloft.net>
 #undef MODULE_DESCRIPTION
 #undef MODULE_AUTHOR
 
+#include <asm/a.out.h>
+
 #undef TASK_SIZE
-#define TASK_SIZE 0xf0000000
+#define TASK_SIZE STACK_TOP32
 
 #include "../../../fs/binfmt_elf.c"
 
 #include <asm/ipc.h>
 #include <asm/utrap.h>
 #include <asm/perfctr.h>
+#include <asm/a.out.h>
 
 /* #define DEBUG_UNIMP_SYSCALL */
 
        }
 
        if (test_thread_flag(TIF_32BIT))
-               task_size = 0xf0000000UL;
+               task_size = STACK_TOP32;
        if (unlikely(len > task_size || len >= VA_EXCLUDE_START))
                return -ENOMEM;
 
 {
        struct vm_area_struct *vma;
        struct mm_struct *mm = current->mm;
-       unsigned long task_size = 0xf0000000UL;
+       unsigned long task_size = STACK_TOP32;
        unsigned long addr = addr0;
        int do_color_align;
 
                mm->unmap_area = arch_unmap_area;
        } else {
                /* We know it's 32-bit */
-               unsigned long task_size = 0xf0000000UL;
+               unsigned long task_size = STACK_TOP32;
                unsigned long gap;
 
                gap = current->signal->rlim[RLIMIT_STACK].rlim_cur;
 asmlinkage unsigned long sparc_brk(unsigned long brk)
 {
        /* People could try to be nasty and use ta 0x6d in 32bit programs */
-       if (test_thread_flag(TIF_32BIT) && brk >= 0xf0000000UL)
+       if (test_thread_flag(TIF_32BIT) && brk >= STACK_TOP32)
                return current->mm->brk;
 
        if (unlikely(straddles_64bit_va_hole(current->mm->brk, brk)))
        retval = -EINVAL;
 
        if (test_thread_flag(TIF_32BIT)) {
-               if (len >= 0xf0000000UL)
+               if (len >= STACK_TOP32)
                        goto out_putf;
 
-               if ((flags & MAP_FIXED) && addr > 0xf0000000UL - len)
+               if ((flags & MAP_FIXED) && addr > STACK_TOP32 - len)
                        goto out_putf;
        } else {
                if (len >= VA_EXCLUDE_START)
 
 #include <asm/fpumacro.h>
 #include <asm/semaphore.h>
 #include <asm/mmu_context.h>
+#include <asm/a.out.h>
 
 asmlinkage long sys32_chown16(const char __user * filename, u16 user, u16 group)
 {
        unsigned long ret = -EINVAL;
        unsigned long new_addr = __new_addr;
 
-       if (old_len > 0xf0000000UL || new_len > 0xf0000000UL)
+       if (old_len > STACK_TOP32 || new_len > STACK_TOP32)
                goto out;
-       if (addr > 0xf0000000UL - old_len)
+       if (addr > STACK_TOP32 - old_len)
                goto out;
        down_write(¤t->mm->mmap_sem);
        if (flags & MREMAP_FIXED) {
-               if (new_addr > 0xf0000000UL - new_len)
+               if (new_addr > STACK_TOP32 - new_len)
                        goto out_sem;
-       } else if (addr > 0xf0000000UL - new_len) {
+       } else if (addr > STACK_TOP32 - new_len) {
                unsigned long map_flags = 0;
                struct file *file = NULL;
 
 
        len = PAGE_ALIGN(len);
        if(!(flags & MAP_FIXED))
                addr = 0;
-       else if (len > 0xf0000000UL || addr > 0xf0000000UL - len)
+       else if (len > STACK_TOP32 || addr > STACK_TOP32 - len)
                goto out_putf;
        ret_type = flags & _MAP_NEW;
        flags &= ~_MAP_NEW;
                         (unsigned long) prot, (unsigned long) flags, off);
        up_write(¤t->mm->mmap_sem);
        if(!ret_type)
-               retval = ((retval < 0xf0000000) ? 0 : retval);
+               retval = ((retval < STACK_TOP32) ? 0 : retval);
                                
 out_putf:
        if (file)
 
 
 #ifdef __KERNEL__
 
+#define STACK_TOP32    ((1UL << 32UL) - PAGE_SIZE)
+#define STACK_TOP64    (0x0000080000000000UL - (1UL << 32UL))
+
 #define STACK_TOP (test_thread_flag(TIF_32BIT) ? \
-                  0xf0000000 : \
-                  (0x0000080000000000UL - (1UL << 32UL)))
+                  STACK_TOP32 : STACK_TOP64)
 
 #endif