diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2015-02-26 17:40:25 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-03-04 16:50:49 -0500 |
commit | 49db46a67bec9ca9e29ece4729a876195877af50 (patch) | |
tree | 9c20f9fa210d1befe2ea2346b8cd9452bcef0517 | |
parent | 69e8544cd0056e02965ffb5e8414fb7501a2ee2e (diff) |
x86/asm: Introduce push/pop macros which generate CFI_REL_OFFSET and CFI_RESTORE
Sequences:
pushl_cfi %reg
CFI_REL_OFFSET reg, 0
and:
popl_cfi %reg
CFI_RESTORE reg
happen quite often. This patch adds macros which generate them.
No assembly changes (verified with objdump -dr vmlinux.o).
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1421017655-25561-1-git-send-email-dvlasenk@redhat.com
Link: http://lkml.kernel.org/r/2202eb90f175cf45d1b2d1c64dbb5676a8ad07ad.1424989793.git.luto@amacapital.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | arch/x86/include/asm/calling.h | 42 | ||||
-rw-r--r-- | arch/x86/include/asm/dwarf2.h | 24 | ||||
-rw-r--r-- | arch/x86/kernel/entry_32.S | 21 | ||||
-rw-r--r-- | arch/x86/lib/atomic64_cx8_32.S | 50 | ||||
-rw-r--r-- | arch/x86/lib/checksum_32.S | 60 | ||||
-rw-r--r-- | arch/x86/lib/msr-reg.S | 24 | ||||
-rw-r--r-- | arch/x86/lib/rwsem.S | 44 | ||||
-rw-r--r-- | arch/x86/lib/thunk_32.S | 18 | ||||
-rw-r--r-- | arch/x86/lib/thunk_64.S | 54 |
9 files changed, 141 insertions, 196 deletions
diff --git a/arch/x86/include/asm/calling.h b/arch/x86/include/asm/calling.h index 1f1297b46f83..3c711f2ab236 100644 --- a/arch/x86/include/asm/calling.h +++ b/arch/x86/include/asm/calling.h | |||
@@ -210,37 +210,23 @@ For 32-bit we have the following conventions - kernel is built with | |||
210 | */ | 210 | */ |
211 | 211 | ||
212 | .macro SAVE_ALL | 212 | .macro SAVE_ALL |
213 | pushl_cfi %eax | 213 | pushl_cfi_reg eax |
214 | CFI_REL_OFFSET eax, 0 | 214 | pushl_cfi_reg ebp |
215 | pushl_cfi %ebp | 215 | pushl_cfi_reg edi |
216 | CFI_REL_OFFSET ebp, 0 | 216 | pushl_cfi_reg esi |
217 | pushl_cfi %edi | 217 | pushl_cfi_reg edx |
218 | CFI_REL_OFFSET edi, 0 | 218 | pushl_cfi_reg ecx |
219 | pushl_cfi %esi | 219 | pushl_cfi_reg ebx |
220 | CFI_REL_OFFSET esi, 0 | ||
221 | pushl_cfi %edx | ||
222 | CFI_REL_OFFSET edx, 0 | ||
223 | pushl_cfi %ecx | ||
224 | CFI_REL_OFFSET ecx, 0 | ||
225 | pushl_cfi %ebx | ||
226 | CFI_REL_OFFSET ebx, 0 | ||
227 | .endm | 220 | .endm |
228 | 221 | ||
229 | .macro RESTORE_ALL | 222 | .macro RESTORE_ALL |
230 | popl_cfi %ebx | 223 | popl_cfi_reg ebx |
231 | CFI_RESTORE ebx | 224 | popl_cfi_reg ecx |
232 | popl_cfi %ecx | 225 | popl_cfi_reg edx |
233 | CFI_RESTORE ecx | 226 | popl_cfi_reg esi |
234 | popl_cfi %edx | 227 | popl_cfi_reg edi |
235 | CFI_RESTORE edx | 228 | popl_cfi_reg ebp |
236 | popl_cfi %esi | 229 | popl_cfi_reg eax |
237 | CFI_RESTORE esi | ||
238 | popl_cfi %edi | ||
239 | CFI_RESTORE edi | ||
240 | popl_cfi %ebp | ||
241 | CFI_RESTORE ebp | ||
242 | popl_cfi %eax | ||
243 | CFI_RESTORE eax | ||
244 | .endm | 230 | .endm |
245 | 231 | ||
246 | #endif /* CONFIG_X86_64 */ | 232 | #endif /* CONFIG_X86_64 */ |
diff --git a/arch/x86/include/asm/dwarf2.h b/arch/x86/include/asm/dwarf2.h index f6f15986df6c..de1cdaf4d743 100644 --- a/arch/x86/include/asm/dwarf2.h +++ b/arch/x86/include/asm/dwarf2.h | |||
@@ -86,11 +86,23 @@ | |||
86 | CFI_ADJUST_CFA_OFFSET 8 | 86 | CFI_ADJUST_CFA_OFFSET 8 |
87 | .endm | 87 | .endm |
88 | 88 | ||
89 | .macro pushq_cfi_reg reg | ||
90 | pushq %\reg | ||
91 | CFI_ADJUST_CFA_OFFSET 8 | ||
92 | CFI_REL_OFFSET \reg, 0 | ||
93 | .endm | ||
94 | |||
89 | .macro popq_cfi reg | 95 | .macro popq_cfi reg |
90 | popq \reg | 96 | popq \reg |
91 | CFI_ADJUST_CFA_OFFSET -8 | 97 | CFI_ADJUST_CFA_OFFSET -8 |
92 | .endm | 98 | .endm |
93 | 99 | ||
100 | .macro popq_cfi_reg reg | ||
101 | popq %\reg | ||
102 | CFI_ADJUST_CFA_OFFSET -8 | ||
103 | CFI_RESTORE \reg | ||
104 | .endm | ||
105 | |||
94 | .macro pushfq_cfi | 106 | .macro pushfq_cfi |
95 | pushfq | 107 | pushfq |
96 | CFI_ADJUST_CFA_OFFSET 8 | 108 | CFI_ADJUST_CFA_OFFSET 8 |
@@ -116,11 +128,23 @@ | |||
116 | CFI_ADJUST_CFA_OFFSET 4 | 128 | CFI_ADJUST_CFA_OFFSET 4 |
117 | .endm | 129 | .endm |
118 | 130 | ||
131 | .macro pushl_cfi_reg reg | ||
132 | pushl %\reg | ||
133 | CFI_ADJUST_CFA_OFFSET 4 | ||
134 | CFI_REL_OFFSET \reg, 0 | ||
135 | .endm | ||
136 | |||
119 | .macro popl_cfi reg | 137 | .macro popl_cfi reg |
120 | popl \reg | 138 | popl \reg |
121 | CFI_ADJUST_CFA_OFFSET -4 | 139 | CFI_ADJUST_CFA_OFFSET -4 |
122 | .endm | 140 | .endm |
123 | 141 | ||
142 | .macro popl_cfi_reg reg | ||
143 | popl %\reg | ||
144 | CFI_ADJUST_CFA_OFFSET -4 | ||
145 | CFI_RESTORE \reg | ||
146 | .endm | ||
147 | |||
124 | .macro pushfl_cfi | 148 | .macro pushfl_cfi |
125 | pushfl | 149 | pushfl |
126 | CFI_ADJUST_CFA_OFFSET 4 | 150 | CFI_ADJUST_CFA_OFFSET 4 |
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 7e0323cc0b7d..e33ba51b1069 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
@@ -1234,20 +1234,13 @@ error_code: | |||
1234 | /*CFI_REL_OFFSET es, 0*/ | 1234 | /*CFI_REL_OFFSET es, 0*/ |
1235 | pushl_cfi %ds | 1235 | pushl_cfi %ds |
1236 | /*CFI_REL_OFFSET ds, 0*/ | 1236 | /*CFI_REL_OFFSET ds, 0*/ |
1237 | pushl_cfi %eax | 1237 | pushl_cfi_reg eax |
1238 | CFI_REL_OFFSET eax, 0 | 1238 | pushl_cfi_reg ebp |
1239 | pushl_cfi %ebp | 1239 | pushl_cfi_reg edi |
1240 | CFI_REL_OFFSET ebp, 0 | 1240 | pushl_cfi_reg esi |
1241 | pushl_cfi %edi | 1241 | pushl_cfi_reg edx |
1242 | CFI_REL_OFFSET edi, 0 | 1242 | pushl_cfi_reg ecx |
1243 | pushl_cfi %esi | 1243 | pushl_cfi_reg ebx |
1244 | CFI_REL_OFFSET esi, 0 | ||
1245 | pushl_cfi %edx | ||
1246 | CFI_REL_OFFSET edx, 0 | ||
1247 | pushl_cfi %ecx | ||
1248 | CFI_REL_OFFSET ecx, 0 | ||
1249 | pushl_cfi %ebx | ||
1250 | CFI_REL_OFFSET ebx, 0 | ||
1251 | cld | 1244 | cld |
1252 | movl $(__KERNEL_PERCPU), %ecx | 1245 | movl $(__KERNEL_PERCPU), %ecx |
1253 | movl %ecx, %fs | 1246 | movl %ecx, %fs |
diff --git a/arch/x86/lib/atomic64_cx8_32.S b/arch/x86/lib/atomic64_cx8_32.S index f5cc9eb1d51b..082a85167a5b 100644 --- a/arch/x86/lib/atomic64_cx8_32.S +++ b/arch/x86/lib/atomic64_cx8_32.S | |||
@@ -13,16 +13,6 @@ | |||
13 | #include <asm/alternative-asm.h> | 13 | #include <asm/alternative-asm.h> |
14 | #include <asm/dwarf2.h> | 14 | #include <asm/dwarf2.h> |
15 | 15 | ||
16 | .macro SAVE reg | ||
17 | pushl_cfi %\reg | ||
18 | CFI_REL_OFFSET \reg, 0 | ||
19 | .endm | ||
20 | |||
21 | .macro RESTORE reg | ||
22 | popl_cfi %\reg | ||
23 | CFI_RESTORE \reg | ||
24 | .endm | ||
25 | |||
26 | .macro read64 reg | 16 | .macro read64 reg |
27 | movl %ebx, %eax | 17 | movl %ebx, %eax |
28 | movl %ecx, %edx | 18 | movl %ecx, %edx |
@@ -67,10 +57,10 @@ ENDPROC(atomic64_xchg_cx8) | |||
67 | .macro addsub_return func ins insc | 57 | .macro addsub_return func ins insc |
68 | ENTRY(atomic64_\func\()_return_cx8) | 58 | ENTRY(atomic64_\func\()_return_cx8) |
69 | CFI_STARTPROC | 59 | CFI_STARTPROC |
70 | SAVE ebp | 60 | pushl_cfi_reg ebp |
71 | SAVE ebx | 61 | pushl_cfi_reg ebx |
72 | SAVE esi | 62 | pushl_cfi_reg esi |
73 | SAVE edi | 63 | pushl_cfi_reg edi |
74 | 64 | ||
75 | movl %eax, %esi | 65 | movl %eax, %esi |
76 | movl %edx, %edi | 66 | movl %edx, %edi |
@@ -89,10 +79,10 @@ ENTRY(atomic64_\func\()_return_cx8) | |||
89 | 10: | 79 | 10: |
90 | movl %ebx, %eax | 80 | movl %ebx, %eax |
91 | movl %ecx, %edx | 81 | movl %ecx, %edx |
92 | RESTORE edi | 82 | popl_cfi_reg edi |
93 | RESTORE esi | 83 | popl_cfi_reg esi |
94 | RESTORE ebx | 84 | popl_cfi_reg ebx |
95 | RESTORE ebp | 85 | popl_cfi_reg ebp |
96 | ret | 86 | ret |
97 | CFI_ENDPROC | 87 | CFI_ENDPROC |
98 | ENDPROC(atomic64_\func\()_return_cx8) | 88 | ENDPROC(atomic64_\func\()_return_cx8) |
@@ -104,7 +94,7 @@ addsub_return sub sub sbb | |||
104 | .macro incdec_return func ins insc | 94 | .macro incdec_return func ins insc |
105 | ENTRY(atomic64_\func\()_return_cx8) | 95 | ENTRY(atomic64_\func\()_return_cx8) |
106 | CFI_STARTPROC | 96 | CFI_STARTPROC |
107 | SAVE ebx | 97 | pushl_cfi_reg ebx |
108 | 98 | ||
109 | read64 %esi | 99 | read64 %esi |
110 | 1: | 100 | 1: |
@@ -119,7 +109,7 @@ ENTRY(atomic64_\func\()_return_cx8) | |||
119 | 10: | 109 | 10: |
120 | movl %ebx, %eax | 110 | movl %ebx, %eax |
121 | movl %ecx, %edx | 111 | movl %ecx, %edx |
122 | RESTORE ebx | 112 | popl_cfi_reg ebx |
123 | ret | 113 | ret |
124 | CFI_ENDPROC | 114 | CFI_ENDPROC |
125 | ENDPROC(atomic64_\func\()_return_cx8) | 115 | ENDPROC(atomic64_\func\()_return_cx8) |
@@ -130,7 +120,7 @@ incdec_return dec sub sbb | |||
130 | 120 | ||
131 | ENTRY(atomic64_dec_if_positive_cx8) | 121 | ENTRY(atomic64_dec_if_positive_cx8) |
132 | CFI_STARTPROC | 122 | CFI_STARTPROC |
133 | SAVE ebx | 123 | pushl_cfi_reg ebx |
134 | 124 | ||
135 | read64 %esi | 125 | read64 %esi |
136 | 1: | 126 | 1: |
@@ -146,18 +136,18 @@ ENTRY(atomic64_dec_if_positive_cx8) | |||
146 | 2: | 136 | 2: |
147 | movl %ebx, %eax | 137 | movl %ebx, %eax |
148 | movl %ecx, %edx | 138 | movl %ecx, %edx |
149 | RESTORE ebx | 139 | popl_cfi_reg ebx |
150 | ret | 140 | ret |
151 | CFI_ENDPROC | 141 | CFI_ENDPROC |
152 | ENDPROC(atomic64_dec_if_positive_cx8) | 142 | ENDPROC(atomic64_dec_if_positive_cx8) |
153 | 143 | ||
154 | ENTRY(atomic64_add_unless_cx8) | 144 | ENTRY(atomic64_add_unless_cx8) |
155 | CFI_STARTPROC | 145 | CFI_STARTPROC |
156 | SAVE ebp | 146 | pushl_cfi_reg ebp |
157 | SAVE ebx | 147 | pushl_cfi_reg ebx |
158 | /* these just push these two parameters on the stack */ | 148 | /* these just push these two parameters on the stack */ |
159 | SAVE edi | 149 | pushl_cfi_reg edi |
160 | SAVE ecx | 150 | pushl_cfi_reg ecx |
161 | 151 | ||
162 | movl %eax, %ebp | 152 | movl %eax, %ebp |
163 | movl %edx, %edi | 153 | movl %edx, %edi |
@@ -179,8 +169,8 @@ ENTRY(atomic64_add_unless_cx8) | |||
179 | 3: | 169 | 3: |
180 | addl $8, %esp | 170 | addl $8, %esp |
181 | CFI_ADJUST_CFA_OFFSET -8 | 171 | CFI_ADJUST_CFA_OFFSET -8 |
182 | RESTORE ebx | 172 | popl_cfi_reg ebx |
183 | RESTORE ebp | 173 | popl_cfi_reg ebp |
184 | ret | 174 | ret |
185 | 4: | 175 | 4: |
186 | cmpl %edx, 4(%esp) | 176 | cmpl %edx, 4(%esp) |
@@ -192,7 +182,7 @@ ENDPROC(atomic64_add_unless_cx8) | |||
192 | 182 | ||
193 | ENTRY(atomic64_inc_not_zero_cx8) | 183 | ENTRY(atomic64_inc_not_zero_cx8) |
194 | CFI_STARTPROC | 184 | CFI_STARTPROC |
195 | SAVE ebx | 185 | pushl_cfi_reg ebx |
196 | 186 | ||
197 | read64 %esi | 187 | read64 %esi |
198 | 1: | 188 | 1: |
@@ -209,7 +199,7 @@ ENTRY(atomic64_inc_not_zero_cx8) | |||
209 | 199 | ||
210 | movl $1, %eax | 200 | movl $1, %eax |
211 | 3: | 201 | 3: |
212 | RESTORE ebx | 202 | popl_cfi_reg ebx |
213 | ret | 203 | ret |
214 | CFI_ENDPROC | 204 | CFI_ENDPROC |
215 | ENDPROC(atomic64_inc_not_zero_cx8) | 205 | ENDPROC(atomic64_inc_not_zero_cx8) |
diff --git a/arch/x86/lib/checksum_32.S b/arch/x86/lib/checksum_32.S index e78b8eee6615..c3b9953d3fa0 100644 --- a/arch/x86/lib/checksum_32.S +++ b/arch/x86/lib/checksum_32.S | |||
@@ -51,10 +51,8 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) | |||
51 | */ | 51 | */ |
52 | ENTRY(csum_partial) | 52 | ENTRY(csum_partial) |
53 | CFI_STARTPROC | 53 | CFI_STARTPROC |
54 | pushl_cfi %esi | 54 | pushl_cfi_reg esi |
55 | CFI_REL_OFFSET esi, 0 | 55 | pushl_cfi_reg ebx |
56 | pushl_cfi %ebx | ||
57 | CFI_REL_OFFSET ebx, 0 | ||
58 | movl 20(%esp),%eax # Function arg: unsigned int sum | 56 | movl 20(%esp),%eax # Function arg: unsigned int sum |
59 | movl 16(%esp),%ecx # Function arg: int len | 57 | movl 16(%esp),%ecx # Function arg: int len |
60 | movl 12(%esp),%esi # Function arg: unsigned char *buff | 58 | movl 12(%esp),%esi # Function arg: unsigned char *buff |
@@ -131,10 +129,8 @@ ENTRY(csum_partial) | |||
131 | jz 8f | 129 | jz 8f |
132 | roll $8, %eax | 130 | roll $8, %eax |
133 | 8: | 131 | 8: |
134 | popl_cfi %ebx | 132 | popl_cfi_reg ebx |
135 | CFI_RESTORE ebx | 133 | popl_cfi_reg esi |
136 | popl_cfi %esi | ||
137 | CFI_RESTORE esi | ||
138 | ret | 134 | ret |
139 | CFI_ENDPROC | 135 | CFI_ENDPROC |
140 | ENDPROC(csum_partial) | 136 | ENDPROC(csum_partial) |
@@ -145,10 +141,8 @@ ENDPROC(csum_partial) | |||
145 | 141 | ||
146 | ENTRY(csum_partial) | 142 | ENTRY(csum_partial) |
147 | CFI_STARTPROC | 143 | CFI_STARTPROC |
148 | pushl_cfi %esi | 144 | pushl_cfi_reg esi |
149 | CFI_REL_OFFSET esi, 0 | 145 | pushl_cfi_reg ebx |
150 | pushl_cfi %ebx | ||
151 | CFI_REL_OFFSET ebx, 0 | ||
152 | movl 20(%esp),%eax # Function arg: unsigned int sum | 146 | movl 20(%esp),%eax # Function arg: unsigned int sum |
153 | movl 16(%esp),%ecx # Function arg: int len | 147 | movl 16(%esp),%ecx # Function arg: int len |
154 | movl 12(%esp),%esi # Function arg: const unsigned char *buf | 148 | movl 12(%esp),%esi # Function arg: const unsigned char *buf |
@@ -255,10 +249,8 @@ ENTRY(csum_partial) | |||
255 | jz 90f | 249 | jz 90f |
256 | roll $8, %eax | 250 | roll $8, %eax |
257 | 90: | 251 | 90: |
258 | popl_cfi %ebx | 252 | popl_cfi_reg ebx |
259 | CFI_RESTORE ebx | 253 | popl_cfi_reg esi |
260 | popl_cfi %esi | ||
261 | CFI_RESTORE esi | ||
262 | ret | 254 | ret |
263 | CFI_ENDPROC | 255 | CFI_ENDPROC |
264 | ENDPROC(csum_partial) | 256 | ENDPROC(csum_partial) |
@@ -298,12 +290,9 @@ ENTRY(csum_partial_copy_generic) | |||
298 | CFI_STARTPROC | 290 | CFI_STARTPROC |
299 | subl $4,%esp | 291 | subl $4,%esp |
300 | CFI_ADJUST_CFA_OFFSET 4 | 292 | CFI_ADJUST_CFA_OFFSET 4 |
301 | pushl_cfi %edi | 293 | pushl_cfi_reg edi |
302 | CFI_REL_OFFSET edi, 0 | 294 | pushl_cfi_reg esi |
303 | pushl_cfi %esi | 295 | pushl_cfi_reg ebx |
304 | CFI_REL_OFFSET esi, 0 | ||
305 | pushl_cfi %ebx | ||
306 | CFI_REL_OFFSET ebx, 0 | ||
307 | movl ARGBASE+16(%esp),%eax # sum | 296 | movl ARGBASE+16(%esp),%eax # sum |
308 | movl ARGBASE+12(%esp),%ecx # len | 297 | movl ARGBASE+12(%esp),%ecx # len |
309 | movl ARGBASE+4(%esp),%esi # src | 298 | movl ARGBASE+4(%esp),%esi # src |
@@ -412,12 +401,9 @@ DST( movb %cl, (%edi) ) | |||
412 | 401 | ||
413 | .previous | 402 | .previous |
414 | 403 | ||
415 | popl_cfi %ebx | 404 | popl_cfi_reg ebx |
416 | CFI_RESTORE ebx | 405 | popl_cfi_reg esi |
417 | popl_cfi %esi | 406 | popl_cfi_reg edi |
418 | CFI_RESTORE esi | ||
419 | popl_cfi %edi | ||
420 | CFI_RESTORE edi | ||
421 | popl_cfi %ecx # equivalent to addl $4,%esp | 407 | popl_cfi %ecx # equivalent to addl $4,%esp |
422 | ret | 408 | ret |
423 | CFI_ENDPROC | 409 | CFI_ENDPROC |
@@ -441,12 +427,9 @@ ENDPROC(csum_partial_copy_generic) | |||
441 | 427 | ||
442 | ENTRY(csum_partial_copy_generic) | 428 | ENTRY(csum_partial_copy_generic) |
443 | CFI_STARTPROC | 429 | CFI_STARTPROC |
444 | pushl_cfi %ebx | 430 | pushl_cfi_reg ebx |
445 | CFI_REL_OFFSET ebx, 0 | 431 | pushl_cfi_reg edi |
446 | pushl_cfi %edi | 432 | pushl_cfi_reg esi |
447 | CFI_REL_OFFSET edi, 0 | ||
448 | pushl_cfi %esi | ||
449 | CFI_REL_OFFSET esi, 0 | ||
450 | movl ARGBASE+4(%esp),%esi #src | 433 | movl ARGBASE+4(%esp),%esi #src |
451 | movl ARGBASE+8(%esp),%edi #dst | 434 | movl ARGBASE+8(%esp),%edi #dst |
452 | movl ARGBASE+12(%esp),%ecx #len | 435 | movl ARGBASE+12(%esp),%ecx #len |
@@ -506,12 +489,9 @@ DST( movb %dl, (%edi) ) | |||
506 | jmp 7b | 489 | jmp 7b |
507 | .previous | 490 | .previous |
508 | 491 | ||
509 | popl_cfi %esi | 492 | popl_cfi_reg esi |
510 | CFI_RESTORE esi | 493 | popl_cfi_reg edi |
511 | popl_cfi %edi | 494 | popl_cfi_reg ebx |
512 | CFI_RESTORE edi | ||
513 | popl_cfi %ebx | ||
514 | CFI_RESTORE ebx | ||
515 | ret | 495 | ret |
516 | CFI_ENDPROC | 496 | CFI_ENDPROC |
517 | ENDPROC(csum_partial_copy_generic) | 497 | ENDPROC(csum_partial_copy_generic) |
diff --git a/arch/x86/lib/msr-reg.S b/arch/x86/lib/msr-reg.S index f6d13eefad10..3ca5218fbece 100644 --- a/arch/x86/lib/msr-reg.S +++ b/arch/x86/lib/msr-reg.S | |||
@@ -14,8 +14,8 @@ | |||
14 | .macro op_safe_regs op | 14 | .macro op_safe_regs op |
15 | ENTRY(\op\()_safe_regs) | 15 | ENTRY(\op\()_safe_regs) |
16 | CFI_STARTPROC | 16 | CFI_STARTPROC |
17 | pushq_cfi %rbx | 17 | pushq_cfi_reg rbx |
18 | pushq_cfi %rbp | 18 | pushq_cfi_reg rbp |
19 | movq %rdi, %r10 /* Save pointer */ | 19 | movq %rdi, %r10 /* Save pointer */ |
20 | xorl %r11d, %r11d /* Return value */ | 20 | xorl %r11d, %r11d /* Return value */ |
21 | movl (%rdi), %eax | 21 | movl (%rdi), %eax |
@@ -35,8 +35,8 @@ ENTRY(\op\()_safe_regs) | |||
35 | movl %ebp, 20(%r10) | 35 | movl %ebp, 20(%r10) |
36 | movl %esi, 24(%r10) | 36 | movl %esi, 24(%r10) |
37 | movl %edi, 28(%r10) | 37 | movl %edi, 28(%r10) |
38 | popq_cfi %rbp | 38 | popq_cfi_reg rbp |
39 | popq_cfi %rbx | 39 | popq_cfi_reg rbx |
40 | ret | 40 | ret |
41 | 3: | 41 | 3: |
42 | CFI_RESTORE_STATE | 42 | CFI_RESTORE_STATE |
@@ -53,10 +53,10 @@ ENDPROC(\op\()_safe_regs) | |||
53 | .macro op_safe_regs op | 53 | .macro op_safe_regs op |
54 | ENTRY(\op\()_safe_regs) | 54 | ENTRY(\op\()_safe_regs) |
55 | CFI_STARTPROC | 55 | CFI_STARTPROC |
56 | pushl_cfi %ebx | 56 | pushl_cfi_reg ebx |
57 | pushl_cfi %ebp | 57 | pushl_cfi_reg ebp |
58 | pushl_cfi %esi | 58 | pushl_cfi_reg esi |
59 | pushl_cfi %edi | 59 | pushl_cfi_reg edi |
60 | pushl_cfi $0 /* Return value */ | 60 | pushl_cfi $0 /* Return value */ |
61 | pushl_cfi %eax | 61 | pushl_cfi %eax |
62 | movl 4(%eax), %ecx | 62 | movl 4(%eax), %ecx |
@@ -80,10 +80,10 @@ ENTRY(\op\()_safe_regs) | |||
80 | movl %esi, 24(%eax) | 80 | movl %esi, 24(%eax) |
81 | movl %edi, 28(%eax) | 81 | movl %edi, 28(%eax) |
82 | popl_cfi %eax | 82 | popl_cfi %eax |
83 | popl_cfi %edi | 83 | popl_cfi_reg edi |
84 | popl_cfi %esi | 84 | popl_cfi_reg esi |
85 | popl_cfi %ebp | 85 | popl_cfi_reg ebp |
86 | popl_cfi %ebx | 86 | popl_cfi_reg ebx |
87 | ret | 87 | ret |
88 | 3: | 88 | 3: |
89 | CFI_RESTORE_STATE | 89 | CFI_RESTORE_STATE |
diff --git a/arch/x86/lib/rwsem.S b/arch/x86/lib/rwsem.S index 5dff5f042468..2322abe4da3b 100644 --- a/arch/x86/lib/rwsem.S +++ b/arch/x86/lib/rwsem.S | |||
@@ -34,10 +34,10 @@ | |||
34 | */ | 34 | */ |
35 | 35 | ||
36 | #define save_common_regs \ | 36 | #define save_common_regs \ |
37 | pushl_cfi %ecx; CFI_REL_OFFSET ecx, 0 | 37 | pushl_cfi_reg ecx |
38 | 38 | ||
39 | #define restore_common_regs \ | 39 | #define restore_common_regs \ |
40 | popl_cfi %ecx; CFI_RESTORE ecx | 40 | popl_cfi_reg ecx |
41 | 41 | ||
42 | /* Avoid uglifying the argument copying x86-64 needs to do. */ | 42 | /* Avoid uglifying the argument copying x86-64 needs to do. */ |
43 | .macro movq src, dst | 43 | .macro movq src, dst |
@@ -64,22 +64,22 @@ | |||
64 | */ | 64 | */ |
65 | 65 | ||
66 | #define save_common_regs \ | 66 | #define save_common_regs \ |
67 | pushq_cfi %rdi; CFI_REL_OFFSET rdi, 0; \ | 67 | pushq_cfi_reg rdi; \ |
68 | pushq_cfi %rsi; CFI_REL_OFFSET rsi, 0; \ | 68 | pushq_cfi_reg rsi; \ |
69 | pushq_cfi %rcx; CFI_REL_OFFSET rcx, 0; \ | 69 | pushq_cfi_reg rcx; \ |
70 | pushq_cfi %r8; CFI_REL_OFFSET r8, 0; \ | 70 | pushq_cfi_reg r8; \ |
71 | pushq_cfi %r9; CFI_REL_OFFSET r9, 0; \ | 71 | pushq_cfi_reg r9; \ |
72 | pushq_cfi %r10; CFI_REL_OFFSET r10, 0; \ | 72 | pushq_cfi_reg r10; \ |
73 | pushq_cfi %r11; CFI_REL_OFFSET r11, 0 | 73 | pushq_cfi_reg r11 |
74 | 74 | ||
75 | #define restore_common_regs \ | 75 | #define restore_common_regs \ |
76 | popq_cfi %r11; CFI_RESTORE r11; \ | 76 | popq_cfi_reg r11; \ |
77 | popq_cfi %r10; CFI_RESTORE r10; \ | 77 | popq_cfi_reg r10; \ |
78 | popq_cfi %r9; CFI_RESTORE r9; \ | 78 | popq_cfi_reg r9; \ |
79 | popq_cfi %r8; CFI_RESTORE r8; \ | 79 | popq_cfi_reg r8; \ |
80 | popq_cfi %rcx; CFI_RESTORE rcx; \ | 80 | popq_cfi_reg rcx; \ |
81 | popq_cfi %rsi; CFI_RESTORE rsi; \ | 81 | popq_cfi_reg rsi; \ |
82 | popq_cfi %rdi; CFI_RESTORE rdi | 82 | popq_cfi_reg rdi |
83 | 83 | ||
84 | #endif | 84 | #endif |
85 | 85 | ||
@@ -87,12 +87,10 @@ | |||
87 | ENTRY(call_rwsem_down_read_failed) | 87 | ENTRY(call_rwsem_down_read_failed) |
88 | CFI_STARTPROC | 88 | CFI_STARTPROC |
89 | save_common_regs | 89 | save_common_regs |
90 | __ASM_SIZE(push,_cfi) %__ASM_REG(dx) | 90 | __ASM_SIZE(push,_cfi_reg) __ASM_REG(dx) |
91 | CFI_REL_OFFSET __ASM_REG(dx), 0 | ||
92 | movq %rax,%rdi | 91 | movq %rax,%rdi |
93 | call rwsem_down_read_failed | 92 | call rwsem_down_read_failed |
94 | __ASM_SIZE(pop,_cfi) %__ASM_REG(dx) | 93 | __ASM_SIZE(pop,_cfi_reg) __ASM_REG(dx) |
95 | CFI_RESTORE __ASM_REG(dx) | ||
96 | restore_common_regs | 94 | restore_common_regs |
97 | ret | 95 | ret |
98 | CFI_ENDPROC | 96 | CFI_ENDPROC |
@@ -124,12 +122,10 @@ ENDPROC(call_rwsem_wake) | |||
124 | ENTRY(call_rwsem_downgrade_wake) | 122 | ENTRY(call_rwsem_downgrade_wake) |
125 | CFI_STARTPROC | 123 | CFI_STARTPROC |
126 | save_common_regs | 124 | save_common_regs |
127 | __ASM_SIZE(push,_cfi) %__ASM_REG(dx) | 125 | __ASM_SIZE(push,_cfi_reg) __ASM_REG(dx) |
128 | CFI_REL_OFFSET __ASM_REG(dx), 0 | ||
129 | movq %rax,%rdi | 126 | movq %rax,%rdi |
130 | call rwsem_downgrade_wake | 127 | call rwsem_downgrade_wake |
131 | __ASM_SIZE(pop,_cfi) %__ASM_REG(dx) | 128 | __ASM_SIZE(pop,_cfi_reg) __ASM_REG(dx) |
132 | CFI_RESTORE __ASM_REG(dx) | ||
133 | restore_common_regs | 129 | restore_common_regs |
134 | ret | 130 | ret |
135 | CFI_ENDPROC | 131 | CFI_ENDPROC |
diff --git a/arch/x86/lib/thunk_32.S b/arch/x86/lib/thunk_32.S index e28cdaf5ac2c..5eb715087b80 100644 --- a/arch/x86/lib/thunk_32.S +++ b/arch/x86/lib/thunk_32.S | |||
@@ -13,12 +13,9 @@ | |||
13 | .globl \name | 13 | .globl \name |
14 | \name: | 14 | \name: |
15 | CFI_STARTPROC | 15 | CFI_STARTPROC |
16 | pushl_cfi %eax | 16 | pushl_cfi_reg eax |
17 | CFI_REL_OFFSET eax, 0 | 17 | pushl_cfi_reg ecx |
18 | pushl_cfi %ecx | 18 | pushl_cfi_reg edx |
19 | CFI_REL_OFFSET ecx, 0 | ||
20 | pushl_cfi %edx | ||
21 | CFI_REL_OFFSET edx, 0 | ||
22 | 19 | ||
23 | .if \put_ret_addr_in_eax | 20 | .if \put_ret_addr_in_eax |
24 | /* Place EIP in the arg1 */ | 21 | /* Place EIP in the arg1 */ |
@@ -26,12 +23,9 @@ | |||
26 | .endif | 23 | .endif |
27 | 24 | ||
28 | call \func | 25 | call \func |
29 | popl_cfi %edx | 26 | popl_cfi_reg edx |
30 | CFI_RESTORE edx | 27 | popl_cfi_reg ecx |
31 | popl_cfi %ecx | 28 | popl_cfi_reg eax |
32 | CFI_RESTORE ecx | ||
33 | popl_cfi %eax | ||
34 | CFI_RESTORE eax | ||
35 | ret | 29 | ret |
36 | CFI_ENDPROC | 30 | CFI_ENDPROC |
37 | _ASM_NOKPROBE(\name) | 31 | _ASM_NOKPROBE(\name) |
diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S index 8ec443a0777b..f89ba4e93025 100644 --- a/arch/x86/lib/thunk_64.S +++ b/arch/x86/lib/thunk_64.S | |||
@@ -17,24 +17,15 @@ | |||
17 | CFI_STARTPROC | 17 | CFI_STARTPROC |
18 | 18 | ||
19 | /* this one pushes 9 elems, the next one would be %rIP */ | 19 | /* this one pushes 9 elems, the next one would be %rIP */ |
20 | pushq_cfi %rdi | 20 | pushq_cfi_reg rdi |
21 | CFI_REL_OFFSET rdi, 0 | 21 | pushq_cfi_reg rsi |
22 | pushq_cfi %rsi | 22 | pushq_cfi_reg rdx |
23 | CFI_REL_OFFSET rsi, 0 | 23 | pushq_cfi_reg rcx |
24 | pushq_cfi %rdx | 24 | pushq_cfi_reg rax |
25 | CFI_REL_OFFSET rdx, 0 | 25 | pushq_cfi_reg r8 |
26 | pushq_cfi %rcx | 26 | pushq_cfi_reg r9 |
27 | CFI_REL_OFFSET rcx, 0 | 27 | pushq_cfi_reg r10 |
28 | pushq_cfi %rax | 28 | pushq_cfi_reg r11 |
29 | CFI_REL_OFFSET rax, 0 | ||
30 | pushq_cfi %r8 | ||
31 | CFI_REL_OFFSET r8, 0 | ||
32 | pushq_cfi %r9 | ||
33 | CFI_REL_OFFSET r9, 0 | ||
34 | pushq_cfi %r10 | ||
35 | CFI_REL_OFFSET r10, 0 | ||
36 | pushq_cfi %r11 | ||
37 | CFI_REL_OFFSET r11, 0 | ||
38 | 29 | ||
39 | .if \put_ret_addr_in_rdi | 30 | .if \put_ret_addr_in_rdi |
40 | /* 9*8(%rsp) is return addr on stack */ | 31 | /* 9*8(%rsp) is return addr on stack */ |
@@ -69,24 +60,15 @@ | |||
69 | CFI_STARTPROC | 60 | CFI_STARTPROC |
70 | CFI_ADJUST_CFA_OFFSET 9*8 | 61 | CFI_ADJUST_CFA_OFFSET 9*8 |
71 | restore: | 62 | restore: |
72 | popq_cfi %r11 | 63 | popq_cfi_reg r11 |
73 | CFI_RESTORE r11 | 64 | popq_cfi_reg r10 |
74 | popq_cfi %r10 | 65 | popq_cfi_reg r9 |
75 | CFI_RESTORE r10 | 66 | popq_cfi_reg r8 |
76 | popq_cfi %r9 | 67 | popq_cfi_reg rax |
77 | CFI_RESTORE r9 | 68 | popq_cfi_reg rcx |
78 | popq_cfi %r8 | 69 | popq_cfi_reg rdx |
79 | CFI_RESTORE r8 | 70 | popq_cfi_reg rsi |
80 | popq_cfi %rax | 71 | popq_cfi_reg rdi |
81 | CFI_RESTORE rax | ||
82 | popq_cfi %rcx | ||
83 | CFI_RESTORE rcx | ||
84 | popq_cfi %rdx | ||
85 | CFI_RESTORE rdx | ||
86 | popq_cfi %rsi | ||
87 | CFI_RESTORE rsi | ||
88 | popq_cfi %rdi | ||
89 | CFI_RESTORE rdi | ||
90 | ret | 72 | ret |
91 | CFI_ENDPROC | 73 | CFI_ENDPROC |
92 | _ASM_NOKPROBE(restore) | 74 | _ASM_NOKPROBE(restore) |