aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorJan Beulich <JBeulich@suse.com>2014-09-24 03:41:30 -0400
committerThomas Gleixner <tglx@linutronix.de>2014-10-08 06:31:45 -0400
commitf74954f01ec9bb2004bcc24f247d1f26f1063ad2 (patch)
tree962c344a8150e37026efd31d09af342e8af56a33 /arch
parent5f1d919a8ca15f450c749227bc5e2e18f3cbfdb4 (diff)
x86: Unwind-annotate thunk_32.S
Signed-off-by: Jan Beulich <jbeulich@suse.com> Link: http://lkml.kernel.org/r/542291CA0200007800038085@mail.emea.novell.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/lib/thunk_32.S21
1 files changed, 15 insertions, 6 deletions
diff --git a/arch/x86/lib/thunk_32.S b/arch/x86/lib/thunk_32.S
index e9acf5f4fc92..e28cdaf5ac2c 100644
--- a/arch/x86/lib/thunk_32.S
+++ b/arch/x86/lib/thunk_32.S
@@ -6,14 +6,19 @@
6 */ 6 */
7 #include <linux/linkage.h> 7 #include <linux/linkage.h>
8 #include <asm/asm.h> 8 #include <asm/asm.h>
9 #include <asm/dwarf2.h>
9 10
10 /* put return address in eax (arg1) */ 11 /* put return address in eax (arg1) */
11 .macro THUNK name, func, put_ret_addr_in_eax=0 12 .macro THUNK name, func, put_ret_addr_in_eax=0
12 .globl \name 13 .globl \name
13\name: 14\name:
14 pushl %eax 15 CFI_STARTPROC
15 pushl %ecx 16 pushl_cfi %eax
16 pushl %edx 17 CFI_REL_OFFSET eax, 0
18 pushl_cfi %ecx
19 CFI_REL_OFFSET ecx, 0
20 pushl_cfi %edx
21 CFI_REL_OFFSET edx, 0
17 22
18 .if \put_ret_addr_in_eax 23 .if \put_ret_addr_in_eax
19 /* Place EIP in the arg1 */ 24 /* Place EIP in the arg1 */
@@ -21,10 +26,14 @@
21 .endif 26 .endif
22 27
23 call \func 28 call \func
24 popl %edx 29 popl_cfi %edx
25 popl %ecx 30 CFI_RESTORE edx
26 popl %eax 31 popl_cfi %ecx
32 CFI_RESTORE ecx
33 popl_cfi %eax
34 CFI_RESTORE eax
27 ret 35 ret
36 CFI_ENDPROC
28 _ASM_NOKPROBE(\name) 37 _ASM_NOKPROBE(\name)
29 .endm 38 .endm
30 39