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.