Two more caveats in common/jmp.S..

    diff --git a/common/jmp.S b/common/jmp.S
    index 3bc8c94..a446d78 100644
    --- a/common/jmp.S
    +++ b/common/jmp.S
    @@ -18,7 +18,13 @@
        Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
        USA.  */
     
    -#define _SV save %sp, -0x40, %sp
    +#if __WORDSIZE == 32
    +# define STACK_BIAS 0
    +#else
    +# define STACK_BIAS 2047
    +#endif
    +
    +#define _SV save %sp, -STACK_BIAS-0x40, %sp
     #define _RV restore
     #define FLUSH_ALL_WINDOWS \
        _SV; _SV; _SV; _SV; _SV; _SV; _SV; \
    @@ -46,7 +52,7 @@ __longjmp:
        FLUSH_ALL_WINDOWS
        ld [%o0], %o7           /* Return PC.  */
        ld [%o0 + 4], %fp       /* Saved SP.  */

#if __WORDSIZE == 32
        ld [%o0], %o7           /* Return PC.  */
        ld [%o0 + 4], %fp       /* Saved SP.  */
#else
        ldx [%o0], %o7          /* Return PC.  */
        ldx [%o0 + 8], %fp      /* Saved SP.  */
#endif

and also in the corresponding stores in setjmp:

#if __WORDSIZE == 32        
        st %o7, [%o0]
        st %sp, [%o0 + 4]
#else
        stx %o7, [%o0]
        stx %sp, [%o0 + 8]
#endif

Reply via email to