aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2005-09-12 12:49:24 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-12 13:50:56 -0400
commit7effaa882af523085f7acadc5871b75a7e506baf (patch)
tree420890a24a9904bdaaec20dd9909d2f6f1e0d2f6 /include
parentb3ab8382245541ea030faaa1645f66258fde452d (diff)
[PATCH] x86-64: Fix CFI information
Being the foundation for reliable stack unwinding, this fixes CFI unwind annotations in many low-level x86_64 routines, plus a config option (available to all architectures, and also present in the previously sent patch adding such annotations to i386 code) to enable them separatly rather than only along with adding full debug information. Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
-rw-r--r--include/asm-x86_64/calling.h23
-rw-r--r--include/asm-x86_64/dwarf2.h8
2 files changed, 23 insertions, 8 deletions
diff --git a/include/asm-x86_64/calling.h b/include/asm-x86_64/calling.h
index 0bc12655fa5b..fc2c5a6c262a 100644
--- a/include/asm-x86_64/calling.h
+++ b/include/asm-x86_64/calling.h
@@ -65,27 +65,36 @@
65 .if \skipr11 65 .if \skipr11
66 .else 66 .else
67 movq (%rsp),%r11 67 movq (%rsp),%r11
68 CFI_RESTORE r11
68 .endif 69 .endif
69 .if \skipr8910 70 .if \skipr8910
70 .else 71 .else
71 movq 1*8(%rsp),%r10 72 movq 1*8(%rsp),%r10
73 CFI_RESTORE r10
72 movq 2*8(%rsp),%r9 74 movq 2*8(%rsp),%r9
75 CFI_RESTORE r9
73 movq 3*8(%rsp),%r8 76 movq 3*8(%rsp),%r8
77 CFI_RESTORE r8
74 .endif 78 .endif
75 .if \skiprax 79 .if \skiprax
76 .else 80 .else
77 movq 4*8(%rsp),%rax 81 movq 4*8(%rsp),%rax
82 CFI_RESTORE rax
78 .endif 83 .endif
79 .if \skiprcx 84 .if \skiprcx
80 .else 85 .else
81 movq 5*8(%rsp),%rcx 86 movq 5*8(%rsp),%rcx
87 CFI_RESTORE rcx
82 .endif 88 .endif
83 .if \skiprdx 89 .if \skiprdx
84 .else 90 .else
85 movq 6*8(%rsp),%rdx 91 movq 6*8(%rsp),%rdx
92 CFI_RESTORE rdx
86 .endif 93 .endif
87 movq 7*8(%rsp),%rsi 94 movq 7*8(%rsp),%rsi
95 CFI_RESTORE rsi
88 movq 8*8(%rsp),%rdi 96 movq 8*8(%rsp),%rdi
97 CFI_RESTORE rdi
89 .if ARG_SKIP+\addskip > 0 98 .if ARG_SKIP+\addskip > 0
90 addq $ARG_SKIP+\addskip,%rsp 99 addq $ARG_SKIP+\addskip,%rsp
91 CFI_ADJUST_CFA_OFFSET -(ARG_SKIP+\addskip) 100 CFI_ADJUST_CFA_OFFSET -(ARG_SKIP+\addskip)
@@ -124,11 +133,17 @@
124 133
125 .macro RESTORE_REST 134 .macro RESTORE_REST
126 movq (%rsp),%r15 135 movq (%rsp),%r15
136 CFI_RESTORE r15
127 movq 1*8(%rsp),%r14 137 movq 1*8(%rsp),%r14
138 CFI_RESTORE r14
128 movq 2*8(%rsp),%r13 139 movq 2*8(%rsp),%r13
140 CFI_RESTORE r13
129 movq 3*8(%rsp),%r12 141 movq 3*8(%rsp),%r12
142 CFI_RESTORE r12
130 movq 4*8(%rsp),%rbp 143 movq 4*8(%rsp),%rbp
144 CFI_RESTORE rbp
131 movq 5*8(%rsp),%rbx 145 movq 5*8(%rsp),%rbx
146 CFI_RESTORE rbx
132 addq $REST_SKIP,%rsp 147 addq $REST_SKIP,%rsp
133 CFI_ADJUST_CFA_OFFSET -(REST_SKIP) 148 CFI_ADJUST_CFA_OFFSET -(REST_SKIP)
134 .endm 149 .endm
@@ -146,11 +161,3 @@
146 .macro icebp 161 .macro icebp
147 .byte 0xf1 162 .byte 0xf1
148 .endm 163 .endm
149
150#ifdef CONFIG_FRAME_POINTER
151#define ENTER enter
152#define LEAVE leave
153#else
154#define ENTER
155#define LEAVE
156#endif
diff --git a/include/asm-x86_64/dwarf2.h b/include/asm-x86_64/dwarf2.h
index afd4212e860b..582757fc0365 100644
--- a/include/asm-x86_64/dwarf2.h
+++ b/include/asm-x86_64/dwarf2.h
@@ -24,6 +24,10 @@
24#define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset 24#define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset
25#define CFI_OFFSET .cfi_offset 25#define CFI_OFFSET .cfi_offset
26#define CFI_REL_OFFSET .cfi_rel_offset 26#define CFI_REL_OFFSET .cfi_rel_offset
27#define CFI_REGISTER .cfi_register
28#define CFI_RESTORE .cfi_restore
29#define CFI_REMEMBER_STATE .cfi_remember_state
30#define CFI_RESTORE_STATE .cfi_restore_state
27 31
28#else 32#else
29 33
@@ -36,6 +40,10 @@
36#define CFI_ADJUST_CFA_OFFSET # 40#define CFI_ADJUST_CFA_OFFSET #
37#define CFI_OFFSET # 41#define CFI_OFFSET #
38#define CFI_REL_OFFSET # 42#define CFI_REL_OFFSET #
43#define CFI_REGISTER #
44#define CFI_RESTORE #
45#define CFI_REMEMBER_STATE #
46#define CFI_RESTORE_STATE #
39 47
40#endif 48#endif
41 49