On 04/26/2017 12:29 PM, Alex Bennée wrote:
Emilio G. Cota <c...@braap.org> writes:
This paves the way for upcoming work.
Reviewed-by: Richard Henderson <r...@twiddle.net>
Signed-off-by: Emilio G. Cota <c...@braap.org>
---
tcg-runtime.c | 21 +++++++++++++++++++++
tcg/tcg-runtime.h | 2 ++
tcg/tcg.h | 1 +
3 files changed, 24 insertions(+)
diff --git a/tcg-runtime.c b/tcg-runtime.c
index 4c60c96..90d2d4b 100644
--- a/tcg-runtime.c
+++ b/tcg-runtime.c
@@ -27,6 +27,7 @@
#include "exec/helper-proto.h"
#include "exec/cpu_ldst.h"
#include "exec/exec-all.h"
+#include "exec/tb-hash.h"
/* 32-bit helpers */
@@ -141,6 +142,26 @@ uint64_t HELPER(ctpop_i64)(uint64_t arg)
return ctpop64(arg);
}
+void *HELPER(lookup_tb_ptr)(CPUArchState *env, target_ulong addr)
+{
+ CPUState *cpu = ENV_GET_CPU(env);
+ TranslationBlock *tb;
+ target_ulong cs_base, pc;
+ uint32_t flags;
+
+ if (unlikely(atomic_read(&cpu->exit_request))) {
+ goto out_epilogue;
+ }
+ cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags);
+ tb = atomic_rcu_read(&cpu->tb_jmp_cache[tb_jmp_cache_hash_func(addr)]);
+ if (likely(tb && tb->pc == addr && tb->cs_base == cs_base &&
+ tb->flags == flags)) {
Should we also not be checking the TB hasn't been invalidated: tb->invalid?
We don't check in tb_find.
I guess we're assuming that such have been purged from the tb_jmp_cache. That
said, tb_phys_invalidate assumes tb_locked, and I don't immediately remember
how all that is supposed to tie together.
r~