[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] armv7m_nvic: set DHCSR.DEBUGEN when debugger is attached
From: |
Valentin Ghita |
Subject: |
[PATCH] armv7m_nvic: set DHCSR.DEBUGEN when debugger is attached |
Date: |
Thu, 3 Feb 2022 15:53:04 +0000 |
The DEBUGEN bit is set by the debugger when it is connected to the
core. Software can use this bit to check if a debug session is active.
Add a function in gdbstub to check if the debugger is attached to a CPU
and use this information when the DHCSR register is read in armv7m_nvic.
Signed-off-by: Valentin Ghita <valentinghita@google.com>
---
gdbstub.c | 10 ++++++++++
hw/intc/armv7m_nvic.c | 4 ++++
include/exec/gdbstub.h | 6 ++++++
3 files changed, 20 insertions(+)
diff --git a/gdbstub.c b/gdbstub.c
index 3c14c6a038..d4e39db8e7 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -3585,6 +3585,16 @@ int gdbserver_start(const char *device)
return 0;
}
+bool gdb_attached(CPUState *cpu)
+{
+ GDBProcess *process = gdb_get_cpu_process(cpu);
+ if (process != NULL) {
+ return process->attached;
+ }
+
+ return false;
+}
+
static void register_types(void)
{
type_register_static(&char_gdb_type_info);
diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c
index 13df002ce4..d6fff94bca 100644
--- a/hw/intc/armv7m_nvic.c
+++ b/hw/intc/armv7m_nvic.c
@@ -21,6 +21,7 @@
#include "sysemu/runstate.h"
#include "target/arm/cpu.h"
#include "exec/exec-all.h"
+#include "exec/gdbstub.h"
#include "exec/memop.h"
#include "qemu/log.h"
#include "qemu/module.h"
@@ -1510,6 +1511,9 @@ static uint32_t nvic_readl(NVICState *s, uint32_t offset,
MemTxAttrs attrs)
}
/* We provide minimal-RAS only: RFSR is RAZ/WI */
return 0;
+ case 0xdf0: /* DHCSR */
+ /* Bit 0: DEBUGEN. */
+ return gdb_attached(CPU(cpu)) ? 1 : 0;
case 0xf34: /* FPCCR */
if (!cpu_isar_feature(aa32_vfp_simd, cpu)) {
return 0;
diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h
index a024a0350d..383f4e5224 100644
--- a/include/exec/gdbstub.h
+++ b/include/exec/gdbstub.h
@@ -177,6 +177,12 @@ static inline uint8_t * gdb_get_reg_ptr(GByteArray *buf,
int len)
*/
int gdbserver_start(const char *port_or_device);
+/**
+ * gdb_attached: check if GDB is attached to a given CPU.
+ * @cpu: the CPU to check if GDB is attached to.
+ */
+bool gdb_attached(CPUState *cpu);
+
/**
* gdb_has_xml:
* This is an ugly hack to cope with both new and old gdb.
--
2.35.0.263.gb82422642f-goog
- [PATCH] armv7m_nvic: set DHCSR.DEBUGEN when debugger is attached,
Valentin Ghita <=