Hi Gustavo,
On 15/5/24 19:31, Gustavo Romero wrote:
This commit implements the stubs to handle the qIsAddressTagged,
qMemTag, and QMemTag GDB packets, allowing all GDB 'memory-tag'
subcommands to work with QEMU gdbstub on aarch64 user mode. It also
implements the get/set function for the special GDB MTE register
'tag_ctl', used to control the MTE fault type at runtime.
Signed-off-by: Gustavo Romero <gustavo.rom...@linaro.org>
---
configs/targets/aarch64-linux-user.mak | 2 +-
target/arm/cpu.c | 1 +
target/arm/gdbstub.c | 321 +++++++++++++++++++++++++
target/arm/internals.h | 2 +
4 files changed, 325 insertions(+), 1 deletion(-)
+void arm_cpu_register_gdb_commands(ARMCPU *cpu)
+{
+ GArray *gdb_gen_query_table_arm =
+ g_array_new(FALSE, FALSE, sizeof(GdbCmdParseEntry));
+ GArray *gdb_gen_set_table_arm =
+ g_array_new(FALSE, FALSE, sizeof(GdbCmdParseEntry));
+ GString *supported_features = g_string_new(NULL);
+
+#ifdef TARGET_AARCH64
+#ifdef CONFIG_USER_ONLY
+ /* MTE */
+ if (isar_feature_aa64_mte(&cpu->isar)) {
Can we keep this code generic (not guarded by #ifdef'ry)? We
are protected by this isar_feature_aa64_mte() call to register
the MTE feature.
+ g_string_append(supported_features, ";memory-tagging+");
+
+ add_packet_handler(gdb_gen_query_table_arm, qMemTags);
+ add_packet_handler(gdb_gen_query_table_arm, qIsAddressTagged);
+
+ add_packet_handler(gdb_gen_set_table_arm, QMemTags);
+ }
+#endif
+#endif
+
+ /* Set arch-specific handlers for 'q' commands. */
+ if (gdb_gen_query_table_arm->len) {
+ set_gdb_gen_query_table_arch(&g_array_index(gdb_gen_query_table_arm,
+ GdbCmdParseEntry, 0),
+
gdb_gen_query_table_arm->len);
+ }
+
+ /* Set arch-specific handlers for 'Q' commands. */
+ if (gdb_gen_set_table_arm->len) {
+ set_gdb_gen_set_table_arch(&g_array_index(gdb_gen_set_table_arm,
+ GdbCmdParseEntry, 0),
+ gdb_gen_set_table_arm->len);
+ }
+
+ /* Set arch-specific qSupported feature. */
+ if (supported_features->len) {
+ set_query_supported_arch(supported_features->str);
+ }
+}