| Andi Kleen | cc1e684 | 2006-09-26 10:52:29 +0200 | [diff] [blame] | 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 |  */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  | 
| Sam Ravnborg | c6c2d7a | 2008-01-30 13:33:37 +0100 | [diff] [blame] | 36 | 	.section .sched.text, "ax" | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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	 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 43 | 	 | 
| Ingo Molnar | 6375e2b | 2006-07-03 00:24:45 -0700 | [diff] [blame] | 44 | #ifdef CONFIG_TRACE_IRQFLAGS | 
 | 45 | 	thunk trace_hardirqs_on_thunk,trace_hardirqs_on | 
 | 46 | 	thunk trace_hardirqs_off_thunk,trace_hardirqs_off | 
 | 47 | #endif | 
| Peter Zijlstra | 10cd706 | 2007-10-11 22:11:12 +0200 | [diff] [blame] | 48 |  | 
 | 49 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | 
 | 50 | 	thunk lockdep_sys_exit_thunk,lockdep_sys_exit | 
 | 51 | #endif | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 52 | 	 | 
 | 53 | 	/* SAVE_ARGS below is used only for the .cfi directives it contains. */ | 
 | 54 | 	CFI_STARTPROC | 
 | 55 | 	SAVE_ARGS | 
 | 56 | restore: | 
 | 57 | 	RESTORE_ARGS | 
 | 58 | 	ret	 | 
 | 59 | 	CFI_ENDPROC | 
 | 60 | 	 | 
 | 61 | 	CFI_STARTPROC | 
 | 62 | 	SAVE_ARGS | 
 | 63 | restore_norax:	 | 
 | 64 | 	RESTORE_ARGS 1 | 
 | 65 | 	ret | 
 | 66 | 	CFI_ENDPROC |