/arch/x86/lib/thunk_64.S
Assembly | 81 lines | 71 code | 10 blank | 0 comment | 1 complexity | 2bb8c84073d70d0834ec1e962573aca9 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
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 * Added trace_hardirqs callers - Copyright 2007 Steven Rostedt, Red Hat, Inc. 6 * Subject to the GNU public license, v.2. No warranty of any kind. 7 */ 8 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 37 .section .sched.text, "ax" 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 44 45#ifdef CONFIG_TRACE_IRQFLAGS 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 62#endif 63 64#ifdef CONFIG_DEBUG_LOCK_ALLOC 65 thunk lockdep_sys_exit_thunk,lockdep_sys_exit 66#endif 67 68 /* SAVE_ARGS below is used only for the .cfi directives it contains. */ 69 CFI_STARTPROC 70 SAVE_ARGS 71restore: 72 RESTORE_ARGS 73 ret 74 CFI_ENDPROC 75 76 CFI_STARTPROC 77 SAVE_ARGS 78restore_norax: 79 RESTORE_ARGS 1 80 ret 81 CFI_ENDPROC