1 use crate::errors::SectionAppMemoryError;
2 use crate::linux_ptrace_dumper::LinuxPtraceDumper;
3 use crate::minidump_format::*;
4 use crate::minidump_writer::{DumpBuf, MinidumpWriter};
5 use crate::sections::MemoryArrayWriter;
6
7 type Result<T> = std::result::Result<T, SectionAppMemoryError>;
8
9 /// Write application-provided memory regions.
write(config: &mut MinidumpWriter, buffer: &mut DumpBuf) -> Result<()>10 pub fn write(config: &mut MinidumpWriter, buffer: &mut DumpBuf) -> Result<()> {
11 for app_memory in &config.app_memory {
12 let data_copy = LinuxPtraceDumper::copy_from_process(
13 config.blamed_thread,
14 app_memory.ptr as *mut libc::c_void,
15 app_memory.length,
16 )?;
17
18 let section = MemoryArrayWriter::<u8>::alloc_from_array(buffer, &data_copy)?;
19 let desc = MDMemoryDescriptor {
20 start_of_memory_range: app_memory.ptr as u64,
21 memory: section.location(),
22 };
23 config.memory_blocks.push(desc);
24 }
25 Ok(())
26 }
27