Steven Rostedt | 81d68a9 | 2008-05-12 21:20:42 +0200 | [diff] [blame] | 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 | */ |
| 7 | |
| 8 | #include <linux/linkage.h> |
| 9 | |
Steven Rostedt | 81d68a9 | 2008-05-12 21:20:42 +0200 | [diff] [blame] | 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 |
| 25 | .endm |
| 26 | |
| 27 | thunk_ra trace_hardirqs_on_thunk,trace_hardirqs_on_caller |
| 28 | thunk_ra trace_hardirqs_off_thunk,trace_hardirqs_off_caller |
| 29 | #endif |