pub enum Frame {
InstructionPointer(u64),
ReturnAddress(u64),
AdjustedReturnAddress(u64),
RelativeAddressFromInstructionPointer(LibraryHandle, u32),
RelativeAddressFromReturnAddress(LibraryHandle, u32),
RelativeAddressFromAdjustedReturnAddress(LibraryHandle, u32),
Label(StringHandle),
}
Expand description
A part of the information about a single stack frame.
Variants§
InstructionPointer(u64)
A code address taken from the instruction pointer.
This code address will be resolved to a library-relative address using
the library mappings on the process which were specified using
Profile::add_lib_mapping
.
ReturnAddress(u64)
A code address taken from a return address
This code address will be resolved to a library-relative address using
the library mappings on the process which were specified using
Profile::add_lib_mapping
.
AdjustedReturnAddress(u64)
A code address taken from a return address, but adjusted so that it points into the previous instruction. Usually this is “return address minus one byte”, but some unwinders subtract 2 or 4 bytes if they know more about the architecture-dependent instruction size.
When you call a function with a call instruction, the return address is set up in such a way that, once the called function returns, the CPU continues executing after the call instruction. That means that the return address points to the instruction after the call instruction. But for stack unwinding, you’re interested in the call instruction itself. The call instruction and the instruction after often have very different symbol information (different line numbers, or even different inline stacks).
This code address will be resolved to a library-relative address using
the library mappings on the process which were specified using
Profile::add_lib_mapping
.
RelativeAddressFromInstructionPointer(LibraryHandle, u32)
A relative address taken from the instruction pointer which
has already been resolved to a LibraryHandle
.
RelativeAddressFromReturnAddress(LibraryHandle, u32)
A relative address taken from a return address which
has already been resolved to a LibraryHandle
.
RelativeAddressFromAdjustedReturnAddress(LibraryHandle, u32)
A relative address taken from an adjusted return address which
has already been resolved to a LibraryHandle
.
Label(StringHandle)
A string, containing an index returned by
Profile::intern_string
.