On 7/10/2026 5:48 PM, Philippe Mathieu-Daudé wrote:
Hi Brian,

On 10/7/26 01:34, Brian Cain wrote:
hexagon-linux-user had no enforcement of alignment for scalar store
exceptions, and unaligned stores silently succeeded instead of raising
SIGBUS.

Stores are logged rather than committed immediately, so both commit
paths need the fix.

Signed-off-by: Brian Cain <[email protected]>
---
  target/hexagon/genptr.c    |  4 ++--
  target/hexagon/op_helper.c | 13 ++++++++++---
  target/hexagon/translate.c |  6 +++---
  3 files changed, 15 insertions(+), 8 deletions(-)


diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c
index 125952aee59..3ce223caba3 100644
--- a/target/hexagon/op_helper.c
+++ b/target/hexagon/op_helper.c
@@ -95,19 +95,26 @@ static void commit_store(CPUHexagonState *env, int slot_num, uintptr_t ra)
  {
      uint32_t width = env->mem_log_stores[slot_num].width;
      target_ulong va = env->mem_log_stores[slot_num].va;
+    MemOpIdx oi;
        switch (width) {
      case 1:
          cpu_stb_data_ra(env, va, env->mem_log_stores[slot_num].data32, ra);
          break;
      case 2:
-        cpu_stw_le_data_ra(env, va, env->mem_log_stores[slot_num].data32, ra);
+        oi = make_memop_idx(MO_LEUW | MO_ALIGN,
+                            cpu_mmu_index(env_cpu(env), false));
+        cpu_stw_mmu(env, va, env->mem_log_stores[slot_num].data32, oi, ra);
          break;
      case 4:
-        cpu_stl_le_data_ra(env, va, env->mem_log_stores[slot_num].data32, ra);
+        oi = make_memop_idx(MO_LEUL | MO_ALIGN,
+                            cpu_mmu_index(env_cpu(env), false));
+        cpu_stl_mmu(env, va, env->mem_log_stores[slot_num].data32, oi, ra);
          break;
      case 8:
-        cpu_stq_le_data_ra(env, va, env->mem_log_stores[slot_num].data64, ra);
+        oi = make_memop_idx(MO_LEUQ | MO_ALIGN,
+                            cpu_mmu_index(env_cpu(env), false));
+        cpu_stq_mmu(env, va, env->mem_log_stores[slot_num].data64, oi, ra);
          break;
Thanks for the API conversion :)

Consider enabling TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API in
configs/targets/ (I missed that when you merged the system emulation
part).


TARGET_NOT_USING_LEGACY_NATIVE_ENDIAN_API was in "target/hexagon: add build config for softmmu" (you indeed caught it ;).


-Brian


Reply via email to