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