On 2026/7/10 下午5:00, SignKirigami wrote:
Update LoongArch ELF note generation to read ERA and BADV from the host
CSR bank directly, avoiding dependence on the currently selected system
state once LVZ adds a separate guest CSR bank.

Signed-off-by: SignKirigami <[email protected]>
Signed-off-by: Hengyu Yu <[email protected]>
---
  target/loongarch/arch_dump.c | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/target/loongarch/arch_dump.c b/target/loongarch/arch_dump.c
index 9d84faef96..13472188ae 100644
--- a/target/loongarch/arch_dump.c
+++ b/target/loongarch/arch_dump.c
@@ -116,7 +116,7 @@ int loongarch_cpu_write_elf64_note(WriteCoreDumpFunction f, 
CPUState *cs,
  {
      struct loongarch_note note;
      CPULoongArchState *env = &LOONGARCH_CPU(cs)->env;
-    CPUSysState *sys = env_sys(env);
+    CPUSysState *host = &env->sys_states[LOONGARCH_VM_LEVEL_HOST];
It will be better if there is wrapped function such as get_sys_state(),
static inline CPUSysState get_sys_state(CPULoongArchState *env, int vm)
{
    return &env->sys_states[vm];
}

    CPUSysState *sys = get_sys_state(env, LOONGARCH_VM_LEVEL_HOST);

Regards
Bibo Mao

      int ret, i;
loongarch_note_init(&note, s, "CORE", 5, NT_PRSTATUS,
@@ -127,8 +127,8 @@ int loongarch_cpu_write_elf64_note(WriteCoreDumpFunction f, 
CPUState *cs,
      for (i = 0; i < 32; ++i) {
          note.prstatus.pr_reg.gpr[i] = cpu_to_dump64(s, env->gpr[i]);
      }
-    note.prstatus.pr_reg.csr_era  = cpu_to_dump64(s, sys->CSR_ERA);
-    note.prstatus.pr_reg.csr_badv = cpu_to_dump64(s, sys->CSR_BADV);
+    note.prstatus.pr_reg.csr_era  = cpu_to_dump64(s, host->CSR_ERA);
+    note.prstatus.pr_reg.csr_badv = cpu_to_dump64(s, host->CSR_BADV);
      ret = f(&note, LOONGARCH_PRSTATUS_NOTE_SIZE, s);
      if (ret < 0) {
          return -1;



Reply via email to