on 2024/6/1 01:32, Richard Henderson wrote:
On 5/31/24 03:17, NiuGenen wrote:
Signed-off-by: NiuGenen <niu...@loongson.cn>
---
  accel/tcg/cpu-exec.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
index 2972f75b96..084fa645c7 100644
--- a/accel/tcg/cpu-exec.c
+++ b/accel/tcg/cpu-exec.c
@@ -173,7 +173,7 @@ uint32_t curr_cflags(CPUState *cpu)
      } else if (qatomic_read(&one_insn_per_tb)) {
          cflags |= CF_NO_GOTO_TB | 1;
      } else if (qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
-        cflags |= CF_NO_GOTO_TB;
+        cflags |= CF_NO_GOTO_TB | CF_NO_GOTO_PTR;
      }
        return cflags;

Why?

The original intent of nochain was so that -d exec would log all blocks, which requires excluding goto_tb.  There is exec logging in helper_lookup_goto_ptr, so there is no need to avoid goto_ptr.

You must provide a rationale, at minimum.


r~


Sorry, my mistake. I thought nochain will disable all kinds of branches, including direct branch and indirect branch, but I found that indirect branch still call helper_lookup_tb_ptr to continue executing TB instead of epilogue-tblookup-prologue.

Maybe the exec logging can be removed from helper_lookup_tb_ptr and nochain can disable all the chaining of TB?

Thanks for your patience.


Reply via email to