# HG changeset patch # User Taylor R Campbell # Date 1744484170 0 # Sat Apr 12 18:56:10 2025 +0000 # Branch trunk # Node ID 7242b013788eb91f5e5af52ae264bbc8fe011fcc # Parent 04218384223d82cd5e3facb3ebb61bc9184838f0 # EXP-Topic riastradh-pr59285-mips_longjmp0 mips _longjmp(..., 0): Make 1, not 0, come flying out of _setjmp. PR port-mips/59285: _longjmp(..., 0) makes setjmp return 0, not 1 diff -r 04218384223d -r 7242b013788e lib/libc/arch/mips/gen/_setjmp.S --- a/lib/libc/arch/mips/gen/_setjmp.S Sat Apr 12 13:00:21 2025 +0000 +++ b/lib/libc/arch/mips/gen/_setjmp.S Sat Apr 12 18:56:10 2025 +0000 @@ -122,8 +122,9 @@ LEAF(_longjmp) SAVE_GP(CALLFRAME_GP) REG_PROLOGUE - REG_L v0, _SC_REGS(a0) # get magic number - REG_L ra, _SC_PC(a0) + beqz a1, 2f # check for longjmp(..., 0) + REG_L v0, _SC_REGS(a0) # get magic number +1: REG_L ra, _SC_PC(a0) REG_LI t0, 0xACEDBADE bne v0, t0, botch # jump if error PTR_ADDU sp, sp, CALLFRAME_SIZ # does not matter, sanity @@ -178,6 +179,12 @@ LEAF(_longjmp) j ra move v0, a1 # get return value in 1st arg +2: /* + * Map _longjmp(..., 0) to _longjmp(..., 1). + */ + j 1b + li a1, 1 + botch: /* * We know we aren't returning so we don't care about restoring