Skip to content

Commit 71abc26

Browse files
authored
[LoongArch64] Fix nonvolatile context restoration referenced 101709. (#101904)
1 parent 420147a commit 71abc26

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

src/coreclr/pal/src/arch/loongarch64/asmconstants.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
#define CONTEXT_T6 CONTEXT_T5+SIZEOF_LOONGARCH_GPR
4646
#define CONTEXT_T7 CONTEXT_T6+SIZEOF_LOONGARCH_GPR
4747
#define CONTEXT_T8 CONTEXT_T7+SIZEOF_LOONGARCH_GPR
48-
#define CONTEXT_X0 CONTEXT_T8+SIZEOF_LOONGARCH_GPR
49-
#define CONTEXT_Fp CONTEXT_X0+SIZEOF_LOONGARCH_GPR
48+
#define CONTEXT_R21 CONTEXT_T8+SIZEOF_LOONGARCH_GPR
49+
#define CONTEXT_Fp CONTEXT_R21+SIZEOF_LOONGARCH_GPR
5050
#define CONTEXT_S0 CONTEXT_Fp+SIZEOF_LOONGARCH_GPR
5151
#define CONTEXT_S1 CONTEXT_S0+SIZEOF_LOONGARCH_GPR
5252
#define CONTEXT_S2 CONTEXT_S1+SIZEOF_LOONGARCH_GPR

src/coreclr/pal/src/arch/loongarch64/context2.S

+4-3
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,14 @@ LOCAL_LABEL(No_Restore_CONTEXT_INTEGER):
132132

133133
ld.d $ra, $t4, CONTEXT_Ra
134134
ld.d $fp, $t4, CONTEXT_Fp
135-
ld.d $sp, $t4, CONTEXT_Sp
136135
ld.d $r21, $t4, CONTEXT_Pc
137-
ld.d $t4, $t4, CONTEXT_T4
136+
ld.d $sp, $t4, CONTEXT_Sp
137+
// NOTE: the r21 and t4 had been trashed.
138138
jirl $r0, $r21, 0
139139

140140

141141
LOCAL_LABEL(No_Restore_CONTEXT_CONTROL):
142+
ld.d $r21, $t4, CONTEXT_R21
142143
ld.d $t4, $t4, CONTEXT_T4
143144
jirl $r0, $ra, 0
144145
LEAF_END RtlRestoreContext, _TEXT
@@ -202,7 +203,7 @@ LOCAL_LABEL(Done_CONTEXT_CONTROL):
202203
st.d $t6, $a0, CONTEXT_T6
203204
st.d $t7, $a0, CONTEXT_T7
204205
st.d $t8, $a0, CONTEXT_T8
205-
st.d $r21,$a0, CONTEXT_X0
206+
st.d $r21,$a0, CONTEXT_R21
206207
st.d $s0, $a0, CONTEXT_S0
207208
st.d $s1, $a0, CONTEXT_S1
208209
st.d $s2, $a0, CONTEXT_S2

0 commit comments

Comments
 (0)