/* * Save registers before calling assembly functions. This avoids * disturbance of register allocation in some inline assembly constructs. * Copyright 2001,2002 by Andi Kleen, SuSE Labs. * Added trace_hardirqs callers - Copyright 2007 Steven Rostedt, Red Hat, Inc. * Subject to the GNU public license, v.2. No warranty of any kind. */ #include <linux/linkage.h> #include <asm/dwarf2.h> #include <asm/calling.h> #include <asm/rwlock.h> /* rdi: arg1 ... normal C conventions. rax is saved/restored. */ .macro thunk name,func .globl \name \name: CFI_STARTPROC SAVE_ARGS call \func jmp restore CFI_ENDPROC .endm /* rdi: arg1 ... normal C conventions. rax is passed from C. */ .macro thunk_retrax name,func .globl \name \name: CFI_STARTPROC SAVE_ARGS call \func jmp restore_norax CFI_ENDPROC .endm .section .sched.text, "ax" #ifdef CONFIG_RWSEM_XCHGADD_ALGORITHM thunk rwsem_down_read_failed_thunk,rwsem_down_read_failed thunk rwsem_down_write_failed_thunk,rwsem_down_write_failed thunk rwsem_wake_thunk,rwsem_wake thunk rwsem_downgrade_thunk,rwsem_downgrade_wake #endif #ifdef CONFIG_TRACE_IRQFLAGS /* put return address in rdi (arg1) */ .macro thunk_ra name,func .globl \name \name: CFI_STARTPROC SAVE_ARGS /* SAVE_ARGS pushs 9 elements */ /* the next element would be the rip */ movq 9*8(%rsp), %rdi call \func jmp restore CFI_ENDPROC .endm thunk_ra trace_hardirqs_on_thunk,trace_hardirqs_on_caller thunk_ra trace_hardirqs_off_thunk,trace_hardirqs_off_caller #endif #ifdef CONFIG_DEBUG_LOCK_ALLOC thunk lockdep_sys_exit_thunk,lockdep_sys_exit #endif /* SAVE_ARGS below is used only for the .cfi directives it contains. */ CFI_STARTPROC SAVE_ARGS restore: RESTORE_ARGS ret CFI_ENDPROC CFI_STARTPROC SAVE_ARGS restore_norax: RESTORE_ARGS 1 ret CFI_ENDPROC