• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
82