Hi,
If the default memcpy variant is called with a length of >1MB on 31bit,
r13 is clobbered as the algorithm is switching to mvcle. The mvcle code
returns without restoring r13. All other cases are restoring r13.
If memcpy is called from outside libc the ifunc resolver will only
select this variant if running on machines older than z10.
Otherwise or if memcpy is called from inside libc,
this default memcpy variant is called.
The testcase timezone/tst-tzset is triggering this issue in some
combinations of gcc versions and optimization levels.
This bug was introduced in commit 04bb21ac93e90d7696bcaf8febe2b2dd2d83585a
and thus is a regression compared to glibc 2.23 release. It should
be committed before glibc 2.24 release.
This patch removes the usage of r13 at all. Thus it is not saved
and restored. The base address for execute-instruction is now stored
in r5 which is obtained after r5 is not needed anymore as
256byte block counter.
Okay to commit before release 2.24?
Bye
Stefan
ChangeLog:
* sysdeps/s390/s390-32/memcpy.S (memcpy): Eliminate the usage
of r13 as it is not restored in mvcle case.