]>
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> |
f74954f0 | 9 | #include <asm/dwarf2.h> |
81d68a96 | 10 | |
81d68a96 | 11 | /* put return address in eax (arg1) */ |
0ad6e3c5 | 12 | .macro THUNK name, func, put_ret_addr_in_eax=0 |
81d68a96 SR |
13 | .globl \name |
14 | \name: | |
f74954f0 | 15 | CFI_STARTPROC |
49db46a6 DV |
16 | pushl_cfi_reg eax |
17 | pushl_cfi_reg ecx | |
18 | pushl_cfi_reg edx | |
0ad6e3c5 ON |
19 | |
20 | .if \put_ret_addr_in_eax | |
81d68a96 SR |
21 | /* Place EIP in the arg1 */ |
22 | movl 3*4(%esp), %eax | |
0ad6e3c5 ON |
23 | .endif |
24 | ||
81d68a96 | 25 | call \func |
49db46a6 DV |
26 | popl_cfi_reg edx |
27 | popl_cfi_reg ecx | |
28 | popl_cfi_reg eax | |
81d68a96 | 29 | ret |
f74954f0 | 30 | CFI_ENDPROC |
98def1de | 31 | _ASM_NOKPROBE(\name) |
81d68a96 SR |
32 | .endm |
33 | ||
0ad6e3c5 ON |
34 | #ifdef CONFIG_TRACE_IRQFLAGS |
35 | THUNK trace_hardirqs_on_thunk,trace_hardirqs_on_caller,1 | |
36 | THUNK trace_hardirqs_off_thunk,trace_hardirqs_off_caller,1 | |
37 | #endif | |
38 | ||
39 | #ifdef CONFIG_PREEMPT | |
40 | THUNK ___preempt_schedule, preempt_schedule | |
41 | #ifdef CONFIG_CONTEXT_TRACKING | |
42 | THUNK ___preempt_schedule_context, preempt_schedule_context | |
81d68a96 | 43 | #endif |
0ad6e3c5 ON |
44 | #endif |
45 |