On 8/29/24 03:47, Deepak Gupta wrote:
--- a/target/riscv/cpu_helper.c
+++ b/target/riscv/cpu_helper.c
@@ -169,6 +169,10 @@ void cpu_get_tb_cpu_state(CPURISCVState *env, vaddr *pc,
          flags = FIELD_DP32(flags, TB_FLAGS, FCFI_ENABLED, 1);
      }
+ if (cpu_get_bcfien(env)) {
+        flags = FIELD_DP32(flags, TB_FLAGS, BCFI_ENABLED, 1);
+    }
+
  #ifdef CONFIG_USER_ONLY
      fs = EXT_STATUS_DIRTY;
      vs = EXT_STATUS_DIRTY;
...
@@ -1241,6 +1243,8 @@ static void riscv_tr_init_disas_context(DisasContextBase 
*dcbase, CPUState *cs)
      ctx->pm_base_enabled = FIELD_EX32(tb_flags, TB_FLAGS, PM_BASE_ENABLED);
      ctx->ztso = cpu->cfg.ext_ztso;
      ctx->itrigger = FIELD_EX32(tb_flags, TB_FLAGS, ITRIGGER);
+    ctx->bcfi_enabled = cpu_get_bcfien(env) &&
+                        FIELD_EX32(tb_flags, TB_FLAGS, BCFI_ENABLED);
The call to cpu_get_bcfien here is wrong -- only test TB_FLAGS.
(1) The compile-time check vs env is incorrect,
(2) You've already done the check in cpu_get_tb_cpu_state.


r~

Reply via email to