@samitouri / QOSamiQemu / commits / 432eef4efb

linux-user/loongarch64: Use sys_state when accessing CSR registers

When accessing CSR registers in directory linux-user/loongarch64/, use sys_state rather than env. There is no function change. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Philippe Mathieu-Daudé <philmd@mailo.com> Tested-by: Song Gao <gaosong@loongson.cn> Message-ID: <20260605083844.175612-1-maobibo@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn>

Bibo Mao committed Jun 5, 2026 at 16:38 UTC 432eef4efb9daa2257298d662035b04a0d9b1058
3 files changed +16 -9
linux-user/loongarch64/cpu_loop.c
+3 -2
@@ -19,6 +19,7 @@ enum {
19
20 void cpu_loop(CPULoongArchState *env)
21 {
22 + CPUSysState *sys = env_sys(env);
23 CPUState *cs = env_cpu(env);
24 int trapnr, si_code;
25 abi_long ret;
@@ -103,10 +104,10 @@ void cpu_loop(CPULoongArchState *env)
104 * choose the layout of any signal frame.
105 */
106 case EXCCODE_SXD:
106 - env->CSR_EUEN |= R_CSR_EUEN_SXE_MASK;
107 + sys->CSR_EUEN |= R_CSR_EUEN_SXE_MASK;
108 break;
109 case EXCCODE_ASXD:
109 - env->CSR_EUEN |= R_CSR_EUEN_ASXE_MASK;
110 + sys->CSR_EUEN |= R_CSR_EUEN_ASXE_MASK;
111 break;
112
113 case EXCP_ATOMIC:
linux-user/loongarch64/elfload.c
+3 -1
@@ -67,6 +67,8 @@ const char *get_elf_platform(CPUState *cs)
67
68 void elf_core_copy_regs(target_elf_gregset_t *r, const CPULoongArchState *env)
69 {
70 + CPUSysState *sys = env_sys((CPULoongArchState *)env);
71 +
72 r->pt.regs[0] = 0;
73
74 for (int i = 1; i < ARRAY_SIZE(env->gpr); i++) {
@@ -74,5 +76,5 @@ void elf_core_copy_regs(target_elf_gregset_t *r, const CPULoongArchState *env)
76 }
77
78 r->pt.csr_era = tswapreg(env->pc);
77 - r->pt.csr_badv = tswapreg(env->CSR_BADV);
79 + r->pt.csr_badv = tswapreg(sys->CSR_BADV);
80 }
linux-user/loongarch64/signal.c
+10 -6
@@ -126,6 +126,8 @@ static abi_ptr extframe_alloc(struct extctx_layout *extctx,
126 static abi_ptr setup_extcontext(CPULoongArchState *env,
127 struct extctx_layout *extctx, abi_ptr sp)
128 {
129 + CPUSysState *sys = env_sys(env);
130 +
131 memset(extctx, 0, sizeof(struct extctx_layout));
132
133 /* Grow down, alloc "end" context info first. */
@@ -134,10 +136,10 @@ static abi_ptr setup_extcontext(CPULoongArchState *env,
136 /* For qemu, there is no lazy fp context switch, so fp always present. */
137 extctx->flags = SC_USED_FP;
138
137 - if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, ASXE)) {
139 + if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, ASXE)) {
140 sp = extframe_alloc(extctx, &extctx->lasx,
141 sizeof(struct target_lasx_context), LASX_CTX_ALIGN, sp);
140 - } else if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, SXE)) {
142 + } else if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, SXE)) {
143 sp = extframe_alloc(extctx, &extctx->lsx,
144 sizeof(struct target_lsx_context), LSX_CTX_ALIGN, sp);
145 } else {
@@ -152,6 +154,7 @@ static void setup_sigframe(CPULoongArchState *env,
154 struct target_sigcontext *sc,
155 struct extctx_layout *extctx)
156 {
157 + CPUSysState *sys = env_sys(env);
158 struct target_sctx_info *info;
159 int i;
160
@@ -166,7 +169,7 @@ static void setup_sigframe(CPULoongArchState *env,
169 * Set extension context
170 */
171
169 - if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, ASXE)) {
172 + if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, ASXE)) {
173 struct target_lasx_context *lasx_ctx;
174 info = extctx->lasx.haddr;
175
@@ -183,7 +186,7 @@ static void setup_sigframe(CPULoongArchState *env,
186 }
187 __put_user(read_fcc(env), &lasx_ctx->fcc);
188 __put_user(env->fcsr0, &lasx_ctx->fcsr);
186 - } else if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, SXE)) {
189 + } else if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, SXE)) {
190 struct target_lsx_context *lsx_ctx;
191 info = extctx->lsx.haddr;
192
@@ -350,6 +353,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
353 target_siginfo_t *info,
354 target_sigset_t *set, CPULoongArchState *env)
355 {
356 + CPUSysState *sys = env_sys(env);
357 struct target_rt_sigframe *frame;
358 struct extctx_layout extctx;
359 abi_ptr frame_addr;
@@ -365,10 +369,10 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
369 return;
370 }
371
368 - if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, ASXE)) {
372 + if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, ASXE)) {
373 extctx.lasx.haddr = (void *)frame + (extctx.lasx.gaddr - frame_addr);
374 extctx.end.haddr = (void *)frame + (extctx.end.gaddr - frame_addr);
371 - } else if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, SXE)) {
375 + } else if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, SXE)) {
376 extctx.lsx.haddr = (void *)frame + (extctx.lsx.gaddr - frame_addr);
377 extctx.end.haddr = (void *)frame + (extctx.end.gaddr - frame_addr);
378 } else {