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 57restore: 58 RESTORE_ARGS 59 ret 60 CFI_ENDPROC 61 62 CFI_STARTPROC 63 SAVE_ARGS 64restore_norax: 65 RESTORE_ARGS 1 66 ret 67 CFI_ENDPROC 68