[go: up one dir, main page]

Struct gimli::UnwindTableRow [] [src]

pub struct UnwindTableRow<'input, Endian> where Endian: Endianity {
    // some 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.

Methods

impl<'input, Endian> UnwindTableRow<'input, Endian> where Endian: Endianity
[src]

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.

Get the canonical frame address (CFA) recovery rule for this row.

Get the register recovery rules for this row.

The rule at index i of the slice is the rule for register i. The slice is not guaranteed to have length equal to the number of registers on the target architecture. It is only as long as the largest numbered register for which a recovery rule is defined in this row. All others are implied to be Undefined.

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

Trait Implementations

impl<'input, Endian: Clone> Clone for UnwindTableRow<'input, Endian> where Endian: Endianity
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl<'input, Endian: Debug> Debug for UnwindTableRow<'input, Endian> where Endian: Endianity
[src]

Formats the value using the given formatter.

impl<'input, Endian: PartialEq> PartialEq for UnwindTableRow<'input, Endian> where Endian: Endianity
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<'input, Endian: Eq> Eq for UnwindTableRow<'input, Endian> where Endian: Endianity
[src]

impl<'input, Endian> Default for UnwindTableRow<'input, Endian> where Endian: Endianity
[src]

Returns the "default value" for a type. Read more