]>
Commit | Line | Data |
---|---|---|
cc1e684a AK |
1 | /* |
2 | * Save registers before calling assembly functions. This avoids | |
3 | * disturbance of register allocation in some inline assembly constructs. | |
4 | * Copyright 2001,2002 by Andi Kleen, SuSE Labs. | |
81d68a96 | 5 | * Added trace_hardirqs callers - Copyright 2007 Steven Rostedt, Red Hat, Inc. |
cc1e684a AK |
6 | * Subject to the GNU public license, v.2. No warranty of any kind. |
7 | */ | |
1da177e4 | 8 | |
1da177e4 LT |
9 | #include <linux/linkage.h> |
10 | #include <asm/dwarf2.h> | |
11 | #include <asm/calling.h> | |
12 | #include <asm/rwlock.h> | |
13 | ||
14 | /* rdi: arg1 ... normal C conventions. rax is saved/restored. */ | |
15 | .macro thunk name,func | |
16 | .globl \name | |
17 | \name: | |
18 | CFI_STARTPROC | |
19 | SAVE_ARGS | |
20 | call \func | |
21 | jmp restore | |
22 | CFI_ENDPROC | |
23 | .endm | |
24 | ||
25 | /* rdi: arg1 ... normal C conventions. rax is passed from C. */ | |
26 | .macro thunk_retrax name,func | |
27 | .globl \name | |
28 | \name: | |
29 | CFI_STARTPROC | |
30 | SAVE_ARGS | |
31 | call \func | |
32 | jmp restore_norax | |
33 | CFI_ENDPROC | |
34 | .endm | |
35 | ||
36 | ||
c6c2d7a0 | 37 | .section .sched.text, "ax" |
1da177e4 LT |
38 | #ifdef CONFIG_RWSEM_XCHGADD_ALGORITHM |
39 | thunk rwsem_down_read_failed_thunk,rwsem_down_read_failed | |
40 | thunk rwsem_down_write_failed_thunk,rwsem_down_write_failed | |
41 | thunk rwsem_wake_thunk,rwsem_wake | |
42 | thunk rwsem_downgrade_thunk,rwsem_downgrade_wake | |
43 | #endif | |
1da177e4 | 44 | |
6375e2b7 | 45 | #ifdef CONFIG_TRACE_IRQFLAGS |
81d68a96 SR |
46 | /* put return address in rdi (arg1) */ |
47 | .macro thunk_ra name,func | |
48 | .globl \name | |
49 | \name: | |
50 | CFI_STARTPROC | |
51 | SAVE_ARGS | |
52 | /* SAVE_ARGS pushs 9 elements */ | |
53 | /* the next element would be the rip */ | |
54 | movq 9*8(%rsp), %rdi | |
55 | call \func | |
56 | jmp restore | |
57 | CFI_ENDPROC | |
58 | .endm | |
59 | ||
60 | thunk_ra trace_hardirqs_on_thunk,trace_hardirqs_on_caller | |
61 | thunk_ra trace_hardirqs_off_thunk,trace_hardirqs_off_caller | |
6375e2b7 | 62 | #endif |
10cd706d PZ |
63 | |
64 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | |
65 | thunk lockdep_sys_exit_thunk,lockdep_sys_exit | |
66 | #endif | |
1da177e4 LT |
67 | |
68 | /* SAVE_ARGS below is used only for the .cfi directives it contains. */ | |
69 | CFI_STARTPROC | |
70 | SAVE_ARGS | |
71 | restore: | |
72 | RESTORE_ARGS | |
73 | ret | |
74 | CFI_ENDPROC | |
75 | ||
76 | CFI_STARTPROC | |
77 | SAVE_ARGS | |
78 | restore_norax: | |
79 | RESTORE_ARGS 1 | |
80 | ret | |
81 | CFI_ENDPROC |