Signed-off-by: Manos Pitsidianakis <manos.pitsidiana...@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