[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 05/26] gdbstub: Use specific MMU index when probing MTE addresses
From: |
Alex Bennée |
Subject: |
[PATCH 05/26] gdbstub: Use specific MMU index when probing MTE addresses |
Date: |
Tue, 10 Sep 2024 15:07:12 +0100 |
From: Gustavo Romero <gustavo.romero@linaro.org>
Use cpu_mmu_index() to determine the specific translation regime (MMU
index) before probing addresses using allocation_tag_mem_probe().
Currently, the MMU index is hardcoded to 0 and only works for user mode.
By obtaining the specific MMU index according to the translation regime,
future use of the stubs relying on allocation_tag_mem_probe in other
regimes will be possible, like in EL1.
This commit also changes the ptr_size value passed to
allocation_tag_mem_probe() from 8 to 1. The ptr_size parameter actually
represents the number of bytes in the memory access (which can be as
small as 1 byte), rather than the number of bits used in the address
space pointed to by ptr.
Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20240906143316.657436-2-gustavo.romero@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
target/arm/gdbstub64.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c
index 5221381cc8..85a19c14c7 100644
--- a/target/arm/gdbstub64.c
+++ b/target/arm/gdbstub64.c
@@ -435,6 +435,7 @@ static void handle_q_memtag(GArray *params, void *user_ctx)
{
ARMCPU *cpu = ARM_CPU(user_ctx);
CPUARMState *env = &cpu->env;
+ uint32_t mmu_index;
uint64_t addr = gdb_get_cmd_param(params, 0)->val_ull;
uint64_t len = gdb_get_cmd_param(params, 1)->val_ul;
@@ -458,8 +459,10 @@ static void handle_q_memtag(GArray *params, void *user_ctx)
gdb_put_packet("E03");
}
+ /* Find out the current translation regime for probe. */
+ mmu_index = cpu_mmu_index(env_cpu(env), false);
/* Note that tags are packed here (2 tags packed in one byte). */
- tags = allocation_tag_mem_probe(env, 0, addr, MMU_DATA_LOAD, 8 /* 64-bit
*/,
+ tags = allocation_tag_mem_probe(env, mmu_index, addr, MMU_DATA_LOAD, 1,
MMU_DATA_LOAD, true, 0);
if (!tags) {
/* Address is not in a tagged region. */
@@ -478,13 +481,16 @@ static void handle_q_isaddresstagged(GArray *params, void
*user_ctx)
{
ARMCPU *cpu = ARM_CPU(user_ctx);
CPUARMState *env = &cpu->env;
+ uint32_t mmu_index;
uint64_t addr = gdb_get_cmd_param(params, 0)->val_ull;
uint8_t *tags;
const char *reply;
- tags = allocation_tag_mem_probe(env, 0, addr, MMU_DATA_LOAD, 8 /* 64-bit
*/,
+ /* Find out the current translation regime for probe. */
+ mmu_index = cpu_mmu_index(env_cpu(env), false);
+ tags = allocation_tag_mem_probe(env, mmu_index, addr, MMU_DATA_LOAD, 1,
MMU_DATA_LOAD, true, 0);
reply = tags ? "01" : "00";
@@ -495,6 +501,7 @@ static void handle_Q_memtag(GArray *params, void *user_ctx)
{
ARMCPU *cpu = ARM_CPU(user_ctx);
CPUARMState *env = &cpu->env;
+ uint32_t mmu_index;
uint64_t start_addr = gdb_get_cmd_param(params, 0)->val_ull;
uint64_t len = gdb_get_cmd_param(params, 1)->val_ul;
@@ -527,8 +534,10 @@ static void handle_Q_memtag(GArray *params, void *user_ctx)
* Get all tags in the page starting from the tag of the start address.
* Note that there are two tags packed into a single byte here.
*/
- tags = allocation_tag_mem_probe(env, 0, start_addr, MMU_DATA_STORE,
- 8 /* 64-bit */, MMU_DATA_STORE, true, 0);
+ /* Find out the current translation regime for probe. */
+ mmu_index = cpu_mmu_index(env_cpu(env), false);
+ tags = allocation_tag_mem_probe(env, mmu_index, start_addr, MMU_DATA_STORE,
+ 1, MMU_DATA_STORE, true, 0);
if (!tags) {
/* Address is not in a tagged region. */
gdb_put_packet("E04");
--
2.39.2
- [PATCH 00/26] Maintainer updates (testing, gdbstub, plugins), Alex Bennée, 2024/09/10
- [PATCH 01/26] tests/docker: remove debian-armel-cross, Alex Bennée, 2024/09/10
- [PATCH 04/26] scripts/ci: update the gitlab-runner playbook, Alex Bennée, 2024/09/10
- [PATCH 03/26] docs/devel: fix duplicate line, Alex Bennée, 2024/09/10
- [PATCH 06/26] gdbstub: Add support for MTE in system mode, Alex Bennée, 2024/09/10
- [PATCH 02/26] tests/docker: update debian i686 and mipsel images to bookworm, Alex Bennée, 2024/09/10
- [PATCH 05/26] gdbstub: Use specific MMU index when probing MTE addresses,
Alex Bennée <=
- [PATCH 08/26] tests/tcg/aarch64: Improve linker script organization, Alex Bennée, 2024/09/10
- [PATCH 07/26] tests/guest-debug: Support passing arguments to the GDB test script, Alex Bennée, 2024/09/10
- [PATCH 10/26] contrib/plugins/Makefile: Add a 'distclean' target, Alex Bennée, 2024/09/10
- [PATCH 09/26] tests/tcg/aarch64: Extend MTE gdbstub tests to system mode, Alex Bennée, 2024/09/10
- [PATCH 11/26] deprecation: don't enable TCG plugins by default on 32 bit hosts, Alex Bennée, 2024/09/10
- [PATCH 16/26] tests/tcg: add mechanism to run specific tests with plugins, Alex Bennée, 2024/09/10
- [PATCH 15/26] plugins: extend API to get latest memory value accessed, Alex Bennée, 2024/09/10
- [PATCH 17/26] tests/tcg: allow to check output of plugins, Alex Bennée, 2024/09/10
- [PATCH 14/26] plugins: save value during memory accesses, Alex Bennée, 2024/09/10