[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 07/43] tcg: Add in_code_gen_buffer
From: |
Richard Henderson |
Subject: |
[PATCH v5 07/43] tcg: Add in_code_gen_buffer |
Date: |
Tue, 5 Jan 2021 07:19:14 -1000 |
Create a function to determine if a pointer is within the buffer.
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/tcg/tcg.h | 11 +++++++++++
accel/tcg/translate-all.c | 26 ++++++++------------------
2 files changed, 19 insertions(+), 18 deletions(-)
diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
index bb1e97b13b..ef571b6f3e 100644
--- a/include/tcg/tcg.h
+++ b/include/tcg/tcg.h
@@ -680,6 +680,17 @@ extern __thread TCGContext *tcg_ctx;
extern void *tcg_code_gen_epilogue;
extern TCGv_env cpu_env;
+static inline bool in_code_gen_buffer(const void *p)
+{
+ const TCGContext *s = &tcg_init_ctx;
+ /*
+ * Much like it is valid to have a pointer to the byte past the
+ * end of an array (so long as you don't dereference it), allow
+ * a pointer to the byte past the end of the code gen buffer.
+ */
+ return (size_t)(p - s->code_gen_buffer) <= s->code_gen_buffer_size;
+}
+
static inline size_t temp_idx(TCGTemp *ts)
{
ptrdiff_t n = ts - tcg_ctx->temps;
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index b7d50a73d4..9f5879b63f 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -392,27 +392,18 @@ void tb_destroy(TranslationBlock *tb)
bool cpu_restore_state(CPUState *cpu, uintptr_t host_pc, bool will_exit)
{
- TranslationBlock *tb;
- bool r = false;
- uintptr_t check_offset;
-
- /* The host_pc has to be in the region of current code buffer. If
- * it is not we will not be able to resolve it here. The two cases
- * where host_pc will not be correct are:
+ /*
+ * The host_pc has to be in the region of the code buffer.
+ * If it is not we will not be able to resolve it here.
+ * The two cases where host_pc will not be correct are:
*
* - fault during translation (instruction fetch)
* - fault from helper (not using GETPC() macro)
*
* Either way we need return early as we can't resolve it here.
- *
- * We are using unsigned arithmetic so if host_pc <
- * tcg_init_ctx.code_gen_buffer check_offset will wrap to way
- * above the code_gen_buffer_size
*/
- check_offset = host_pc - (uintptr_t) tcg_init_ctx.code_gen_buffer;
-
- if (check_offset < tcg_init_ctx.code_gen_buffer_size) {
- tb = tcg_tb_lookup(host_pc);
+ if (in_code_gen_buffer((const void *)host_pc)) {
+ TranslationBlock *tb = tcg_tb_lookup(host_pc);
if (tb) {
cpu_restore_state_from_tb(cpu, tb, host_pc, will_exit);
if (tb_cflags(tb) & CF_NOCACHE) {
@@ -421,11 +412,10 @@ bool cpu_restore_state(CPUState *cpu, uintptr_t host_pc,
bool will_exit)
tcg_tb_remove(tb);
tb_destroy(tb);
}
- r = true;
+ return true;
}
}
-
- return r;
+ return false;
}
static void page_init(void)
--
2.25.1
- [PATCH v5 00/43] Mirror map JIT memory for TCG, Richard Henderson, 2021/01/05
- [PATCH v5 01/43] tcg: Do not flush icache for interpreter, Richard Henderson, 2021/01/05
- [PATCH v5 03/43] util: Enhance flush_icache_range with separate data pointer, Richard Henderson, 2021/01/05
- [PATCH v5 02/43] util: Extract flush_icache_range to cacheflush.c, Richard Henderson, 2021/01/05
- [PATCH v5 05/43] tcg: Move tcg prologue pointer out of TCGContext, Richard Henderson, 2021/01/05
- [PATCH v5 04/43] util: Specialize flush_idcache_range for aarch64, Richard Henderson, 2021/01/05
- [PATCH v5 07/43] tcg: Add in_code_gen_buffer,
Richard Henderson <=
- [PATCH v5 06/43] tcg: Move tcg epilogue pointer out of TCGContext, Richard Henderson, 2021/01/05
- [PATCH v5 09/43] tcg: Adjust TCGLabel for const, Richard Henderson, 2021/01/05
- [PATCH v5 11/43] tcg: Adjust tcg_out_label for const, Richard Henderson, 2021/01/05
- [PATCH v5 14/43] tcg: Make DisasContextBase.tb const, Richard Henderson, 2021/01/05
- [PATCH v5 13/43] tcg: Adjust tb_target_set_jmp_target for split-wx, Richard Henderson, 2021/01/05
- [PATCH v5 21/43] tcg/i386: Support split-wx code generation, Richard Henderson, 2021/01/05
- [PATCH v5 12/43] tcg: Adjust tcg_register_jit for const, Richard Henderson, 2021/01/05
- [PATCH v5 15/43] tcg: Make tb arg to synchronize_from_tb const, Richard Henderson, 2021/01/05
- [PATCH v5 20/43] tcg: Return the TB pointer from the rx region from exit_tb, Richard Henderson, 2021/01/05
- [PATCH v5 08/43] tcg: Introduce tcg_splitwx_to_{rx,rw}, Richard Henderson, 2021/01/05