From c915d13cce00588c5d87a6d1ad0db46de38482ec Mon Sep 17 00:00:00 2001 From: mio Date: Mon, 10 Feb 2025 21:35:17 +0800 Subject: [PATCH] Fix pc issue of tcg opcode hooks --- qemu/target/arm/translate.c | 1 + tests/unit/test_arm.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/qemu/target/arm/translate.c b/qemu/target/arm/translate.c index 624d784e..b68040e0 100644 --- a/qemu/target/arm/translate.c +++ b/qemu/target/arm/translate.c @@ -11598,6 +11598,7 @@ static void thumb_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu) check_exit_request(tcg_ctx); } + tcg_ctx->pc_start = dc->base.pc_next - insn_size; if (is_16bit) { disas_thumb_insn(dc, insn); } else { diff --git a/tests/unit/test_arm.c b/tests/unit/test_arm.c index 8bfb45a9..da8e5633 100644 --- a/tests/unit/test_arm.c +++ b/tests/unit/test_arm.c @@ -902,7 +902,7 @@ static void test_arm_tcg_opcode_cmp(void) OK(uc_emu_start(uc, code_start, code_start + sizeof(code) - 1, 0, 3)); TEST_CHECK(cmp_info.v0 == 5 && cmp_info.v1 == 3); - TEST_CHECK(cmp_info.pc == code_start); + TEST_CHECK(cmp_info.pc == 0x1008); TEST_CHECK(cmp_info.size == 32); } @@ -928,7 +928,7 @@ static void test_arm_thumb_tcg_opcode_cmn(void) OK(uc_emu_start(uc, code_start | 1, code_start + sizeof(code) - 1, 0, 4)); TEST_CHECK(cmp_info.v0 == 5 && cmp_info.v1 == 3); - TEST_CHECK(cmp_info.pc == (code_start | 1)); + TEST_CHECK(cmp_info.pc == 0x1006); TEST_CHECK(cmp_info.size == 32); }