MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / write_header

Method write_header

vmm/src/coredump.rs:197–246  ·  view source on GitHub ↗
(
        &mut self,
        dump_state: &DumpState,
    )

Source from the content-addressed store, hash-verified

195
196pub trait Elf64Writable {
197 fn write_header(
198 &mut self,
199 dump_state: &DumpState,
200 ) -> std::result::Result<(), GuestDebuggableError> {
201 let e_ident = [
202 elf::ELFMAG0 as u8, // magic
203 elf::ELFMAG1,
204 elf::ELFMAG2,
205 elf::ELFMAG3,
206 ELFCLASS64, // class
207 elf::ELFDATA2LSB as u8, //data
208 EV_CURRENT, // version
209 0, // os_abi
210 0, // abi_version
211 0, // padding
212 0,
213 0,
214 0,
215 0,
216 0,
217 0,
218 ];
219 let elf64_ehdr_size = std::mem::size_of::<elf::Elf64_Ehdr>();
220 let elf64_phdr_size = std::mem::size_of::<elf::Elf64_Phdr>();
221 let mut elf64_ehdr = elf::Elf64_Ehdr {
222 e_ident,
223 e_type: ET_CORE,
224 e_machine: EM_X86_64,
225 e_version: EV_CURRENT as u32,
226 e_entry: 0,
227 e_phoff: elf64_ehdr_size as u64,
228 e_shoff: 0,
229 e_flags: 0,
230 e_ehsize: 0,
231 e_phentsize: elf64_phdr_size as u16,
232 e_phnum: dump_state.elf_phdr_num,
233 e_shentsize: 0,
234 e_shnum: 0,
235 e_shstrndx: 0,
236 };
237 elf64_ehdr.e_ehsize = std::mem::size_of_val(&elf64_ehdr) as u16;
238
239 let mut coredump_file = dump_state.file.as_ref().unwrap();
240 let bytes: &[u8] = elf64_ehdr.as_slice();
241 coredump_file
242 .write(bytes)
243 .map_err(GuestDebuggableError::CoredumpFile)?;
244
245 Ok(())
246 }
247
248 fn write_note(
249 &mut self,

Callers 1

coredumpMethod · 0.80

Implementers 2

cpu.rsvmm/src/cpu.rs
vm.rsvmm/src/vm.rs

Calls 2

as_sliceMethod · 0.80
writeMethod · 0.45

Tested by

no test coverage detected