diff --git a/lib/libc/aarch64/gen/setjmp.S b/lib/libc/aarch64/gen/setjmp.S --- a/lib/libc/aarch64/gen/setjmp.S +++ b/lib/libc/aarch64/gen/setjmp.S @@ -73,13 +73,19 @@ END(setjmp) ENTRY(longjmp) + /* Check the magic value */ + ldr x8, [x0], #8 + ldr x9, .Lmagic + cmp x8, x9 + b.ne botch + sub sp, sp, #32 stp x0, lr, [sp] str x1, [sp, #16] /* Restore the signal mask */ mov x2, #0 /* oset */ - add x1, x0, #(_JB_SIGMASK * 8) /* set */ + add x1, x0, #(_JB_SIGMASK * 8 - 8) /* set */ mov x0, #3 /* SIG_SETMASK */ bl sigprocmask @@ -87,12 +93,6 @@ ldp x0, lr, [sp] add sp, sp, #32 - /* Check the magic value */ - ldr x8, [x0], #8 - ldr x9, .Lmagic - cmp x8, x9 - b.ne botch - /* Restore the stack pointer */ ldr x8, [x0], #8 mov sp, x8