As discussed. Applies to linux-2.4 cleanly, to linux-2.6 also but you'll need to add: #if CONFIG_MIPS32 task_size = TASK_SIZE; #else Index: syscall.c =================================================================== RCS file: /cvsdev/mvl-kernel/linux/arch/mips64/kernel/syscall.c,v retrieving revision 1.4.8.1 diff -u -p -r1.4.8.1 syscall.c --- syscall.c 17 Nov 2003 16:29:20 -0000 1.4.8.1 +++ syscall.c 8 Mar 2004 21:43:06 -0000 @@ -61,6 +61,9 @@ unsigned long arch_get_unmapped_area(str { struct vm_area_struct * vmm; int do_color_align; + unsigned long task_size; + + task_size = (current->thread.mflags & MF_32BIT_ADDR) ? TASK_SIZE32 : TASK_SIZE; if (flags & MAP_FIXED) { /* @@ -72,7 +75,7 @@ unsigned long arch_get_unmapped_area(str return addr; } - if (len > TASK_SIZE) + if (len > task_size) return -ENOMEM; do_color_align = 0; if (filp || (flags & MAP_SHARED)) @@ -83,7 +86,7 @@ unsigned long arch_get_unmapped_area(str else addr = PAGE_ALIGN(addr); vmm = find_vma(current->mm, addr); - if (TASK_SIZE - len >= addr && + if (task_size - len >= addr && (!vmm || addr + len <= vmm->vm_start)) return addr; } @@ -95,7 +98,7 @@ unsigned long arch_get_unmapped_area(str for (vmm = find_vma(current->mm, addr); ; vmm = vmm->vm_next) { /* At this point: (!vmm || addr < vmm->vm_end). */ - if (TASK_SIZE - len < addr) + if (task_size - len < addr) return -ENOMEM; if (!vmm || addr + len <= vmm->vm_start) return addr; -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer