diff options
author | Daniel Henrique Barboza <dbarboza@ventanamicro.com> | 2025-01-21 14:06:26 -0300 |
---|---|---|
committer | Alistair Francis <alistair.francis@wdc.com> | 2025-03-04 15:42:54 +1000 |
commit | c86edc547692d812d1dcc04220c38310be2c00c3 (patch) | |
tree | aee21bade25a0d83c30a6f079e8361edb96e992d /tests/functional/qemu_test | |
parent | 3fba76e61caa46329afc399b3ecaaba70c8b0a4e (diff) | |
download | qemu-c86edc547692d812d1dcc04220c38310be2c00c3.zip qemu-c86edc547692d812d1dcc04220c38310be2c00c3.tar.gz qemu-c86edc547692d812d1dcc04220c38310be2c00c3.tar.bz2 |
target/riscv: throw debug exception before page fault
In the RISC-V privileged ISA section 3.1.15 table 15, it is determined
that a debug exception that is triggered from a load/store has a higher
priority than a possible fault that this access might trigger.
This is not the case ATM as shown in [1]. Adding a breakpoint in an
address that deliberately will fault is causing a load page fault
instead of a debug exception. The reason is that we're throwing in the
page fault as soon as the fault occurs (end of riscv_cpu_tlb_fill(),
raise_mmu_exception()), not allowing the installed watchpoints to
trigger.
Call cpu_check_watchpoint() in the page fault path to search and execute
any watchpoints that might exist for the address, never returning back
to the fault path. If no watchpoints are found cpu_check_watchpoint()
will return and we'll fall-through the regular path to
raise_mmu_exception().
[1] https://gitlab.com/qemu-project/qemu/-/issues/2627
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2627
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20250121170626.1992570-3-dbarboza@ventanamicro.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Diffstat (limited to 'tests/functional/qemu_test')
0 files changed, 0 insertions, 0 deletions