[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 07/43] tcg: Add in_code_gen_buffer
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH v4 07/43] tcg: Add in_code_gen_buffer |
Date: |
Mon, 14 Dec 2020 23:09:38 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 |
On 12/14/20 3:02 PM, Richard Henderson wrote:
> Create a function to determine if a pointer is within the buffer.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> include/tcg/tcg.h | 6 ++++++
> accel/tcg/translate-all.c | 26 ++++++++------------------
> 2 files changed, 14 insertions(+), 18 deletions(-)
>
> diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
> index bb1e97b13b..e4d0ace44b 100644
> --- a/include/tcg/tcg.h
> +++ b/include/tcg/tcg.h
> @@ -680,6 +680,12 @@ 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;
> + return (size_t)(p - s->code_gen_buffer) <= s->code_gen_buffer_size;
If 'p == s->code_gen_buffer + s->code_gen_buffer_size',
is it really "in" the buffer?
> +}
> +
> 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 4572b4901f..744f97a717 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)
>
- [PATCH v4 04/43] util: Specialize flush_idcache_range for aarch64, (continued)
- [PATCH v4 04/43] util: Specialize flush_idcache_range for aarch64, Richard Henderson, 2020/12/14
- [PATCH v4 01/43] tcg: Do not flush icache for interpreter, Richard Henderson, 2020/12/14
- [PATCH v4 05/43] tcg: Move tcg prologue pointer out of TCGContext, Richard Henderson, 2020/12/14
- [PATCH v4 06/43] tcg: Move tcg epilogue pointer out of TCGContext, Richard Henderson, 2020/12/14
- [PATCH v4 07/43] tcg: Add in_code_gen_buffer, Richard Henderson, 2020/12/14
- Re: [PATCH v4 07/43] tcg: Add in_code_gen_buffer,
Philippe Mathieu-Daudé <=
- [PATCH v4 08/43] tcg: Introduce tcg_splitwx_to_{rx,rw}, Richard Henderson, 2020/12/14
- [PATCH v4 11/43] tcg: Adjust tcg_out_label for const, Richard Henderson, 2020/12/14
- [PATCH v4 12/43] tcg: Adjust tcg_register_jit for const, Richard Henderson, 2020/12/14
- [PATCH v4 09/43] tcg: Adjust TCGLabel for const, Richard Henderson, 2020/12/14
- [PATCH v4 14/43] tcg: Make DisasContextBase.tb const, Richard Henderson, 2020/12/14
- [PATCH v4 10/43] tcg: Adjust tcg_out_call for const, Richard Henderson, 2020/12/14