From dec31c86c95491bbbaff462670c10522e24d3cc0 Mon Sep 17 00:00:00 2001 From: Lucy Menon <168595099+syntactically@users.noreply.github.com> Date: Mon, 13 Oct 2025 04:33:43 +0100 Subject: [PATCH] Make mem::exe::LoadInfo a struct, instead of an alias This has the major advantage that it makes it easy to impl Clone on the struct, which will be useful shortly when snapshots start to keep copies of the load info around. Signed-off-by: Simon Davies --- src/hyperlight_host/src/mem/elf.rs | 25 +++++++++---------- src/hyperlight_host/src/mem/exe.rs | 9 ++++--- .../src/sandbox/uninitialized_evolve.rs | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/hyperlight_host/src/mem/elf.rs b/src/hyperlight_host/src/mem/elf.rs index 3a30354ef..62ee0e904 100644 --- a/src/hyperlight_host/src/mem/elf.rs +++ b/src/hyperlight_host/src/mem/elf.rs @@ -27,6 +27,7 @@ use goblin::elf32::program_header::PT_LOAD; #[cfg(feature = "init-paging")] use goblin::elf64::program_header::PT_LOAD; +use super::exe::LoadInfo; use crate::{Result, log_then_return, new_error}; #[cfg(feature = "mem_profile")] @@ -161,11 +162,7 @@ impl ElfInfo { .unwrap(); (max_phdr.p_vaddr + max_phdr.p_memsz - self.get_base_va()) as usize } - pub(crate) fn load_at( - self, - load_addr: usize, - target: &mut [u8], - ) -> Result { + pub(crate) fn load_at(self, load_addr: usize, target: &mut [u8]) -> Result { let base_va = self.get_base_va(); for phdr in self.phdrs.iter().filter(|phdr| phdr.p_type == PT_LOAD) { let start_va = (phdr.p_vaddr - base_va) as usize; @@ -209,15 +206,17 @@ impl ElfInfo { if #[cfg(feature = "mem_profile")] { let va_size = self.get_va_size() as u64; let base_svma = self.get_base_va(); - Ok(Arc::new(UnwindInfo { - payload: self.payload, - load_addr: load_addr as u64, - va_size, - base_svma, - shdrs: self.shdrs, - })) + Ok(LoadInfo { + info: Arc::new(UnwindInfo { + payload: self.payload, + load_addr: load_addr as u64, + va_size, + base_svma, + shdrs: self.shdrs, + }) + }) } else { - Ok(()) + Ok(LoadInfo {}) } } } diff --git a/src/hyperlight_host/src/mem/exe.rs b/src/hyperlight_host/src/mem/exe.rs index 303b0dc79..ae204f714 100644 --- a/src/hyperlight_host/src/mem/exe.rs +++ b/src/hyperlight_host/src/mem/exe.rs @@ -58,10 +58,11 @@ impl framehop::ModuleSectionInfo for &DummyUnwindInfo { } } -#[cfg(feature = "mem_profile")] -pub(crate) type LoadInfo = Arc; -#[cfg(not(feature = "mem_profile"))] -pub(crate) type LoadInfo = (); +#[derive(Clone)] +pub(crate) struct LoadInfo { + #[cfg(feature = "mem_profile")] + pub(crate) info: Arc, +} impl ExeInfo { pub fn from_file(path: &str) -> Result { diff --git a/src/hyperlight_host/src/sandbox/uninitialized_evolve.rs b/src/hyperlight_host/src/sandbox/uninitialized_evolve.rs index 98941d893..87870b3a2 100644 --- a/src/hyperlight_host/src/sandbox/uninitialized_evolve.rs +++ b/src/hyperlight_host/src/sandbox/uninitialized_evolve.rs @@ -163,7 +163,7 @@ pub(crate) fn set_up_hypervisor_partition( }; #[cfg(feature = "mem_profile")] - let trace_info = MemTraceInfo::new(_load_info)?; + let trace_info = MemTraceInfo::new(_load_info.info)?; HyperlightVm::new( regions,