]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - include/asm-x86/calling.h
x86: reduce forbid_dac's visibility
[mirror_ubuntu-artful-kernel.git] / include / asm-x86 / calling.h
CommitLineData
0c2bd5a5 1/*
1da177e4 2 * Some macros to handle stack frames in assembly.
0c2bd5a5 3 */
1da177e4 4
0c2bd5a5
IM
5#define R15 0
6#define R14 8
7#define R13 16
8#define R12 24
9#define RBP 32
10#define RBX 40
1da177e4 11
1da177e4 12/* arguments: interrupts/non tracing syscalls only save upto here*/
0c2bd5a5
IM
13#define R11 48
14#define R10 56
15#define R9 64
16#define R8 72
17#define RAX 80
18#define RCX 88
19#define RDX 96
20#define RSI 104
21#define RDI 112
22#define ORIG_RAX 120 /* + error_code */
23/* end of arguments */
24
1da177e4 25/* cpu exception frame or undefined in case of fast syscall. */
0c2bd5a5
IM
26#define RIP 128
27#define CS 136
28#define EFLAGS 144
29#define RSP 152
30#define SS 160
31
32#define ARGOFFSET R11
33#define SWFRAME ORIG_RAX
1da177e4 34
0c2bd5a5
IM
35 .macro SAVE_ARGS addskip=0, norcx=0, nor891011=0
36 subq $9*8+\addskip, %rsp
1da177e4 37 CFI_ADJUST_CFA_OFFSET 9*8+\addskip
0c2bd5a5
IM
38 movq %rdi, 8*8(%rsp)
39 CFI_REL_OFFSET rdi, 8*8
40 movq %rsi, 7*8(%rsp)
41 CFI_REL_OFFSET rsi, 7*8
42 movq %rdx, 6*8(%rsp)
43 CFI_REL_OFFSET rdx, 6*8
1da177e4
LT
44 .if \norcx
45 .else
0c2bd5a5
IM
46 movq %rcx, 5*8(%rsp)
47 CFI_REL_OFFSET rcx, 5*8
1da177e4 48 .endif
0c2bd5a5
IM
49 movq %rax, 4*8(%rsp)
50 CFI_REL_OFFSET rax, 4*8
1da177e4
LT
51 .if \nor891011
52 .else
0c2bd5a5
IM
53 movq %r8, 3*8(%rsp)
54 CFI_REL_OFFSET r8, 3*8
55 movq %r9, 2*8(%rsp)
56 CFI_REL_OFFSET r9, 2*8
57 movq %r10, 1*8(%rsp)
58 CFI_REL_OFFSET r10, 1*8
59 movq %r11, (%rsp)
60 CFI_REL_OFFSET r11, 0*8
1da177e4
LT
61 .endif
62 .endm
63
0c2bd5a5
IM
64#define ARG_SKIP 9*8
65
66 .macro RESTORE_ARGS skiprax=0, addskip=0, skiprcx=0, skipr11=0, \
67 skipr8910=0, skiprdx=0
1da177e4
LT
68 .if \skipr11
69 .else
0c2bd5a5 70 movq (%rsp), %r11
7effaa88 71 CFI_RESTORE r11
1da177e4
LT
72 .endif
73 .if \skipr8910
74 .else
0c2bd5a5 75 movq 1*8(%rsp), %r10
7effaa88 76 CFI_RESTORE r10
0c2bd5a5 77 movq 2*8(%rsp), %r9
7effaa88 78 CFI_RESTORE r9
0c2bd5a5 79 movq 3*8(%rsp), %r8
7effaa88 80 CFI_RESTORE r8
1da177e4
LT
81 .endif
82 .if \skiprax
83 .else
0c2bd5a5 84 movq 4*8(%rsp), %rax
7effaa88 85 CFI_RESTORE rax
1da177e4
LT
86 .endif
87 .if \skiprcx
88 .else
0c2bd5a5 89 movq 5*8(%rsp), %rcx
7effaa88 90 CFI_RESTORE rcx
1da177e4
LT
91 .endif
92 .if \skiprdx
93 .else
0c2bd5a5 94 movq 6*8(%rsp), %rdx
7effaa88 95 CFI_RESTORE rdx
1da177e4 96 .endif
0c2bd5a5 97 movq 7*8(%rsp), %rsi
7effaa88 98 CFI_RESTORE rsi
0c2bd5a5 99 movq 8*8(%rsp), %rdi
7effaa88 100 CFI_RESTORE rdi
1da177e4 101 .if ARG_SKIP+\addskip > 0
0c2bd5a5 102 addq $ARG_SKIP+\addskip, %rsp
1da177e4
LT
103 CFI_ADJUST_CFA_OFFSET -(ARG_SKIP+\addskip)
104 .endif
0c2bd5a5 105 .endm
1da177e4
LT
106
107 .macro LOAD_ARGS offset
0c2bd5a5
IM
108 movq \offset(%rsp), %r11
109 movq \offset+8(%rsp), %r10
110 movq \offset+16(%rsp), %r9
111 movq \offset+24(%rsp), %r8
112 movq \offset+40(%rsp), %rcx
113 movq \offset+48(%rsp), %rdx
114 movq \offset+56(%rsp), %rsi
115 movq \offset+64(%rsp), %rdi
116 movq \offset+72(%rsp), %rax
1da177e4 117 .endm
0c2bd5a5
IM
118
119#define REST_SKIP 6*8
120
1da177e4 121 .macro SAVE_REST
0c2bd5a5 122 subq $REST_SKIP, %rsp
1da177e4 123 CFI_ADJUST_CFA_OFFSET REST_SKIP
0c2bd5a5
IM
124 movq %rbx, 5*8(%rsp)
125 CFI_REL_OFFSET rbx, 5*8
126 movq %rbp, 4*8(%rsp)
127 CFI_REL_OFFSET rbp, 4*8
128 movq %r12, 3*8(%rsp)
129 CFI_REL_OFFSET r12, 3*8
130 movq %r13, 2*8(%rsp)
131 CFI_REL_OFFSET r13, 2*8
132 movq %r14, 1*8(%rsp)
133 CFI_REL_OFFSET r14, 1*8
134 movq %r15, (%rsp)
135 CFI_REL_OFFSET r15, 0*8
136 .endm
1da177e4
LT
137
138 .macro RESTORE_REST
0c2bd5a5 139 movq (%rsp), %r15
7effaa88 140 CFI_RESTORE r15
0c2bd5a5 141 movq 1*8(%rsp), %r14
7effaa88 142 CFI_RESTORE r14
0c2bd5a5 143 movq 2*8(%rsp), %r13
7effaa88 144 CFI_RESTORE r13
0c2bd5a5 145 movq 3*8(%rsp), %r12
7effaa88 146 CFI_RESTORE r12
0c2bd5a5 147 movq 4*8(%rsp), %rbp
7effaa88 148 CFI_RESTORE rbp
0c2bd5a5 149 movq 5*8(%rsp), %rbx
7effaa88 150 CFI_RESTORE rbx
0c2bd5a5 151 addq $REST_SKIP, %rsp
1da177e4
LT
152 CFI_ADJUST_CFA_OFFSET -(REST_SKIP)
153 .endm
0c2bd5a5 154
1da177e4
LT
155 .macro SAVE_ALL
156 SAVE_ARGS
157 SAVE_REST
158 .endm
0c2bd5a5 159
1da177e4
LT
160 .macro RESTORE_ALL addskip=0
161 RESTORE_REST
0c2bd5a5 162 RESTORE_ARGS 0, \addskip
1da177e4
LT
163 .endm
164
165 .macro icebp
166 .byte 0xf1
167 .endm
0c2bd5a5 168