Commit 432eef4efb for qemu.org

commit 432eef4efb9daa2257298d662035b04a0d9b1058
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Fri Jun 5 16:38:44 2026 +0800

    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>

diff --git a/linux-user/loongarch64/cpu_loop.c b/linux-user/loongarch64/cpu_loop.c
index 603fcc39c7..27d6eef5cb 100644
--- a/linux-user/loongarch64/cpu_loop.c
+++ b/linux-user/loongarch64/cpu_loop.c
@@ -19,6 +19,7 @@ enum {

 void cpu_loop(CPULoongArchState *env)
 {
+    CPUSysState *sys = env_sys(env);
     CPUState *cs = env_cpu(env);
     int trapnr, si_code;
     abi_long ret;
@@ -103,10 +104,10 @@ void cpu_loop(CPULoongArchState *env)
          * choose the layout of any signal frame.
          */
         case EXCCODE_SXD:
-            env->CSR_EUEN |= R_CSR_EUEN_SXE_MASK;
+            sys->CSR_EUEN |= R_CSR_EUEN_SXE_MASK;
             break;
         case EXCCODE_ASXD:
-            env->CSR_EUEN |= R_CSR_EUEN_ASXE_MASK;
+            sys->CSR_EUEN |= R_CSR_EUEN_ASXE_MASK;
             break;

         case EXCP_ATOMIC:
diff --git a/linux-user/loongarch64/elfload.c b/linux-user/loongarch64/elfload.c
index ce3bd0c607..e53957e36d 100644
--- a/linux-user/loongarch64/elfload.c
+++ b/linux-user/loongarch64/elfload.c
@@ -67,6 +67,8 @@ const char *get_elf_platform(CPUState *cs)

 void elf_core_copy_regs(target_elf_gregset_t *r, const CPULoongArchState *env)
 {
+    CPUSysState *sys = env_sys((CPULoongArchState *)env);
+
     r->pt.regs[0] = 0;

     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)
     }

     r->pt.csr_era = tswapreg(env->pc);
-    r->pt.csr_badv = tswapreg(env->CSR_BADV);
+    r->pt.csr_badv = tswapreg(sys->CSR_BADV);
 }
diff --git a/linux-user/loongarch64/signal.c b/linux-user/loongarch64/signal.c
index 1a322f9697..eff75bcdc8 100644
--- a/linux-user/loongarch64/signal.c
+++ b/linux-user/loongarch64/signal.c
@@ -126,6 +126,8 @@ static abi_ptr extframe_alloc(struct extctx_layout *extctx,
 static abi_ptr setup_extcontext(CPULoongArchState *env,
                                 struct extctx_layout *extctx, abi_ptr sp)
 {
+    CPUSysState *sys = env_sys(env);
+
     memset(extctx, 0, sizeof(struct extctx_layout));

     /* Grow down, alloc "end" context info first. */
@@ -134,10 +136,10 @@ static abi_ptr setup_extcontext(CPULoongArchState *env,
     /* For qemu, there is no lazy fp context switch, so fp always present. */
     extctx->flags = SC_USED_FP;

-    if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, ASXE)) {
+    if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, ASXE)) {
         sp = extframe_alloc(extctx, &extctx->lasx,
                         sizeof(struct target_lasx_context), LASX_CTX_ALIGN, sp);
-    } else if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, SXE)) {
+    } else if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, SXE)) {
         sp = extframe_alloc(extctx, &extctx->lsx,
                         sizeof(struct target_lsx_context), LSX_CTX_ALIGN, sp);
     } else {
@@ -152,6 +154,7 @@ static void setup_sigframe(CPULoongArchState *env,
                            struct target_sigcontext *sc,
                            struct extctx_layout *extctx)
 {
+    CPUSysState *sys = env_sys(env);
     struct target_sctx_info *info;
     int i;

@@ -166,7 +169,7 @@ static void setup_sigframe(CPULoongArchState *env,
      * Set extension context
      */

-    if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, ASXE)) {
+    if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, ASXE)) {
         struct target_lasx_context *lasx_ctx;
         info = extctx->lasx.haddr;

@@ -183,7 +186,7 @@ static void setup_sigframe(CPULoongArchState *env,
         }
         __put_user(read_fcc(env), &lasx_ctx->fcc);
         __put_user(env->fcsr0, &lasx_ctx->fcsr);
-    } else if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, SXE)) {
+    } else if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, SXE)) {
         struct target_lsx_context *lsx_ctx;
         info = extctx->lsx.haddr;

@@ -350,6 +353,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
                     target_siginfo_t *info,
                     target_sigset_t *set, CPULoongArchState *env)
 {
+    CPUSysState *sys = env_sys(env);
     struct target_rt_sigframe *frame;
     struct extctx_layout extctx;
     abi_ptr frame_addr;
@@ -365,10 +369,10 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
         return;
     }

-    if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, ASXE)) {
+    if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, ASXE)) {
         extctx.lasx.haddr = (void *)frame + (extctx.lasx.gaddr - frame_addr);
         extctx.end.haddr = (void *)frame + (extctx.end.gaddr - frame_addr);
-    } else if (FIELD_EX64(env->CSR_EUEN, CSR_EUEN, SXE)) {
+    } else if (FIELD_EX64(sys->CSR_EUEN, CSR_EUEN, SXE)) {
         extctx.lsx.haddr = (void *)frame + (extctx.lsx.gaddr - frame_addr);
         extctx.end.haddr = (void *)frame + (extctx.end.gaddr - frame_addr);
     } else {