Commit | Line | Data |
---|---|---|
81d68a96 SR |
1 | /* |
2 | * Trampoline to trace irqs off. (otherwise CALLER_ADDR1 might crash) | |
3 | * Copyright 2008 by Steven Rostedt, Red Hat, Inc | |
4 | * (inspired by Andi Kleen's thunk_64.S) | |
5 | * Subject to the GNU public license, v.2. No warranty of any kind. | |
6 | */ | |
81d68a96 | 7 | #include <linux/linkage.h> |
98def1de | 8 | #include <asm/asm.h> |
81d68a96 | 9 | |
81d68a96 SR |
10 | #ifdef CONFIG_TRACE_IRQFLAGS |
11 | /* put return address in eax (arg1) */ | |
12 | .macro thunk_ra name,func | |
13 | .globl \name | |
14 | \name: | |
15 | pushl %eax | |
16 | pushl %ecx | |
17 | pushl %edx | |
18 | /* Place EIP in the arg1 */ | |
19 | movl 3*4(%esp), %eax | |
20 | call \func | |
21 | popl %edx | |
22 | popl %ecx | |
23 | popl %eax | |
24 | ret | |
98def1de | 25 | _ASM_NOKPROBE(\name) |
81d68a96 SR |
26 | .endm |
27 | ||
28 | thunk_ra trace_hardirqs_on_thunk,trace_hardirqs_on_caller | |
29 | thunk_ra trace_hardirqs_off_thunk,trace_hardirqs_off_caller | |
30 | #endif |