This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Restore r31 setting in powerpc32 swapcontext
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: Joseph Myers <joseph at codesourcery dot com>, libc-alpha at sourceware dot org
- Cc: tuliom at linux dot ibm dot com
- Date: Tue, 30 Jul 2019 09:17:40 -0300
- Subject: Re: Restore r31 setting in powerpc32 swapcontext
- References: <alpine.DEB.2.21.1907300047220.1468@digraph.polyomino.org.uk>
On 29/07/2019 21:48, Joseph Myers wrote:
> Commit ffe8a9a8318e1db225b22da8bc067408494bac5c, "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
Thanks for catching it, I am trying to understand why I didn't see it on the
environment I am using (gcc 8.1 on a POWER7). I just tested for hard-float,
I will try a soft-float to see if it is related.
I just tested with 1ff1373b3302 (which is the latest commit I checked on
the machine) and the tests do pass...
>
> 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).
>
> 2019-07-30 Joseph Myers <joseph@codesourcery.com>
>
> * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
> (__CONTEXT_FUNC_NAME): Restore setting of r31.
>
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
> index efebb10bba..6fa1ab7d6e 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
> @@ -276,6 +276,9 @@ ENTRY(__CONTEXT_FUNC_NAME)
> cmpwi r3,0
> bne 3f /* L(error_exit) */
>
> + lwz r4,_FRAME_PARM_SAVE2(r1)
> + lwz r31,_UC_REGS_PTR(r4)
> +
> #ifdef __CONTEXT_ENABLE_FPRS
> # ifdef __CONTEXT_ENABLE_VRS
>
>