mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-10 20:19:07 +00:00
kernel_loader: return a struct for better naming
The new LoadedKernel structure also splits out the size and end address, which are both used in different places (x86_64 wants end, aarch64 wants both). BUG=b:234155022 TEST=tools/presubmit TEST=cargo test -p kernel_loader Change-Id: I86a7e412c983f29a2c614cc9e6896aa11db6ba94 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3673611 Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Daniel Verkamp <dverkamp@chromium.org> Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
This commit is contained in:
parent
21445b1b83
commit
8cac16bf75
3 changed files with 25 additions and 7 deletions
|
@ -274,8 +274,9 @@ impl arch::LinuxArch for AArch64 {
|
|||
.map_err(Error::KernelLoadFailure)?;
|
||||
kernel_end = get_kernel_addr().offset() + kernel_size as u64;
|
||||
} else {
|
||||
kernel_end = elf_result.map_err(Error::LoadElfKernel)?;
|
||||
kernel_size = kernel_end as usize - get_kernel_addr().offset() as usize;
|
||||
let loaded_kernel = elf_result.map_err(Error::LoadElfKernel)?;
|
||||
kernel_size = loaded_kernel.size as usize;
|
||||
kernel_end = loaded_kernel.end.offset();
|
||||
}
|
||||
initrd = match components.initrd_image {
|
||||
Some(initrd_file) => {
|
||||
|
|
|
@ -61,6 +61,16 @@ pub enum Error {
|
|||
}
|
||||
pub type Result<T> = std::result::Result<T, Error>;
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||
/// Information about a kernel loaded with the [`load_kernel`] function.
|
||||
pub struct LoadedKernel {
|
||||
/// End address (exclusive) of the kernel.
|
||||
pub end: GuestAddress,
|
||||
|
||||
/// Size of the kernel image in bytes.
|
||||
pub size: u64,
|
||||
}
|
||||
|
||||
/// Loads a kernel from a vmlinux elf image to a slice
|
||||
///
|
||||
/// # Arguments
|
||||
|
@ -72,7 +82,7 @@ pub fn load_kernel<F>(
|
|||
guest_mem: &GuestMemory,
|
||||
kernel_start: GuestAddress,
|
||||
mut kernel_image: &mut F,
|
||||
) -> Result<u64>
|
||||
) -> Result<LoadedKernel>
|
||||
where
|
||||
F: Read + Seek + AsRawDescriptor,
|
||||
{
|
||||
|
@ -135,7 +145,12 @@ where
|
|||
.ok_or(Error::InvalidProgramHeaderMemSize)?;
|
||||
}
|
||||
|
||||
Ok(kernel_end)
|
||||
let size = kernel_end - kernel_start.offset();
|
||||
|
||||
Ok(LoadedKernel {
|
||||
end: GuestAddress(kernel_end),
|
||||
size,
|
||||
})
|
||||
}
|
||||
|
||||
/// Writes the command line string to the given memory slice.
|
||||
|
@ -246,7 +261,9 @@ mod test {
|
|||
let gm = create_guest_mem();
|
||||
let kernel_addr = GuestAddress(0x0);
|
||||
let mut image = make_elf_bin();
|
||||
assert_eq!(Ok(0x20_0035), load_kernel(&gm, kernel_addr, &mut image));
|
||||
let kernel = load_kernel(&gm, kernel_addr, &mut image).expect("failed to load ELF");
|
||||
assert_eq!(kernel.end, GuestAddress(0x20_0035));
|
||||
assert_eq!(kernel.size, 0x20_0035);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -1219,8 +1219,8 @@ impl X8664arch {
|
|||
bzimage::load_bzimage(mem, GuestAddress(KERNEL_START_OFFSET), kernel_image)
|
||||
.map_err(Error::LoadBzImage)
|
||||
} else {
|
||||
let kernel_end = elf_result.map_err(Error::LoadKernel)?;
|
||||
Ok((Default::default(), kernel_end))
|
||||
let loaded_kernel = elf_result.map_err(Error::LoadKernel)?;
|
||||
Ok((Default::default(), loaded_kernel.end.offset()))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue