Use env_segment_alloc for stacks, not mmap
authorAndrew Waterman <waterman@ros-dev.(none)>
Fri, 26 Mar 2010 22:17:05 +0000 (15:17 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:38 +0000 (17:35 -0700)
SPARC register window handlers expect the stack to be
mapped-in at all times.  Thus, demand-paging the stack
will break SPARC.  This restriction is not fundamental,
but it would be very difficult to work around.

kern/src/elf.c

index 8cfe5e2..991de2f 100644 (file)
@@ -141,10 +141,10 @@ int load_elf(struct proc* p, const char* fn)
        proc_init_trapframe(&p->env_tf,0,core0_entry,USTACKTOP);
        p->env_entry = ei.entry;
 
+       // don't use mmap for the stacks because the register spill
+       // code in sparc requires the stack to be faulted-in already
        uintptr_t stacksz = USTACK_NUM_PAGES*PGSIZE;
-       if(mmap(p,USTACKTOP-stacksz,stacksz,PROT_READ|PROT_WRITE,
-               MAP_FIXED|MAP_ANON,-1,0) == MAP_FAILED)
-               return -1;
+       env_segment_alloc(p, (char*)USTACKTOP - stacksz, stacksz);
 
        // Set the heap bottom and top to just past where the text 
        // region has been loaded