Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
---
gdb-xml/aarch64-core.xml | 6 ++++++
target/arm/gdbstub64.c | 8 ++++++++
2 files changed, 14 insertions(+)
diff --git a/gdb-xml/aarch64-core.xml b/gdb-xml/aarch64-core.xml
index dffc92303fc7b7e8221cf6afd6009101f34352ed..42793f063d9a9180d6233376a03835238c4a9c53 100644
--- a/gdb-xml/aarch64-core.xml
+++ b/gdb-xml/aarch64-core.xml
@@ -120,4 +120,10 @@
<field name="D" start="9" end="9"/>
</flags>
<reg name="DAIF" bitsize="64" type="daif_flags"/>
+
+ <flags id="spsel_flags" size="8">
+ <!-- Stack Pointer. -->
+ <field name="SP" start="0" end="0"/>
+ </flags>
+ <reg name="SPSel" bitsize="64" type="spsel_flags"/>
</feature>
diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c
index 6c424ed361e32e12836c6ef00a06397bd684bac4..143e2b104f961da603404cdfb5247b044f0e84cd 100644
--- a/target/arm/gdbstub64.c
+++ b/target/arm/gdbstub64.c
@@ -57,6 +57,9 @@ int aarch64_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
case 36:
/* DAIF */
return gdb_get_reg64(mem_buf, env->daif);
+ case 37:
+ /* SPSel */
+ return gdb_get_reg64(mem_buf, env->pstate & PSTATE_SP);
}
/* Unknown register. */
return 0;
@@ -98,6 +101,11 @@ int aarch64_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
/* DAIF */
env->daif = tmp & PSTATE_DAIF;
return 8;
+ case 37:
+ /* SPSel */
+ tmp = (pstate_read(env) & ~PSTATE_SP) | (tmp & PSTATE_SP);
+ pstate_write(env, tmp);
+ return 8;
}
/* Unknown register. */
return 0;
--
2.47.2