On 1/9/23 13:05, ~dreiss-meta wrote:
From: David Reiss <dre...@meta.com>
Follows a fairly similar pattern to the existing special register debug
support. Only reading is implemented, but it should be possible to
implement writes.
`v7m_mrs_control` was renamed `arm_v7m_mrs_control` and made
non-static so this logic could be shared between the MRS instruction and
the GDB stub.
Signed-off-by: David Reiss <dre...@meta.com>
---
target/arm/cpu.h | 12 +++-
target/arm/gdbstub.c | 125 ++++++++++++++++++++++++++++++++++++++++++
target/arm/m_helper.c | 6 +-
3 files changed, 138 insertions(+), 5 deletions(-)
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index bf2bce046d..fdbb0d9107 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -856,6 +856,7 @@ struct ArchCPU {
DynamicGDBXMLInfo dyn_sysreg_xml;
DynamicGDBXMLInfo dyn_svereg_xml;
+ DynamicGDBXMLInfo dyn_m_systemreg_xml;
You don't need a new variable here, because a given cpu cannot be both a-profile and
m-profile -- dyn_sysreg_xml can hold the xml for the current set of system registers.
+ g_autoptr(GArray) regs = g_array_new(false, true, sizeof(const char *));
+ /* 0 */ g_array_append_str_literal(regs, "msp");
+ /* 1 */ g_array_append_str_literal(regs, "psp");
+ /* 2 */ g_array_append_str_literal(regs, "primask");
+ /* 3 */ g_array_append_str_literal(regs, is_main ? "basepri" : "");
+ /* 4 */ g_array_append_str_literal(regs, is_main ? "faultmask" : "");
+ /* 5 */ g_array_append_str_literal(regs, "control");
+ /* 6 */ g_array_append_str_literal(regs, is_v8 ? "msplim" : "");
+ /* 7 */ g_array_append_str_literal(regs, is_v8 ? "psplim" : "");
Can use NULL instead of ""?
Otherwise it looks plausible.
r~