qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anton Johansson via <qemu-devel@nongnu.org>
To: qemu-devel@nongnu.org
Cc: pierrick.bouvier@linaro.org, philmd@linaro.org,
	alistair.francis@wdc.com, palmer@dabbelt.com,
	Anton Johansson <anjo@rev.ng>
Subject: [PATCH v5 03/25] target/riscv: Fix size of pc, load_[val|res]
Date: Mon,  3 Nov 2025 18:11:46 +0100	[thread overview]
Message-ID: <20251103171208.24355-4-anjo@rev.ng> (raw)
In-Reply-To: <20251103171208.24355-1-anjo@rev.ng>

Fix to 64 bits in size and as these are mapped to TCG globals, be
careful with host endianness when allocating globals.  Casts are
added to logging expressions to retain the correct size for
TARGET_RISCV32.

Signed-off-by: Anton Johansson <anjo@rev.ng>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
---
 target/riscv/cpu.h        |  6 +++---
 target/riscv/cpu.c        |  2 +-
 target/riscv/cpu_helper.c |  6 +++---
 target/riscv/machine.c    |  6 +++---
 target/riscv/translate.c  | 12 +++++++-----
 5 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
index bd200ccad4..f00ae69e8a 100644
--- a/target/riscv/cpu.h
+++ b/target/riscv/cpu.h
@@ -225,9 +225,9 @@ struct CPUArchState {
     uint8_t vxsat;
     bool vill;
 
-    target_ulong pc;
-    target_ulong load_res;
-    target_ulong load_val;
+    uint64_t pc;
+    uint64_t load_res;
+    uint64_t load_val;
 
     /* Floating-Point state */
     uint64_t fpr[32]; /* assume both F and D extensions */
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index dc97d35458..353b927dd5 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -528,7 +528,7 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f, int flags)
         qemu_fprintf(f, " %s %d\n", "V      =  ", env->virt_enabled);
     }
 #endif
-    qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "pc      ", env->pc);
+    qemu_fprintf(f, " %s %" PRIx64 "\n", "pc      ", env->pc);
 #ifndef CONFIG_USER_ONLY
     {
         static const int dump_csrs[] = {
diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
index 1f791e4de3..e105dec426 100644
--- a/target/riscv/cpu_helper.c
+++ b/target/riscv/cpu_helper.c
@@ -2278,9 +2278,9 @@ void riscv_cpu_do_interrupt(CPUState *cs)
 
     qemu_log_mask(CPU_LOG_INT,
                   "%s: hart:%"PRIu64", async:%d, cause:"TARGET_FMT_lx", "
-                  "epc:0x"TARGET_FMT_lx", tval:0x"TARGET_FMT_lx", desc=%s\n",
-                  __func__, env->mhartid, async, cause, env->pc, tval,
-                  riscv_cpu_get_trap_name(cause, async));
+                  "epc:0x%"PRIx64", tval:0x"TARGET_FMT_lx", desc=%s\n",
+                  __func__, env->mhartid, async, cause, env->pc,
+                  tval, riscv_cpu_get_trap_name(cause, async));
 
     mode = env->priv <= PRV_S && cause < 64 &&
         (((deleg >> cause) & 1) || s_injected || vs_injected) ? PRV_S : PRV_M;
diff --git a/target/riscv/machine.c b/target/riscv/machine.c
index 440b09fc32..66ed3f6504 100644
--- a/target/riscv/machine.c
+++ b/target/riscv/machine.c
@@ -433,9 +433,9 @@ const VMStateDescription vmstate_riscv_cpu = {
         VMSTATE_UINT64_ARRAY(env.fpr, RISCVCPU, 32),
         VMSTATE_UINT8_ARRAY(env.miprio, RISCVCPU, 64),
         VMSTATE_UINT8_ARRAY(env.siprio, RISCVCPU, 64),
-        VMSTATE_UINTTL(env.pc, RISCVCPU),
-        VMSTATE_UINTTL(env.load_res, RISCVCPU),
-        VMSTATE_UINTTL(env.load_val, RISCVCPU),
+        VMSTATE_UINT64(env.pc, RISCVCPU),
+        VMSTATE_UINT64(env.load_res, RISCVCPU),
+        VMSTATE_UINT64(env.load_val, RISCVCPU),
         VMSTATE_UINTTL(env.frm, RISCVCPU),
         VMSTATE_UINTTL(env.badaddr, RISCVCPU),
         VMSTATE_UINTTL(env.guest_phys_fault_addr, RISCVCPU),
diff --git a/target/riscv/translate.c b/target/riscv/translate.c
index 15eee7f6ee..e82805e178 100644
--- a/target/riscv/translate.c
+++ b/target/riscv/translate.c
@@ -1459,6 +1459,10 @@ void riscv_translate_init(void)
     /* 32 bits in size, no offset needed */
     size_t vl_offset = offsetof(CPURISCVState, vl);
     size_t vstart_offset = offsetof(CPURISCVState, vstart);
+    /* 64 bits in size mapped to TCGv, needs offset */
+    size_t pc_offset     = offsetof(CPURISCVState, pc) + field_offset;
+    size_t res_offset    = offsetof(CPURISCVState, load_res) + field_offset;
+    size_t val_offset    = offsetof(CPURISCVState, load_val) + field_offset;
 
     for (i = 1; i < 32; i++) {
         cpu_gpr[i] = tcg_global_mem_new(tcg_env,
@@ -1474,11 +1478,9 @@ void riscv_translate_init(void)
             offsetof(CPURISCVState, fpr[i]), riscv_fpr_regnames[i]);
     }
 
-    cpu_pc = tcg_global_mem_new(tcg_env, offsetof(CPURISCVState, pc), "pc");
+    cpu_pc = tcg_global_mem_new(tcg_env, pc_offset, "pc");
     cpu_vl = tcg_global_mem_new_i32(tcg_env, vl_offset, "vl");
     cpu_vstart = tcg_global_mem_new_i32(tcg_env, vstart_offset, "vstart");
-    load_res = tcg_global_mem_new(tcg_env, offsetof(CPURISCVState, load_res),
-                             "load_res");
-    load_val = tcg_global_mem_new(tcg_env, offsetof(CPURISCVState, load_val),
-                             "load_val");
+    load_res = tcg_global_mem_new(tcg_env, res_offset, "load_res");
+    load_val = tcg_global_mem_new(tcg_env, val_offset, "load_val");
 }
-- 
2.51.0



  parent reply	other threads:[~2025-11-03 17:13 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-03 17:11 [PATCH v5 00/25] single-binary: Make riscv cpu.h target independent Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 01/25] target/riscv: Fix size of gpr and gprh Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 02/25] target/riscv: Fix size of vector CSRs Anton Johansson via
2025-11-03 17:11 ` Anton Johansson via [this message]
2025-11-03 17:11 ` [PATCH v5 04/25] target/riscv: Fix size of frm and fflags Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 05/25] target/riscv: Fix size of badaddr and bins Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 06/25] target/riscv: Fix size of guest_phys_fault_addr Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 07/25] target/riscv: Fix size of priv_ver and vext_ver Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 08/25] target/riscv: Fix size of retxh Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 09/25] target/riscv: Fix size of ssp Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 10/25] target/riscv: Fix size of excp_uw2 Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 11/25] target/riscv: Fix size of sw_check_code Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 12/25] target/riscv: Fix size of priv Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 13/25] target/riscv: Fix size of gei fields Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 14/25] target/riscv: Fix size of [m|s|vs]iselect fields Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 15/25] target/riscv: Fix arguments to board IMSIC emulation callbacks Anton Johansson via
2025-11-03 17:11 ` [PATCH v5 16/25] target/riscv: Fix size of irq_overflow_left Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 17/25] target/riscv: Indent PMUFixedCtrState correctly Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 18/25] target/riscv: Replace target_ulong in riscv_cpu_get_trap_name() Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 19/25] target/riscv: Replace target_ulong in riscv_ctr_add_entry() Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 20/25] target/riscv: Fix size of trigger data Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 21/25] target/riscv: Fix size of mseccfg Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 22/25] target/riscv: Move debug.h include away from cpu.h Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 23/25] target/riscv: Move CSR declarations to separate csr.h header Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 24/25] target/riscv: Introduce externally facing CSR access functions Anton Johansson via
2025-11-03 17:12 ` [PATCH v5 25/25] target/riscv: Make pmp.h target_ulong agnostic Anton Johansson via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251103171208.24355-4-anjo@rev.ng \
    --to=qemu-devel@nongnu.org \
    --cc=alistair.francis@wdc.com \
    --cc=anjo@rev.ng \
    --cc=palmer@dabbelt.com \
    --cc=philmd@linaro.org \
    --cc=pierrick.bouvier@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).