From: John David Anglin Date: Sun, 9 Jul 2017 17:48:04 +0000 (-0400) Subject: Fix BZ #21049. X-Git-Tag: glibc-2.26~127 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7023e6db9950f9a2addc073fe504d12146680f02;p=thirdparty%2Fglibc.git Fix BZ #21049. --- diff --git a/ChangeLog b/ChangeLog index f7fe7b946f5..87aeac6446e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2017-07-09 Helge Deller + + [BZ #21049] + * sysdeps/hppa/__longjmp.c (__longjmp): Move call to CHECK_SP + up to avoid clobbering r26. + 2017-07-08 Andreas Schwab * scripts/build-many-glibcs.py (Glibc.build_glibc): Also build diff --git a/sysdeps/hppa/__longjmp.c b/sysdeps/hppa/__longjmp.c index a7eefc7ad6d..438db01473a 100644 --- a/sysdeps/hppa/__longjmp.c +++ b/sysdeps/hppa/__longjmp.c @@ -24,15 +24,16 @@ void __longjmp (__jmp_buf env, int val) { +#ifdef CHECK_SP + CHECK_SP (env[0].__jmp_buf.__sp); +#endif + + { /* We must use one of the non-callee saves registers for env. */ register unsigned long r26 asm ("r26") = (unsigned long)&env[0]; register unsigned long r25 asm ("r25") = (unsigned long)(val == 0 ? 1 : val); -#ifdef CHECK_SP - CHECK_SP (env[0].__jmp_buf.__sp); -#endif - asm volatile( /* Set return value. */ "copy %0, %%r28\n\t" @@ -79,6 +80,8 @@ __longjmp (__jmp_buf env, int val) : /* No outputs. */ : "r" (r25), "r" (r26) : /* No point in clobbers. */ ); + } + /* Avoid `volatile function does return' warnings. */ for (;;); }