x86: Use a KERNBASE address for the bootstack
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 14 Jul 2018 03:02:28 +0000 (23:02 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 14 Jul 2018 03:17:59 +0000 (23:17 -0400)
commitd22472e6cc732174ca9147be3130ceb44e2f1748
tree9f10707a90b4dd4634c03f6474c3d6c201b18d47
parent547edd129b4c60e7d1586fc3417f985577e8c92f
x86: Use a KERNBASE address for the bootstack

Since commit 20694dda54b5 ("x86: Put the boot PMLs and stacks in BSS"),
we have been unable to backtrace from kernel_init(), up until we are on
a stack from the kernel allocator.

The reason is that the kernel backtracer checks for framepointers above
KERNBASE.  When we used an address from within the boot section, those
addresses are at the bottom of the address space.  For instance, our
stack page was around 0x50f000.

We can still use that page, which isn't present in the binary - we just
need to use the KERNBASE mapping for it.

Note we can't use the normal BSS.  That gets zeroed out manually in
kernel_init(), which is after we start using the stack.

Also note that we don't need to set the stacktop for the IDT right away.
That code was from before we had the kernel stack allocator.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/entry64.S
kern/arch/x86/trap.c
kern/include/pmap.h