pub struct Unit {
pub name: String,
pub dir: String,
pub producer: String,
pub files: Vec<String>,
pub types: Vec<Shape>,
pub funcs: Vec<Function>,
pub globals: Vec<Global>,
pub pointer: u8,
pub frames: bool,
}Expand description
One compilation unit’s worth of debug information.
Fields§
§name: StringThe file being compiled, as the command line spelled it, already prefix mapped.
dir: StringThe directory the compiler was run in, already prefix mapped.
This is DW_AT_comp_dir, and what it is for is that every relative name in the tables below
is relative to it. A build that cannot say where it ran writes a single dot, which is what
the tables are already relative to and is therefore the one answer that changes nothing.
producer: StringWhat produced this, which is this compiler and its version.
files: Vec<String>Every file any row names, in the order the rows refer to them by.
types: Vec<Shape>Every type anything in the unit names, in the order they refer to them by.
A table of indices rather than a tree, so that a type naming itself is an ordinary entry.
See Shape for what is in one and what is deliberately left out of one.
funcs: Vec<Function>The functions, in the order the text section holds them.
globals: Vec<Global>The file-scope variables this unit defines, in the order the object file holds them.
Only the ones it defines. A name this unit declares and another one defines is a name the linker resolves, so an entry for it here would be an entry whose address is somebody else’s, and a reader wanting the type of one reads the unit that has it.
pointer: u8How many bytes an address is on this target.
frames: boolWhether this build writes a call frame table, which is what a frame base is resolved through.
A function’s DW_AT_frame_base is DW_OP_call_frame_cfa, and what answers that operation
is the unwind table the build already writes for every function. A build that turns the
table off, which is a kernel or a freestanding image, leaves a reader with nothing to
evaluate the operation against, so the attribute is left off there rather than written as
something no debugger can follow. The locations that would be measured from it are left off
with it.
Trait Implementations§
impl Eq for Unit
impl StructuralPartialEq for Unit
Auto Trait Implementations§
impl Freeze for Unit
impl RefUnwindSafe for Unit
impl Send for Unit
impl Sync for Unit
impl Unpin for Unit
impl UnsafeUnpin for Unit
impl UnwindSafe for Unit
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.