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

Method coredump

vmm/src/vm.rs:3572–3626  ·  view source on GitHub ↗
(&mut self, destination_url: &str)

Source from the content-addressed store, hash-verified

3570#[cfg(all(target_arch = "x86_64", feature = "guest_debug"))]
3571impl GuestDebuggable for Vm {
3572 fn coredump(&mut self, destination_url: &str) -> std::result::Result<(), GuestDebuggableError> {
3573 event!("vm", "coredumping");
3574
3575 let mut resume = false;
3576
3577 #[cfg(feature = "tdx")]
3578 {
3579 if let Some(ref platform) = self.config.lock().unwrap().platform
3580 && platform.tdx
3581 {
3582 return Err(GuestDebuggableError::Coredump(anyhow!(
3583 "Coredump not possible with TDX VM"
3584 )));
3585 }
3586 }
3587
3588 match self.get_state() {
3589 VmState::Running => {
3590 self.pause().map_err(GuestDebuggableError::Pause)?;
3591 resume = true;
3592 }
3593 VmState::Paused => {}
3594 _ => {
3595 return Err(GuestDebuggableError::Coredump(anyhow!(
3596 "Trying to coredump while VM is not running or paused"
3597 )));
3598 }
3599 }
3600
3601 let coredump_state = self.get_dump_state(destination_url)?;
3602
3603 self.write_header(&coredump_state)?;
3604 self.write_note(&coredump_state)?;
3605 self.write_loads(&coredump_state)?;
3606
3607 self.cpu_manager
3608 .lock()
3609 .unwrap()
3610 .cpu_write_elf64_note(&coredump_state)?;
3611 self.cpu_manager
3612 .lock()
3613 .unwrap()
3614 .cpu_write_vmm_note(&coredump_state)?;
3615
3616 self.memory_manager
3617 .lock()
3618 .unwrap()
3619 .coredump_iterate_save_mem(&coredump_state)?;
3620
3621 if resume {
3622 self.resume().map_err(GuestDebuggableError::Resume)?;
3623 }
3624
3625 Ok(())
3626 }
3627}
3628
3629#[cfg(all(feature = "kvm", target_arch = "x86_64"))]

Callers 1

vm_coredumpMethod · 0.45

Calls 10

get_stateMethod · 0.80
get_dump_stateMethod · 0.80
write_headerMethod · 0.80
write_noteMethod · 0.80
write_loadsMethod · 0.80
pauseMethod · 0.45
cpu_write_elf64_noteMethod · 0.45
cpu_write_vmm_noteMethod · 0.45
resumeMethod · 0.45

Tested by

no test coverage detected