[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH for-6.1 v5 12/15] accel/tcg: Move breakpoint recognition outs
From: |
Alex Bennée |
Subject: |
Re: [PATCH for-6.1 v5 12/15] accel/tcg: Move breakpoint recognition outside translation |
Date: |
Tue, 20 Jul 2021 17:12:21 +0100 |
User-agent: |
mu4e 1.5.14; emacs 28.0.50 |
Richard Henderson <richard.henderson@linaro.org> writes:
> Trigger breakpoints before beginning translation of a TB
> that would begin with a BP. Thus we never generate code
> for the BP at all.
>
> Single-step instructions within a page containing a BP so
> that we are sure to check each insn for the BP as above.
>
> We no longer need to flush any TBs when changing BPs.
>
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/286
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/404
> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/489
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
However...
>
> +static bool check_for_breakpoints(CPUState *cpu, target_ulong pc,
> + uint32_t *cflags)
> +{
> + CPUBreakpoint *bp;
> + bool match_page = false;
> +
> + if (likely(QTAILQ_EMPTY(&cpu->breakpoints))) {
> + return false;
> + }
> +
> + QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) {
> + /*
> + * If we have an exact pc match, trigger the breakpoint.
> + * Otherwise, note matches within the page.
> + */
> + if (pc == bp->pc) {
> + bool match_bp = false;
> +
> + if (bp->flags & BP_GDB) {
> + match_bp = true;
> + } else if (bp->flags & BP_CPU) {
> +#ifdef CONFIG_USER_ONLY
> + g_assert_not_reached();
> +#else
> + CPUClass *cc = CPU_GET_CLASS(cpu);
> + assert(cc->tcg_ops->debug_check_breakpoint);
> + match_bp = cc->tcg_ops->debug_check_breakpoint(cpu);
> +#endif
> + }
> +
> + if (match_bp) {
> + cpu->exception_index = EXCP_DEBUG;
> + return true;
> + }
> + } else if (((pc ^ bp->pc) & TARGET_PAGE_MASK) == 0) {
> + match_page = true;
> + }
> + }
> +
> + /*
> + * Within the same page as a breakpoint, single-step,
> + * returning to helper_lookup_tb_ptr after each looking
> + * for the actual breakpoint.
> + *
> + * TODO: Perhaps better to record all of the TBs associated
> + * with a given virtual page that contains a breakpoint, and
> + * then invalidate them when a new overlapping breakpoint is
> + * set on the page. Non-overlapping TBs would not be
> + * invalidated, nor would any TB need to be invalidated as
> + * breakpoints are removed.
> + */
> + if (match_page) {
> + *cflags = (*cflags & ~CF_COUNT_MASK) | CF_NO_GOTO_TB | 1;
> + }
> + return false;
> +}
> +
This seems to have a really negative effect on:
./tests/venv/bin/avocado run
tests/acceptance/reverse_debugging.py:ReverseDebugging_AArch64.test_aarch64_virt
Even bumping the timeout up from 10 to 300 isn't enough to get it
working. I'm not sure if this is a time or a hang.
--
Alex Bennée
- [PATCH for-6.1 v5 03/15] target/alpha: Drop goto_tb path in gen_call_pal, (continued)
- [PATCH for-6.1 v5 03/15] target/alpha: Drop goto_tb path in gen_call_pal, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 04/15] accel/tcg: Add CF_NO_GOTO_TB and CF_NO_GOTO_PTR, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 05/15] accel/tcg: Drop CF_NO_GOTO_PTR from -d nochain, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 06/15] accel/tcg: Handle -singlestep in curr_cflags, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 07/15] accel/tcg: Use CF_NO_GOTO_{TB, PTR} in cpu_exec_step_atomic, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 11/15] accel/tcg: Merge tb_find into its only caller, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 12/15] accel/tcg: Move breakpoint recognition outside translation, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 09/15] target/arm: Implement debug_check_breakpoint, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 10/15] target/i386: Implement debug_check_breakpoint, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 15/15] accel/tcg: Record singlestep_enabled in tb->cflags, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 13/15] accel/tcg: Remove TranslatorOps.breakpoint_check, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 08/15] hw/core: Introduce TCGCPUOps.debug_check_breakpoint, Richard Henderson, 2021/07/19
- [PATCH for-6.1 v5 14/15] accel/tcg: Hoist tb_cflags to a local in translator_loop, Richard Henderson, 2021/07/19