Don't populate core 0's stack, except for SPARC
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Mon, 7 Nov 2011 22:58:45 +0000 (14:58 -0800)
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>
Mon, 7 Nov 2011 22:58:45 +0000 (14:58 -0800)
SPARC needs stacks to be mapped in so that
register window spills always succeed.  Other
ISAs can safely fault on stack accesses.

kern/src/elf.c

index d162069..55317ed 100644 (file)
@@ -182,9 +182,13 @@ int load_elf(struct proc* p, struct file* f)
        p->env_entry = ei.entry;
 
        // map in stack using POPULATE (because SPARC requires it)
+       int flags = MAP_FIXED | MAP_ANONYMOUS;
+       #ifdef __sparc_v8__
+       flags |= MAP_POPULATE; // SPARC stacks must be mapped in
+       #endif
        uintptr_t stacksz = USTACK_NUM_PAGES*PGSIZE;
        if (do_mmap(p, USTACKTOP-stacksz, stacksz, PROT_READ | PROT_WRITE,
-                   MAP_FIXED | MAP_ANONYMOUS | MAP_POPULATE, NULL, 0) == MAP_FAILED)
+                   flags, NULL, 0) == MAP_FAILED)
                return -1;
 
        // Set the heap bottom and top to just past where the text