Fix string/tst-xbzero-opt if build with gcc head.
On s390x, the test string/tst-xbzero-opt is failing if build with gcc head: FAIL: no clear/prepare: expected 32 got 0 FAIL: no clear/test: expected some got 0 FAIL: ordinary clear/prepare: expected 32 got 0 INFO: ordinary clear/test: found 0 patterns (memset not eliminated) PASS: explicit clear/prepare: expected 32 got 32 PASS: explicit clear/test: expected 0 got 0 In setup_no_clear / setup_ordinary_clear, GCC is omitting the memcpy loop in prepare_test_buffer. Thus count_test_patterns does not find any of the test_pattern. This patch calls use_test_buffer in order to force the compiler to really copy the pattern to buf. ChangeLog: * string/tst-xbzero-opt.c (use_test_buffer): New function. (prepare_test_buffer): Call use_test_buffer as compiler barrier.
This commit is contained in:
parent
cfba5dbb10
commit
c9dc4d5117
|
@ -1,3 +1,8 @@
|
||||||
|
2018-07-26 Stefan Liebler <stli@linux.ibm.com>
|
||||||
|
|
||||||
|
* string/tst-xbzero-opt.c (use_test_buffer): New function.
|
||||||
|
(prepare_test_buffer): Call use_test_buffer as compiler barrier.
|
||||||
|
|
||||||
2018-07-26 Florian Weimer <fweimer@redhat.com>
|
2018-07-26 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
* htl/lockfile.c (flockfile, funlockfile, ftrylockfile): Use weak
|
* htl/lockfile.c (flockfile, funlockfile, ftrylockfile): Use weak
|
||||||
|
|
|
@ -97,6 +97,17 @@ static const unsigned char test_pattern[16] =
|
||||||
|
|
||||||
static ucontext_t uc_main, uc_co;
|
static ucontext_t uc_main, uc_co;
|
||||||
|
|
||||||
|
static __attribute__ ((noinline, noclone)) int
|
||||||
|
use_test_buffer (unsigned char *buf)
|
||||||
|
{
|
||||||
|
unsigned int sum = 0;
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < PATTERN_REPS; i++)
|
||||||
|
sum += buf[i * PATTERN_SIZE];
|
||||||
|
|
||||||
|
return (sum == 2 * PATTERN_REPS) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Always check the test buffer immediately after filling it; this
|
/* Always check the test buffer immediately after filling it; this
|
||||||
makes externally visible side effects depend on the buffer existing
|
makes externally visible side effects depend on the buffer existing
|
||||||
and having been filled in. */
|
and having been filled in. */
|
||||||
|
@ -116,6 +127,10 @@ prepare_test_buffer (unsigned char *buf)
|
||||||
|
|
||||||
if (swapcontext (&uc_co, &uc_main))
|
if (swapcontext (&uc_co, &uc_main))
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
|
/* Force the compiler to really copy the pattern to buf. */
|
||||||
|
if (use_test_buffer (buf))
|
||||||
|
abort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue