Restore r31 setting in powerpc32 swapcontext.

Commit ffe8a9a831, "powerpc: Remove
rt_sigreturn usage on context function", removed from powerpc32
swapcontext a setting of r31 that is relied upon in subsequent code.
I'm not sure why this didn't produce test failures in Adhemerval's
32-bit testing; in my (soft-float) testing in preparation for 2.30
release, I see several context-related failures

FAIL: stdlib/tst-makecontext2
FAIL: stdlib/tst-makecontext3
FAIL: stdlib/tst-setcontext
FAIL: stdlib/tst-setcontext2
FAIL: stdlib/tst-setcontext4
FAIL: stdlib/tst-setcontext7
FAIL: stdlib/tst-setcontext9
FAIL: stdlib/tst-swapcontext1

that did not appear in 2.29 testing.  This patch restores the removed
register setting in question, and thus fixes those failures.

Tested for powerpc (soft-float).

	* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
	(__CONTEXT_FUNC_NAME): Restore setting of r31.
This commit is contained in:
Joseph Myers 2019-07-30 14:05:11 +00:00
parent 8a814e20d4
commit c86b8e7579
2 changed files with 8 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2019-07-30 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
(__CONTEXT_FUNC_NAME): Restore setting of r31.
2019-07-30 Florian Weimer <fweimer@redhat.com> 2019-07-30 Florian Weimer <fweimer@redhat.com>
* nptl/tst-pthread-getattr.c (allocate_and_test): Change return * nptl/tst-pthread-getattr.c (allocate_and_test): Change return

View File

@ -276,6 +276,9 @@ ENTRY(__CONTEXT_FUNC_NAME)
cmpwi r3,0 cmpwi r3,0
bne 3f /* L(error_exit) */ bne 3f /* L(error_exit) */
lwz r4,_FRAME_PARM_SAVE2(r1)
lwz r31,_UC_REGS_PTR(r4)
#ifdef __CONTEXT_ENABLE_FPRS #ifdef __CONTEXT_ENABLE_FPRS
# ifdef __CONTEXT_ENABLE_VRS # ifdef __CONTEXT_ENABLE_VRS