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

Method cpu_write_vmm_note

vmm/src/cpu.rs:3033–3152  ·  view source on GitHub ↗
(
        &mut self,
        dump_state: &DumpState,
    )

Source from the content-addressed store, hash-verified

3031 }
3032
3033 fn cpu_write_vmm_note(
3034 &mut self,
3035 dump_state: &DumpState,
3036 ) -> std::result::Result<(), GuestDebuggableError> {
3037 let mut coredump_file = dump_state.file.as_ref().unwrap();
3038 for vcpu in &self.vcpus {
3039 let note_size = self.get_note_size(NoteDescType::Vmm, 1);
3040 let mut pos: usize = 0;
3041 let mut buf = vec![0; note_size as usize];
3042 let descsz = size_of::<DumpCpusState>();
3043 let vcpu_id = vcpu.lock().unwrap().id;
3044
3045 let note = Elf64_Nhdr {
3046 n_namesz: COREDUMP_NAME_SIZE,
3047 n_descsz: descsz as u32,
3048 n_type: 0,
3049 };
3050
3051 let bytes: &[u8] = note.as_slice();
3052 buf.splice(0.., bytes.to_vec());
3053 pos += round_up!(size_of::<Elf64_Nhdr>(), 4);
3054
3055 buf.resize(pos + 4, 0);
3056 buf.splice(pos.., "QEMU".to_string().into_bytes());
3057
3058 pos += round_up!(COREDUMP_NAME_SIZE as usize, 4);
3059
3060 let gregs = self.vcpus[usize::try_from(vcpu_id).unwrap()]
3061 .lock()
3062 .unwrap()
3063 .vcpu
3064 .get_regs()
3065 .map_err(|_e| GuestDebuggableError::Coredump(anyhow!("get regs failed")))?;
3066
3067 let regs1 = [
3068 gregs.get_rax(),
3069 gregs.get_rbx(),
3070 gregs.get_rcx(),
3071 gregs.get_rdx(),
3072 gregs.get_rsi(),
3073 gregs.get_rdi(),
3074 gregs.get_rsp(),
3075 gregs.get_rbp(),
3076 ];
3077
3078 let regs2 = [
3079 gregs.get_r8(),
3080 gregs.get_r9(),
3081 gregs.get_r10(),
3082 gregs.get_r11(),
3083 gregs.get_r12(),
3084 gregs.get_r13(),
3085 gregs.get_r14(),
3086 gregs.get_r15(),
3087 ];
3088
3089 let sregs = self.vcpus[usize::try_from(vcpu_id).unwrap()]
3090 .lock()

Callers 1

coredumpMethod · 0.45

Calls 8

newFunction · 0.85
get_note_sizeMethod · 0.80
as_sliceMethod · 0.80
resizeMethod · 0.45
get_regsMethod · 0.45
get_sregsMethod · 0.45
get_msrsMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected