1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
//! Some runtime-available executable information. Mostly used for backtracing.
use crate::object::ObjID;
// TODO: this is all a hack
/// Returns the object ID of the running executable.
pub fn get_current_exe_id() -> Option<ObjID> {
unsafe { crate::rt1::get_exec_id() }
}
/// A particular segment of the loaded executable, corresponding to where the program headers were
/// loaded into memory.
pub struct Segment {
pub vaddr: usize,
pub len: usize,
}
/// Return a given segment for a given loaded executable or library by index, or None of segnr is too large (or if this information is not available).
pub fn get_segment(id: ObjID, segnr: usize) -> Option<Segment> {
if let Some(eid) = get_current_exe_id() {
if eid != id {
return None;
}
crate::rt1::get_load_seg(segnr).map(|(v, l)| Segment { vaddr: v, len: l })
} else {
None
}
}