On Tue, Mar 07, 2017 at 08:40:22AM +0100, Patrick Wildt wrote: > On Tue, Mar 07, 2017 at 01:44:19AM -0500, Dale Rahn wrote: > > Setjmp, longjmp was converted from calling sigprocmask to invoking > > sigprocmask directly. The ABI for the function call and the syscall > > are not the same and the register manipulation code was not updated > > in the change. > > > > This diff moves the jmpbuf to x2 for the duration of the sigprocmask syscall > > and loads x0/x1 with the appropriate values and saves the returned x0 > > as the signal mask. > > > > Other than storing x0 and x30 (lr) on the stack, this should be equivalent > > to calling sigprocmask 'bl sigprocmaskB instead of 'SYSTRAP(sigprocmask)' > > > > diff --git a/lib/libc/arch/aarch64/gen/setjmp.S > > b/lib/libc/arch/aarch64/gen/setjmp.S > > index ba4010be7ff..76c1be5b9b5 100644 > > --- a/lib/libc/arch/aarch64/gen/setjmp.S > > +++ b/lib/libc/arch/aarch64/gen/setjmp.S > > @@ -34,16 +34,15 @@ > > #include <machine/setjmp.h> > > > > ENTRY(setjmp) > > - stp x0, x30, [sp, #-16]! > > > > + mov x2, x0 /* save jmpbuf in x2 */ > > /* Store the signal mask */ > > - add x2, x0, #(_JB_SIGMASK * 8) /* oset */ > > - mov x1, #0 /* set */ > > + mov w1, #0 /* set */ > > mov x0, #1 /* SIG_BLOCK */ > > SYSTRAP(sigprocmask) > > + str w0, [x2, #(_JB_SIGMASK * 8)] /* oset */ > > > > - ldp x0, x30, [sp], #16 > > - > > + mov x0, x2 > > /* Store the magic value and stack pointer */ > > ldr x8, .Lmagic > > mov x9, sp > > @@ -73,18 +72,15 @@ ENTRY(setjmp) > > END_STRONG(setjmp) > > > > ENTRY(longjmp) > > - stp x0, x1, [sp, #-32]! > > - str x30, [sp, #24] > > + mov x2, x0 /* move jmpbuf */ > > + mov x3, x1 /* final return value */ > > > > /* Restore the signal mask */ > > - mov x2, #0 /* oset */ > > - add x1, x0, #(_JB_SIGMASK * 8) /* set */ > > + ldr x1, [x2, #(_JB_SIGMASK * 8)] /* set */ > > Shouldn't this be w1 instead of x1, since you are storing it using w0?
With that fixed, ok patrick@ > > > mov x0, #3 /* SIG_SETMASK */ > > SYSTRAP(sigprocmask) > > > > - ldr x30, [sp, #24] > > - ldp x0, x1, [sp], #32 > > - > > + mov x0, x2 > > /* Check the magic value */ > > ldr x8, [x0], #8 > > ldr x9, .Lmagic > > @@ -110,7 +106,7 @@ ENTRY(longjmp) > > ldp d14, d15, [x0] > > > > /* Load the return value */ > > - mov x0, x1 > > + mov x0, x3 > > ret > > > > botch: > > Dale Rahn dr...@dalerahn.com > > >