On Sat, Feb 17, 2024 at 20:40:50 -0500, Rich Felker wrote: > due to incorrect base address register when attempting to reload the > saved value of r8, the caller's value of r8 was not preserved. > --- > src/signal/sh/sigsetjmp.s | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/signal/sh/sigsetjmp.s b/src/signal/sh/sigsetjmp.s > index 1e2270be..f0f604e2 100644 > --- a/src/signal/sh/sigsetjmp.s > +++ b/src/signal/sh/sigsetjmp.s > @@ -27,7 +27,7 @@ __sigsetjmp: > > mov.l 3f, r0 > 4: braf r0 > - mov.l @(4+8,r4), r8 > + mov.l @(4+8,r6), r8 > > 9: mov.l 5f, r0 > 6: braf r0
That takes care of restoring caller's r8 for the first return from sigsetjmp, but isn't there still the problem that the jump buffer contains the wrong one, so on the second return from sigsetjmp the caller will have clobbered r8? Sorry for a drive-by reply. I'll try to take a closer look in the evening. -uwe _______________________________________________ Toybox mailing list [email protected] http://lists.landley.net/listinfo.cgi/toybox-landley.net
