diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2007-10-11 05:17:08 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2007-10-11 05:17:08 -0400 |
commit | 185f3d38900f750a4566f87cde6a178f3595a115 (patch) | |
tree | d463f6da1af452b1bbdf476828ea88427087f255 /arch/x86/lib/thunk_64.S | |
parent | 51b2833060f26258ea2da091c7b9c6a358ac9dd2 (diff) |
x86_64: move lib
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/lib/thunk_64.S')
-rw-r--r-- | arch/x86/lib/thunk_64.S | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S new file mode 100644 index 000000000000..55e586d352d3 --- /dev/null +++ b/arch/x86/lib/thunk_64.S | |||
@@ -0,0 +1,67 @@ | |||
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. | ||
5 | * Subject to the GNU public license, v.2. No warranty of any kind. | ||
6 | */ | ||
7 | |||
8 | #include <linux/linkage.h> | ||
9 | #include <asm/dwarf2.h> | ||
10 | #include <asm/calling.h> | ||
11 | #include <asm/rwlock.h> | ||
12 | |||
13 | /* rdi: arg1 ... normal C conventions. rax is saved/restored. */ | ||
14 | .macro thunk name,func | ||
15 | .globl \name | ||
16 | \name: | ||
17 | CFI_STARTPROC | ||
18 | SAVE_ARGS | ||
19 | call \func | ||
20 | jmp restore | ||
21 | CFI_ENDPROC | ||
22 | .endm | ||
23 | |||
24 | /* rdi: arg1 ... normal C conventions. rax is passed from C. */ | ||
25 | .macro thunk_retrax name,func | ||
26 | .globl \name | ||
27 | \name: | ||
28 | CFI_STARTPROC | ||
29 | SAVE_ARGS | ||
30 | call \func | ||
31 | jmp restore_norax | ||
32 | CFI_ENDPROC | ||
33 | .endm | ||
34 | |||
35 | |||
36 | .section .sched.text | ||
37 | #ifdef CONFIG_RWSEM_XCHGADD_ALGORITHM | ||
38 | thunk rwsem_down_read_failed_thunk,rwsem_down_read_failed | ||
39 | thunk rwsem_down_write_failed_thunk,rwsem_down_write_failed | ||
40 | thunk rwsem_wake_thunk,rwsem_wake | ||
41 | thunk rwsem_downgrade_thunk,rwsem_downgrade_wake | ||
42 | #endif | ||
43 | |||
44 | thunk __down_failed,__down | ||
45 | thunk_retrax __down_failed_interruptible,__down_interruptible | ||
46 | thunk_retrax __down_failed_trylock,__down_trylock | ||
47 | thunk __up_wakeup,__up | ||
48 | |||
49 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
50 | thunk trace_hardirqs_on_thunk,trace_hardirqs_on | ||
51 | thunk trace_hardirqs_off_thunk,trace_hardirqs_off | ||
52 | #endif | ||
53 | |||
54 | /* SAVE_ARGS below is used only for the .cfi directives it contains. */ | ||
55 | CFI_STARTPROC | ||
56 | SAVE_ARGS | ||
57 | restore: | ||
58 | RESTORE_ARGS | ||
59 | ret | ||
60 | CFI_ENDPROC | ||
61 | |||
62 | CFI_STARTPROC | ||
63 | SAVE_ARGS | ||
64 | restore_norax: | ||
65 | RESTORE_ARGS 1 | ||
66 | ret | ||
67 | CFI_ENDPROC | ||