glibc/sysdeps/mips
Steve Ellcey 8a71d2e27f Fix MIPS64 memcpy regression.
The MIPS memcpy optimizations at
<https://sourceware.org/ml/libc-alpha/2015-10/msg00597.html>
introduced a bug causing many string function tests to fail with
segfaults for n32 and n64:

FAIL: string/stratcliff
FAIL: string/test-bcopy
FAIL: string/test-memccpy
FAIL: string/test-memcmp
FAIL: string/test-memcpy
FAIL: string/test-memmove
FAIL: string/test-mempcpy
FAIL: string/test-stpncpy
FAIL: string/test-strncmp
FAIL: string/test-strncpy

(Some failures in other directories could also be caused by this bug.)

The problem is that after the check for whether a word of input is
left that can be copied as a word before moving to byte copies, a load
can occur in the branch delay slot, resulting in a segfault if we are
at the end of a page and the following page is unmapped.  I don't see
how this would have passed the tests as reported in the original patch
posting (different kernel configurations affecting the code setting up
unmapped pages, maybe?), since the tests in question don't appear to
have changed recently.

This patch moves a later instruction into the delay slot, as suggested
at <https://sourceware.org/ml/libc-alpha/2016-01/msg00584.html>.

Tested for n32 and n64.

2016-01-28  Steve Ellcey  <sellcey@imgtec.com>
            Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/mips/memcpy.S (MEMCPY_NAME) [USE_DOUBLE]: Avoid word
	load in branch delay slot when less than a word of input left.
2016-01-28 01:52:05 +00:00
..
bits Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fpu Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ieee754 Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
include/sys Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mips32 Fix ulps regeneration for *-finite tests. 2016-01-19 21:42:58 +00:00
mips64 Fix ulps regeneration for *-finite tests. 2016-01-19 21:42:58 +00:00
nptl Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
sys Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
__longjmp.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
abort-instr.h Move mips from ports to libc. 2014-02-10 23:30:21 +00:00
add_n.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
addmul_1.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
atomic-machine.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
backtrace.c Move mips from ports to libc. 2014-02-10 23:30:21 +00:00
bsd-_setjmp.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
bsd-setjmp.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
configure Require autoconf 2.69 2014-09-29 07:53:36 -07:00
configure.ac Move mips from ports to libc. 2014-02-10 23:30:21 +00:00
dl-dtprocnum.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-machine-reject-phdr.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-machine.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-procinfo.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-procinfo.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-tls.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
dl-trampoline.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fpregdef.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
fpu_control.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
gccframe.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Implies Move mips from ports to libc. 2014-02-10 23:30:21 +00:00
jmpbuf-unwind.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
ldsodefs.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
libc-tls.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
linkmap.h Rename bits/linkmap.h to linkmap.h (bug 14912). 2015-09-04 19:44:27 +00:00
lshift.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
machine-gmon.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
Makefile mips: fix testsuite build for O32 FPXX ABI on pre-R2 CPU 2015-12-09 19:03:46 +01:00
math_private.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
math-tests.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
memcpy.S Fix MIPS64 memcpy regression. 2016-01-28 01:52:05 +00:00
memset.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
memusage.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
mul_1.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
preconfigure Put mips preconfigure code inside mips* case statement. 2014-09-09 10:58:00 -07:00
regdef.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
rshift.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
setjmp_aux.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
setjmp.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
sgidefs.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
sotruss-lib.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
stackinfo.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
start.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
strcmp.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
sub_n.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
submul_1.S Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tininess.h Move mips from ports to libc. 2014-02-10 23:30:21 +00:00
tls-macros.h MIPS: Only use .set mips* assembler directives when necessary 2015-09-08 16:52:43 +01:00
tst-abi-fp32mod.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-abi-fp64amod.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-abi-fp64mod.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-abi-fpxxmod.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-abi-fpxxomod.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-abi-interlink.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-audit.h Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-mode-switch-1.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-mode-switch-2.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00
tst-mode-switch-3.c Update copyright dates with scripts/update-copyrights. 2016-01-04 16:05:18 +00:00