Open
Description
It will be nice to pass UnwindInfo
in BootInfo
so that we can load the kernel ELF in the kernel to do stack unwinding.
#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub struct UnwindInfo {
/// The base address of the kernel. The kernel base is required
/// for stack unwinding during kernel panics.
pub kernel_base: VirtAddr,
/// The size of the kernel, required to calculate the end of the
/// kernel base.
pub kernel_size: usize,
pub stack_top: VirtAddr,
pub stack_size: usize
}
Activity
phil-opp commentedon May 16, 2021
Sounds reasonable to me! While you can already find out the kernel start address and size through a linker script, I agree that a boot info field would be easier. For stack top and size there is currently no workaround except for setting these to fixed values in the bootloader config.
ethindp commentedon May 21, 2021
@phil-opp Couldn't you just pass that after finding the address in the bootloader? I'm confused about the problem.
phil-opp commentedon May 22, 2021
There is no problem here, we just need to do it. Happy to merge a PR for this!
phil-opp commentedon May 22, 2021
Some adjustments to the code from the OP that I would make:
Basically:
KernelInfo
instead ofUnwindInfo
since it isn't directly related to unwinding and might have other use cases too.VirtAddr
type of thex86_64
crate to keep theBootInfo
stable (otherwise updating thex86_64
version would be a breaking change).usize
. Useu64
instead. (This might be overcautious, but it makes sure that theBootInfo
always has the same size independent of the target platform.)