]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/glibc/glibc-rh689471.patch
Merge remote-tracking branch 'origin/next' into thirteen
[ipfire-2.x.git] / src / patches / glibc / glibc-rh689471.patch
CommitLineData
12788f63
MT
12011-03-20 H.J. Lu <hongjiu.lu@intel.com>
2
3 [BZ #12597]
4 * string/test-strncmp.c (do_page_test): New function.
5 (check2): Likewise.
6 (test_main): Call check2.
7 * sysdeps/x86_64/multiarch/strcmp.S: Properly cross page boundary.
8
9Index: glibc-2.12-2-gc4ccff1/string/test-strncmp.c
10===================================================================
11--- glibc-2.12-2-gc4ccff1.orig/string/test-strncmp.c
12+++ glibc-2.12-2-gc4ccff1/string/test-strncmp.c
13@@ -200,6 +200,27 @@ do_test (size_t align1, size_t align2, s
14 }
15
16 static void
17+do_page_test (size_t offset1, size_t offset2, char *s2)
18+{
19+ char *s1;
20+ int exp_result;
21+
22+ if (offset1 >= page_size || offset2 >= page_size)
23+ return;
24+
25+ s1 = (char *) (buf1 + offset1);
26+ s2 += offset2;
27+
28+ exp_result= *s1;
29+
30+ FOR_EACH_IMPL (impl, 0)
31+ {
32+ check_result (impl, s1, s2, page_size, -exp_result);
33+ check_result (impl, s2, s1, page_size, exp_result);
34+ }
35+}
36+
37+static void
38 do_random_tests (void)
39 {
40 size_t i, j, n, align1, align2, pos, len1, len2, size;
41@@ -312,6 +333,25 @@ check1 (void)
42 }
43 }
44
45+static void
46+check2 (void)
47+{
48+ size_t i;
49+ char *s1, *s2;
50+
51+ s1 = (char *) buf1;
52+ for (i = 0; i < page_size - 1; i++)
53+ s1[i] = 23;
54+ s1[i] = 0;
55+
56+ s2 = strdup (s1);
57+
58+ for (i = 0; i < 64; ++i)
59+ do_page_test (3990 + i, 2635, s2);
60+
61+ free (s2);
62+}
63+
64 int
65 test_main (void)
66 {
67@@ -320,6 +360,7 @@ test_main (void)
68 test_init ();
69
70 check1 ();
71+ check2 ();
72
73 printf ("%23s", "");
74 FOR_EACH_IMPL (impl, 0)
75Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S
76===================================================================
77--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strcmp.S
78+++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S
79@@ -452,6 +452,7 @@ LABEL(loop_ashr_1_use_sse4_2):
80 add $16, %r10
81 jg LABEL(nibble_ashr_1_use_sse4_2)
82
83+LABEL(nibble_ashr_1_use_sse4_2_restart):
84 movdqa (%rdi, %rdx), %xmm0
85 palignr $1, -16(%rdi, %rdx), %xmm0
86 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
87@@ -499,7 +500,7 @@ LABEL(nibble_ashr_1_use_sse4_2):
88 jae LABEL(nibble_ashr_use_sse4_2_exit)
89 # endif
90 cmp $14, %ecx
91- ja LABEL(loop_ashr_1_use_sse4_2)
92+ ja LABEL(nibble_ashr_1_use_sse4_2_restart)
93
94 jmp LABEL(nibble_ashr_use_sse4_2_exit)
95
96@@ -544,6 +545,7 @@ LABEL(loop_ashr_2_use_sse4_2):
97 add $16, %r10
98 jg LABEL(nibble_ashr_2_use_sse4_2)
99
100+LABEL(nibble_ashr_2_use_sse4_2_restart):
101 movdqa (%rdi, %rdx), %xmm0
102 palignr $2, -16(%rdi, %rdx), %xmm0
103 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
104@@ -591,7 +593,7 @@ LABEL(nibble_ashr_2_use_sse4_2):
105 jae LABEL(nibble_ashr_use_sse4_2_exit)
106 # endif
107 cmp $13, %ecx
108- ja LABEL(loop_ashr_2_use_sse4_2)
109+ ja LABEL(nibble_ashr_2_use_sse4_2_restart)
110
111 jmp LABEL(nibble_ashr_use_sse4_2_exit)
112
113@@ -636,6 +638,7 @@ LABEL(loop_ashr_3_use_sse4_2):
114 add $16, %r10
115 jg LABEL(nibble_ashr_3_use_sse4_2)
116
117+LABEL(nibble_ashr_3_use_sse4_2_restart):
118 movdqa (%rdi, %rdx), %xmm0
119 palignr $3, -16(%rdi, %rdx), %xmm0
120 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
121@@ -683,7 +686,7 @@ LABEL(nibble_ashr_3_use_sse4_2):
122 jae LABEL(nibble_ashr_use_sse4_2_exit)
123 # endif
124 cmp $12, %ecx
125- ja LABEL(loop_ashr_3_use_sse4_2)
126+ ja LABEL(nibble_ashr_3_use_sse4_2_restart)
127
128 jmp LABEL(nibble_ashr_use_sse4_2_exit)
129
130@@ -729,6 +732,7 @@ LABEL(loop_ashr_4_use_sse4_2):
131 add $16, %r10
132 jg LABEL(nibble_ashr_4_use_sse4_2)
133
134+LABEL(nibble_ashr_4_use_sse4_2_restart):
135 movdqa (%rdi, %rdx), %xmm0
136 palignr $4, -16(%rdi, %rdx), %xmm0
137 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
138@@ -776,7 +780,7 @@ LABEL(nibble_ashr_4_use_sse4_2):
139 jae LABEL(nibble_ashr_use_sse4_2_exit)
140 # endif
141 cmp $11, %ecx
142- ja LABEL(loop_ashr_4_use_sse4_2)
143+ ja LABEL(nibble_ashr_4_use_sse4_2_restart)
144
145 jmp LABEL(nibble_ashr_use_sse4_2_exit)
146
147@@ -822,6 +826,7 @@ LABEL(loop_ashr_5_use_sse4_2):
148 add $16, %r10
149 jg LABEL(nibble_ashr_5_use_sse4_2)
150
151+LABEL(nibble_ashr_5_use_sse4_2_restart):
152 movdqa (%rdi, %rdx), %xmm0
153 palignr $5, -16(%rdi, %rdx), %xmm0
154 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
155@@ -870,7 +875,7 @@ LABEL(nibble_ashr_5_use_sse4_2):
156 jae LABEL(nibble_ashr_use_sse4_2_exit)
157 # endif
158 cmp $10, %ecx
159- ja LABEL(loop_ashr_5_use_sse4_2)
160+ ja LABEL(nibble_ashr_5_use_sse4_2_restart)
161
162 jmp LABEL(nibble_ashr_use_sse4_2_exit)
163
164@@ -916,6 +921,7 @@ LABEL(loop_ashr_6_use_sse4_2):
165 add $16, %r10
166 jg LABEL(nibble_ashr_6_use_sse4_2)
167
168+LABEL(nibble_ashr_6_use_sse4_2_restart):
169 movdqa (%rdi, %rdx), %xmm0
170 palignr $6, -16(%rdi, %rdx), %xmm0
171 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
172@@ -963,7 +969,7 @@ LABEL(nibble_ashr_6_use_sse4_2):
173 jae LABEL(nibble_ashr_use_sse4_2_exit)
174 # endif
175 cmp $9, %ecx
176- ja LABEL(loop_ashr_6_use_sse4_2)
177+ ja LABEL(nibble_ashr_6_use_sse4_2_restart)
178
179 jmp LABEL(nibble_ashr_use_sse4_2_exit)
180
181@@ -1009,6 +1015,7 @@ LABEL(loop_ashr_7_use_sse4_2):
182 add $16, %r10
183 jg LABEL(nibble_ashr_7_use_sse4_2)
184
185+LABEL(nibble_ashr_7_use_sse4_2_restart):
186 movdqa (%rdi, %rdx), %xmm0
187 palignr $7, -16(%rdi, %rdx), %xmm0
188 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
189@@ -1056,7 +1063,7 @@ LABEL(nibble_ashr_7_use_sse4_2):
190 jae LABEL(nibble_ashr_use_sse4_2_exit)
191 # endif
192 cmp $8, %ecx
193- ja LABEL(loop_ashr_7_use_sse4_2)
194+ ja LABEL(nibble_ashr_7_use_sse4_2_restart)
195
196 jmp LABEL(nibble_ashr_use_sse4_2_exit)
197
198@@ -1102,6 +1109,7 @@ LABEL(loop_ashr_8_use_sse4_2):
199 add $16, %r10
200 jg LABEL(nibble_ashr_8_use_sse4_2)
201
202+LABEL(nibble_ashr_8_use_sse4_2_restart):
203 movdqa (%rdi, %rdx), %xmm0
204 palignr $8, -16(%rdi, %rdx), %xmm0
205 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
206@@ -1149,7 +1157,7 @@ LABEL(nibble_ashr_8_use_sse4_2):
207 jae LABEL(nibble_ashr_use_sse4_2_exit)
208 # endif
209 cmp $7, %ecx
210- ja LABEL(loop_ashr_8_use_sse4_2)
211+ ja LABEL(nibble_ashr_8_use_sse4_2_restart)
212
213 jmp LABEL(nibble_ashr_use_sse4_2_exit)
214
215@@ -1195,6 +1203,7 @@ LABEL(loop_ashr_9_use_sse4_2):
216 add $16, %r10
217 jg LABEL(nibble_ashr_9_use_sse4_2)
218
219+LABEL(nibble_ashr_9_use_sse4_2_restart):
220 movdqa (%rdi, %rdx), %xmm0
221
222 palignr $9, -16(%rdi, %rdx), %xmm0
223@@ -1243,7 +1252,7 @@ LABEL(nibble_ashr_9_use_sse4_2):
224 jae LABEL(nibble_ashr_use_sse4_2_exit)
225 # endif
226 cmp $6, %ecx
227- ja LABEL(loop_ashr_9_use_sse4_2)
228+ ja LABEL(nibble_ashr_9_use_sse4_2_restart)
229
230 jmp LABEL(nibble_ashr_use_sse4_2_exit)
231
232@@ -1289,6 +1298,7 @@ LABEL(loop_ashr_10_use_sse4_2):
233 add $16, %r10
234 jg LABEL(nibble_ashr_10_use_sse4_2)
235
236+LABEL(nibble_ashr_10_use_sse4_2_restart):
237 movdqa (%rdi, %rdx), %xmm0
238 palignr $10, -16(%rdi, %rdx), %xmm0
239 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
240@@ -1336,7 +1346,7 @@ LABEL(nibble_ashr_10_use_sse4_2):
241 jae LABEL(nibble_ashr_use_sse4_2_exit)
242 # endif
243 cmp $5, %ecx
244- ja LABEL(loop_ashr_10_use_sse4_2)
245+ ja LABEL(nibble_ashr_10_use_sse4_2_restart)
246
247 jmp LABEL(nibble_ashr_use_sse4_2_exit)
248
249@@ -1382,6 +1392,7 @@ LABEL(loop_ashr_11_use_sse4_2):
250 add $16, %r10
251 jg LABEL(nibble_ashr_11_use_sse4_2)
252
253+LABEL(nibble_ashr_11_use_sse4_2_restart):
254 movdqa (%rdi, %rdx), %xmm0
255 palignr $11, -16(%rdi, %rdx), %xmm0
256 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
257@@ -1429,7 +1440,7 @@ LABEL(nibble_ashr_11_use_sse4_2):
258 jae LABEL(nibble_ashr_use_sse4_2_exit)
259 # endif
260 cmp $4, %ecx
261- ja LABEL(loop_ashr_11_use_sse4_2)
262+ ja LABEL(nibble_ashr_11_use_sse4_2_restart)
263
264 jmp LABEL(nibble_ashr_use_sse4_2_exit)
265
266@@ -1475,6 +1486,7 @@ LABEL(loop_ashr_12_use_sse4_2):
267 add $16, %r10
268 jg LABEL(nibble_ashr_12_use_sse4_2)
269
270+LABEL(nibble_ashr_12_use_sse4_2_restart):
271 movdqa (%rdi, %rdx), %xmm0
272 palignr $12, -16(%rdi, %rdx), %xmm0
273 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
274@@ -1522,7 +1534,7 @@ LABEL(nibble_ashr_12_use_sse4_2):
275 jae LABEL(nibble_ashr_use_sse4_2_exit)
276 # endif
277 cmp $3, %ecx
278- ja LABEL(loop_ashr_12_use_sse4_2)
279+ ja LABEL(nibble_ashr_12_use_sse4_2_restart)
280
281 jmp LABEL(nibble_ashr_use_sse4_2_exit)
282
283@@ -1569,6 +1581,7 @@ LABEL(loop_ashr_13_use_sse4_2):
284 add $16, %r10
285 jg LABEL(nibble_ashr_13_use_sse4_2)
286
287+LABEL(nibble_ashr_13_use_sse4_2_restart):
288 movdqa (%rdi, %rdx), %xmm0
289 palignr $13, -16(%rdi, %rdx), %xmm0
290 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
291@@ -1616,7 +1629,7 @@ LABEL(nibble_ashr_13_use_sse4_2):
292 jae LABEL(nibble_ashr_use_sse4_2_exit)
293 # endif
294 cmp $2, %ecx
295- ja LABEL(loop_ashr_13_use_sse4_2)
296+ ja LABEL(nibble_ashr_13_use_sse4_2_restart)
297
298 jmp LABEL(nibble_ashr_use_sse4_2_exit)
299
300@@ -1663,6 +1676,7 @@ LABEL(loop_ashr_14_use_sse4_2):
301 add $16, %r10
302 jg LABEL(nibble_ashr_14_use_sse4_2)
303
304+LABEL(nibble_ashr_14_use_sse4_2_restart):
305 movdqa (%rdi, %rdx), %xmm0
306 palignr $14, -16(%rdi, %rdx), %xmm0
307 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
308@@ -1710,7 +1724,7 @@ LABEL(nibble_ashr_14_use_sse4_2):
309 jae LABEL(nibble_ashr_use_sse4_2_exit)
310 # endif
311 cmp $1, %ecx
312- ja LABEL(loop_ashr_14_use_sse4_2)
313+ ja LABEL(nibble_ashr_14_use_sse4_2_restart)
314
315 jmp LABEL(nibble_ashr_use_sse4_2_exit)
316
317@@ -1759,6 +1773,7 @@ LABEL(loop_ashr_15_use_sse4_2):
318 add $16, %r10
319 jg LABEL(nibble_ashr_15_use_sse4_2)
320
321+LABEL(nibble_ashr_15_use_sse4_2_restart):
322 movdqa (%rdi, %rdx), %xmm0
323 palignr $15, -16(%rdi, %rdx), %xmm0
324 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
325@@ -1806,7 +1821,7 @@ LABEL(nibble_ashr_15_use_sse4_2):
326 jae LABEL(nibble_ashr_use_sse4_2_exit)
327 # endif
328 cmp $0, %ecx
329- ja LABEL(loop_ashr_15_use_sse4_2)
330+ ja LABEL(nibble_ashr_15_use_sse4_2_restart)
331
332 LABEL(nibble_ashr_use_sse4_2_exit):
333 # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L