pub struct Unwind {
pub bytes: Vec<u8>,
pub relocs: Vec<Reloc>,
pub info: Vec<u8>,
pub labels: Vec<Marker>,
}Expand description
The unwind table, as the bytes of the section or two it goes in and what the linker has to be told about them.
Bytes rather than rows, because what a record is is the platform’s answer rather than the object writer’s, and the layer that knows what a frame did is the one that can say it in the fewest of them. What is left for the writer is where the sections go and what their relocations are.
Two of them, because the two platforms lay the same facts out differently. ELF writes one section
of records, each a little program an unwinder runs to rebuild the frame at an address, and each
carrying its own codes, so Self::info is empty there. Windows writes a table of fixed rows
sorted by address, one per function, each pointing at the description of that function’s prologue
in a second section, which is what Self::info holds.
Every record says where its function is, and where a function is is a number no compilation knows: a function is at a fixed offset inside its own section and the section is placed by the linker. So there are relocations, and which kind they are is the format’s answer too.
Fields§
§bytes: Vec<u8>The records: one shared header and one per function on ELF, and one row per function on Windows.
relocs: Vec<Reloc>Every place in them that names something the linker has to place, which is the functions they are about and, where there is a second section, the description each row points at.
info: Vec<u8>What those records point at, on the format that keeps the two apart, and nothing at all on the one whose records carry their own.
labels: Vec<Marker>The names inside Self::info, one per function that has a description there, which are
what the relocations above ask for.
Names rather than offsets because a relocation names a symbol, and the record and the thing it points at are in two different sections, so there is no distance either of them can be written with instead.
Trait Implementations§
impl Eq for Unwind
impl StructuralPartialEq for Unwind
Auto Trait Implementations§
impl Freeze for Unwind
impl RefUnwindSafe for Unwind
impl Send for Unwind
impl Sync for Unwind
impl Unpin for Unwind
impl UnsafeUnpin for Unwind
impl UnwindSafe for Unwind
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.