bootloader icon indicating copy to clipboard operation
bootloader copied to clipboard

Pass `UnwindInfo` in `BootInfo`

Open Andy-Python-Programmer opened this issue 4 years ago • 4 comments

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
}

Andy-Python-Programmer avatar May 15 '21 07:05 Andy-Python-Programmer

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.

phil-opp avatar May 16 '21 12:05 phil-opp

@phil-opp Couldn't you just pass that after finding the address in the bootloader? I'm confused about the problem.

ethindp avatar May 21 '21 20:05 ethindp

There is no problem here, we just need to do it. Happy to merge a PR for this!

phil-opp avatar May 22 '21 13:05 phil-opp

Some adjustments to the code from the OP that I would make:

#[derive(Debug, Copy, Clone)]
#[repr(C)]
pub struct KernelInfo {
    pub kernel_base: u64
    pub kernel_size: u64,
    pub stack_top: u64,
    pub stack_size: u64,
}

Basically:

  • Name the struct KernelInfo instead of UnwindInfo since it isn't directly related to unwinding and might have other use cases too.
  • Don't use the VirtAddr type of the x86_64 crate to keep the BootInfo stable (otherwise updating the x86_64 version would be a breaking change).
  • Don't use platform dependent size types such as usize. Use u64 instead. (This might be overcautious, but it makes sure that the BootInfo always has the same size independent of the target platform.)

phil-opp avatar May 22 '21 13:05 phil-opp