pub struct UnwindTableRow<R: Reader> { /* fields omitted */ }
A row in the virtual unwind table that describes how to find the values of
the registers in the previous frame for a range of PC addresses.
Get the starting PC address that this row applies to.
Get the end PC address where this row's register rules become
unapplicable.
In other words, this row describes how to recover the last frame's
registers for all PCs where row.start_address() <= PC < row.end_address()
. This row does NOT describe how to recover registers
when PC == row.end_address()
.
Return true
if the given address
is within this row's address range,
false
otherwise.
Returns the amount of args currently on the stack.
When unwinding, if the personality function requested a change in IP,
the SP needs to be adjusted by saved_args_size.
Get the canonical frame address (CFA) recovery rule for this row.
Get the register recovery rule for the given register number.
The register number mapping is architecture dependent. For example, in
the x86-64 ABI the register number mapping is defined in Figure 3.36:
Figure 3.36: DWARF Register Number Mapping
Register Name | Number | Abbreviation |
General Purpose Register RAX | 0 | %rax |
General Purpose Register RDX | 1 | %rdx |
General Purpose Register RCX | 2 | %rcx |
General Purpose Register RBX | 3 | %rbx |
General Purpose Register RSI | 4 | %rsi |
General Purpose Register RDI | 5 | %rdi |
General Purpose Register RBP | 6 | %rbp |
Stack Pointer Register RSP | 7 | %rsp |
Extended Integer Registers 8-15 | 8-15 | %r8-%r15 |
Return Address RA | 16 | |
Vector Registers 0–7 | 17-24 | %xmm0–%xmm7 |
Extended Vector Registers 8–15 | 25-32 | %xmm8–%xmm15 |
Floating Point Registers 0–7 | 33-40 | %st0–%st7 |
MMX Registers 0–7 | 41-48 | %mm0–%mm7 |
Flag Register | 49 | %rFLAGS |
Segment Register ES | 50 | %es |
Segment Register CS | 51 | %cs |
Segment Register SS | 52 | %ss |
Segment Register DS | 53 | %ds |
Segment Register FS | 54 | %fs |
Segment Register GS | 55 | %gs |
Reserved | 56-57 | |
FS Base address | 58 | %fs.base |
GS Base address | 59 | %gs.base |
Reserved | 60-61 | |
Task Register | 62 | %tr |
LDT Register | 63 | %ldtr |
128-bit Media Control and Status | 64 | %mxcsr |
x87 Control Word | 65 | %fcw |
x87 Status Word | 66 | %fsw |
Upper Vector Registers 16–31 | 67-82 | %xmm16–%xmm31 |
Reserved | 83-117 | |
Vector Mask Registers 0–7 | 118-125 | %k0–%k7 |
Reserved | 126-129 | |
Iterate over all defined register (number, rule)
pairs.
The rules are not iterated in any guaranteed order. Any register that
does not make an appearance in the iterator implicitly has the rule
RegisterRule::Undefined
.
for &(register, ref rule) in unwind_table_row.registers() {
}
Performs copy-assignment from source
. Read more
Formats the value using the given formatter. Read more
This method tests for self
and other
values to be equal, and is used by ==
. Read more
This method tests for !=
.
Returns the "default value" for a type. Read more