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