wasmgdb_ddbug_parser/
cfi.rs

1use crate::location::Register;
2use crate::Address;
3
4/// A CFI directive and the function offset it applies to.
5///
6/// Address::none() is used for directives that apply to the whole function.
7pub type Cfi = (Address, CfiDirective);
8
9/// A CFI directive.
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub enum CfiDirective {
12    /// .cfi_startproc
13    StartProc,
14
15    /// .cfi_endproc
16    EndProc,
17
18    /// .cfi_personality <address>
19    Personality(Address),
20
21    /// .cfi_lsda <address>
22    // TODO: encoding?
23    Lsda(Address),
24
25    /// .cfi_signal_frame
26    SignalFrame,
27
28    /// .cfi_return_column <register>
29    ReturnColumn(Register),
30
31    /// .cfi_def_cfa <register>, <offset>
32    DefCfa(Register, i64),
33
34    /// .cfi_def_cfa_register <register>
35    DefCfaRegister(Register),
36
37    /// .cfi_def_cfa_offset <offset>
38    DefCfaOffset(i64),
39
40    /// .cfi_offset <register>, <offset>
41    Offset(Register, i64),
42
43    /// .cfi_val_offset <register>, <offset>
44    ValOffset(Register, i64),
45
46    /// .cfi_register <register1>, <register2>
47    Register(Register, Register),
48
49    /// .cfi_restore <register>
50    Restore(Register),
51
52    /// .cfi_undefined <register>
53    Undefined(Register),
54
55    /// .cfi_same_value <register>
56    SameValue(Register),
57
58    /// .cfi_remember_state
59    RememberState,
60
61    /// .cfi_restore_state
62    RestoreState,
63
64    /// An unsupported instruction.
65    Other,
66}