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 {