Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
include
asm
dwarf2.h
Go to the documentation of this file.
1
#ifndef _ASM_X86_DWARF2_H
2
#define _ASM_X86_DWARF2_H
3
4
#ifndef __ASSEMBLY__
5
#warning "asm/dwarf2.h should be only included in pure assembly files"
6
#endif
7
8
/*
9
* Macros for dwarf2 CFI unwind table entries.
10
* See "as.info" for details on these pseudo ops. Unfortunately
11
* they are only supported in very new binutils, so define them
12
* away for older version.
13
*/
14
15
#ifdef CONFIG_AS_CFI
16
17
#define CFI_STARTPROC .cfi_startproc
18
#define CFI_ENDPROC .cfi_endproc
19
#define CFI_DEF_CFA .cfi_def_cfa
20
#define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register
21
#define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset
22
#define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset
23
#define CFI_OFFSET .cfi_offset
24
#define CFI_REL_OFFSET .cfi_rel_offset
25
#define CFI_REGISTER .cfi_register
26
#define CFI_RESTORE .cfi_restore
27
#define CFI_REMEMBER_STATE .cfi_remember_state
28
#define CFI_RESTORE_STATE .cfi_restore_state
29
#define CFI_UNDEFINED .cfi_undefined
30
#define CFI_ESCAPE .cfi_escape
31
32
#ifdef CONFIG_AS_CFI_SIGNAL_FRAME
33
#define CFI_SIGNAL_FRAME .cfi_signal_frame
34
#else
35
#define CFI_SIGNAL_FRAME
36
#endif
37
38
#if defined(CONFIG_AS_CFI_SECTIONS) && defined(__ASSEMBLY__)
39
/*
40
* Emit CFI data in .debug_frame sections, not .eh_frame sections.
41
* The latter we currently just discard since we don't do DWARF
42
* unwinding at runtime. So only the offline DWARF information is
43
* useful to anyone. Note we should not use this directive if this
44
* file is used in the vDSO assembly, or if vmlinux.lds.S gets
45
* changed so it doesn't discard .eh_frame.
46
*/
47
.cfi_sections .debug_frame
48
#endif
49
50
#else
51
52
/*
53
* Due to the structure of pre-exisiting code, don't use assembler line
54
* comment character # to ignore the arguments. Instead, use a dummy macro.
55
*/
56
.macro cfi_ignore
a
=0,
b
=0,
c
=0,
d
=0
57
.endm
58
59
#define CFI_STARTPROC cfi_ignore
60
#define CFI_ENDPROC cfi_ignore
61
#define CFI_DEF_CFA cfi_ignore
62
#define CFI_DEF_CFA_REGISTER cfi_ignore
63
#define CFI_DEF_CFA_OFFSET cfi_ignore
64
#define CFI_ADJUST_CFA_OFFSET cfi_ignore
65
#define CFI_OFFSET cfi_ignore
66
#define CFI_REL_OFFSET cfi_ignore
67
#define CFI_REGISTER cfi_ignore
68
#define CFI_RESTORE cfi_ignore
69
#define CFI_REMEMBER_STATE cfi_ignore
70
#define CFI_RESTORE_STATE cfi_ignore
71
#define CFI_UNDEFINED cfi_ignore
72
#define CFI_ESCAPE cfi_ignore
73
#define CFI_SIGNAL_FRAME cfi_ignore
74
75
#endif
76
77
/*
78
* An attempt to make CFI annotations more or less
79
* correct and shorter. It is implied that you know
80
* what you're doing if you use them.
81
*/
82
#ifdef __ASSEMBLY__
83
#ifdef CONFIG_X86_64
84
.macro pushq_cfi
reg
85
pushq \reg
86
CFI_ADJUST_CFA_OFFSET
8
87
.endm
88
89
.macro popq_cfi
reg
90
popq \reg
91
CFI_ADJUST_CFA_OFFSET
-8
92
.endm
93
94
.macro pushfq_cfi
95
pushfq
96
CFI_ADJUST_CFA_OFFSET
8
97
.endm
98
99
.macro popfq_cfi
100
popfq
101
CFI_ADJUST_CFA_OFFSET
-8
102
.endm
103
104
.macro movq_cfi
reg
offset
=0
105
movq %
\reg
,
\offset
(%
rsp
)
106
CFI_REL_OFFSET \
reg
, \
offset
107
.endm
108
109
.macro movq_cfi_restore
offset
reg
110
movq \
offset
(%
rsp
), %\reg
111
CFI_RESTORE \reg
112
.endm
113
#else
114
.macro pushl_cfi reg
115
pushl \reg
116
CFI_ADJUST_CFA_OFFSET
4
117
.endm
118
119
.macro popl_cfi reg
120
popl \reg
121
CFI_ADJUST_CFA_OFFSET
-4
122
.endm
123
124
.macro pushfl_cfi
125
pushfl
126
CFI_ADJUST_CFA_OFFSET
4
127
.endm
128
129
.macro popfl_cfi
130
popfl
131
CFI_ADJUST_CFA_OFFSET
-4
132
.endm
133
134
.macro movl_cfi reg
offset
=0
135
movl %
\reg
,
\offset
(%
esp
)
136
CFI_REL_OFFSET \reg, \offset
137
.endm
138
139
.macro movl_cfi_restore offset reg
140
movl \offset(%
esp
), %\reg
141
CFI_RESTORE \reg
142
.endm
143
#endif
144
#endif
/*__ASSEMBLY__*/
145
146
#endif
/* _ASM_X86_DWARF2_H */
Generated on Thu Jan 10 2013 13:20:01 for Linux Kernel by
1.8.2