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}