Skip to content

Pass UnwindInfo in BootInfo #164

Open
@Andy-Python-Programmer

Description

@Andy-Python-Programmer

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

phil-opp commented on May 16, 2021

@phil-opp
Member

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

ethindp commented on May 21, 2021

@ethindp
Contributor

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

phil-opp

phil-opp commented on May 22, 2021

@phil-opp
Member

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

phil-opp

phil-opp commented on May 22, 2021

@phil-opp
Member

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.)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @phil-opp@ethindp@Andy-Python-Programmer

      Issue actions

        Pass `UnwindInfo` in `BootInfo` · Issue #164 · rust-osdev/bootloader