Skip to content

Commit a3d7c46

Browse files
authored
[Mips] Fixed libunwind::Registers_mips_o32::jumpto to allow for load delay (#152942)
Fix #152922 MIPS III also has load delay, so libunwind::Registers_mips_newabi::jumpto() is also fixed.
1 parent ba24b3e commit a3d7c46

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

libunwind/src/UnwindRegistersRestore.S

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1044,9 +1044,10 @@ DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind18Registers_mips_o326jumptoEv)
10441044
lw $27, (4 * 27)($4)
10451045
lw $28, (4 * 28)($4)
10461046
lw $29, (4 * 29)($4)
1047-
lw $30, (4 * 30)($4)
10481047
// load new pc into ra
10491048
lw $31, (4 * 32)($4)
1049+
// MIPS 1 has load delay slot. Ensure lw $31 and jr are separated by an instruction.
1050+
lw $30, (4 * 30)($4)
10501051
// jump to ra, load a0 in the delay slot
10511052
jr $31
10521053
lw $4, (4 * 4)($4)
@@ -1082,11 +1083,13 @@ DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind21Registers_mips_newabi6jumptoEv)
10821083
ld $2, (8 * 2)($4)
10831084
ld $3, (8 * 3)($4)
10841085
// skip a0 for now
1085-
.irp i,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
1086+
.irp i,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29
10861087
ld $\i, (8 * \i)($4)
10871088
.endr
10881089
// load new pc into ra
10891090
ld $31, (8 * 32)($4)
1091+
// MIPS 1 has load delay slot. Ensure lw $31 and jr are separated by an instruction.
1092+
ld $30, (8 * 30)($4)
10901093
// jump to ra, load a0 in the delay slot
10911094
jr $31
10921095
ld $4, (8 * 4)($4)

0 commit comments

Comments
 (0)