4 #ifndef __ASSEMBLY__ |
4 #ifndef __ASSEMBLY__ |
5 #warning "asm/dwarf2.h should be only included in pure assembly files" |
5 #warning "asm/dwarf2.h should be only included in pure assembly files" |
6 #endif |
6 #endif |
7 |
7 |
8 /* |
8 /* |
9 Macros for dwarf2 CFI unwind table entries. |
9 * Macros for dwarf2 CFI unwind table entries. |
10 See "as.info" for details on these pseudo ops. Unfortunately |
10 * See "as.info" for details on these pseudo ops. Unfortunately |
11 they are only supported in very new binutils, so define them |
11 * they are only supported in very new binutils, so define them |
12 away for older version. |
12 * away for older version. |
13 */ |
13 */ |
14 |
14 |
15 #ifdef CONFIG_AS_CFI |
15 #ifdef CONFIG_AS_CFI |
16 |
16 |
17 #define CFI_STARTPROC .cfi_startproc |
17 #define CFI_STARTPROC .cfi_startproc |
18 #define CFI_ENDPROC .cfi_endproc |
18 #define CFI_ENDPROC .cfi_endproc |
19 #define CFI_DEF_CFA .cfi_def_cfa |
19 #define CFI_DEF_CFA .cfi_def_cfa |
20 #define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register |
20 #define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register |
21 #define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset |
21 #define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset |
22 #define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset |
22 #define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset |
23 #define CFI_OFFSET .cfi_offset |
23 #define CFI_OFFSET .cfi_offset |
24 #define CFI_REL_OFFSET .cfi_rel_offset |
24 #define CFI_REL_OFFSET .cfi_rel_offset |
25 #define CFI_REGISTER .cfi_register |
25 #define CFI_REGISTER .cfi_register |
26 #define CFI_RESTORE .cfi_restore |
26 #define CFI_RESTORE .cfi_restore |
27 #define CFI_REMEMBER_STATE .cfi_remember_state |
27 #define CFI_REMEMBER_STATE .cfi_remember_state |
28 #define CFI_RESTORE_STATE .cfi_restore_state |
28 #define CFI_RESTORE_STATE .cfi_restore_state |
29 #define CFI_UNDEFINED .cfi_undefined |
29 #define CFI_UNDEFINED .cfi_undefined |
30 |
30 |
31 #ifdef CONFIG_AS_CFI_SIGNAL_FRAME |
31 #ifdef CONFIG_AS_CFI_SIGNAL_FRAME |
32 #define CFI_SIGNAL_FRAME .cfi_signal_frame |
32 #define CFI_SIGNAL_FRAME .cfi_signal_frame |
33 #else |
33 #else |
34 #define CFI_SIGNAL_FRAME |
34 #define CFI_SIGNAL_FRAME |
35 #endif |
35 #endif |
36 |
36 |
37 #else |
37 #else |
38 |
38 |
39 /* Due to the structure of pre-exisiting code, don't use assembler line |
39 /* |
40 comment character # to ignore the arguments. Instead, use a dummy macro. */ |
40 * Due to the structure of pre-exisiting code, don't use assembler line |
|
41 * comment character # to ignore the arguments. Instead, use a dummy macro. |
|
42 */ |
41 .macro cfi_ignore a=0, b=0, c=0, d=0 |
43 .macro cfi_ignore a=0, b=0, c=0, d=0 |
42 .endm |
44 .endm |
43 |
45 |
44 #define CFI_STARTPROC cfi_ignore |
46 #define CFI_STARTPROC cfi_ignore |
45 #define CFI_ENDPROC cfi_ignore |
47 #define CFI_ENDPROC cfi_ignore |
46 #define CFI_DEF_CFA cfi_ignore |
48 #define CFI_DEF_CFA cfi_ignore |
47 #define CFI_DEF_CFA_REGISTER cfi_ignore |
49 #define CFI_DEF_CFA_REGISTER cfi_ignore |
48 #define CFI_DEF_CFA_OFFSET cfi_ignore |
50 #define CFI_DEF_CFA_OFFSET cfi_ignore |
49 #define CFI_ADJUST_CFA_OFFSET cfi_ignore |
51 #define CFI_ADJUST_CFA_OFFSET cfi_ignore |
50 #define CFI_OFFSET cfi_ignore |
52 #define CFI_OFFSET cfi_ignore |
51 #define CFI_REL_OFFSET cfi_ignore |
53 #define CFI_REL_OFFSET cfi_ignore |
52 #define CFI_REGISTER cfi_ignore |
54 #define CFI_REGISTER cfi_ignore |
53 #define CFI_RESTORE cfi_ignore |
55 #define CFI_RESTORE cfi_ignore |
54 #define CFI_REMEMBER_STATE cfi_ignore |
56 #define CFI_REMEMBER_STATE cfi_ignore |
55 #define CFI_RESTORE_STATE cfi_ignore |
57 #define CFI_RESTORE_STATE cfi_ignore |
56 #define CFI_UNDEFINED cfi_ignore |
58 #define CFI_UNDEFINED cfi_ignore |
57 #define CFI_SIGNAL_FRAME cfi_ignore |
59 #define CFI_SIGNAL_FRAME cfi_ignore |
58 |
60 |
59 #endif |
61 #endif |
60 |
62 |
|
63 /* |
|
64 * An attempt to make CFI annotations more or less |
|
65 * correct and shorter. It is implied that you know |
|
66 * what you're doing if you use them. |
|
67 */ |
|
68 #ifdef __ASSEMBLY__ |
|
69 #ifdef CONFIG_X86_64 |
|
70 .macro pushq_cfi reg |
|
71 pushq \reg |
|
72 CFI_ADJUST_CFA_OFFSET 8 |
|
73 .endm |
|
74 |
|
75 .macro popq_cfi reg |
|
76 popq \reg |
|
77 CFI_ADJUST_CFA_OFFSET -8 |
|
78 .endm |
|
79 |
|
80 .macro movq_cfi reg offset=0 |
|
81 movq %\reg, \offset(%rsp) |
|
82 CFI_REL_OFFSET \reg, \offset |
|
83 .endm |
|
84 |
|
85 .macro movq_cfi_restore offset reg |
|
86 movq \offset(%rsp), %\reg |
|
87 CFI_RESTORE \reg |
|
88 .endm |
|
89 #else /*!CONFIG_X86_64*/ |
|
90 |
|
91 /* 32bit defenitions are missed yet */ |
|
92 |
|
93 #endif /*!CONFIG_X86_64*/ |
|
94 #endif /*__ASSEMBLY__*/ |
|
95 |
61 #endif /* _ASM_X86_DWARF2_H */ |
96 #endif /* _ASM_X86_DWARF2_H */ |