Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
---
gdb-xml/aarch64-core.xml | 14 +++++++++++++-
target/arm/gdbstub64.c | 8 ++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/gdb-xml/aarch64-core.xml b/gdb-xml/aarch64-core.xml
index 19ad743dc5607b4021fb795bfb9b8e9cf0adef68..2b74b87f908f792c24f76f212e4f7eaf335ddbc2 100644
--- a/gdb-xml/aarch64-core.xml
+++ b/gdb-xml/aarch64-core.xml
@@ -95,5 +95,17 @@
<!-- Exception Level. -->
<field name="EL" start="2" end="3"/>
</flags>
- <reg name="CurrentEL" bitsize="64" type="current_el"/>
+ <reg name="CurrentEL" bitsize="64" type="current_el_flags"/>
+
+ <flags id="nzcv_flags" size="8">
+ <!-- Overflow Condition flag. -->
+ <field name="V" start="28" end="28"/>
+ <!-- Carry Condition flag. -->
+ <field name="C" start="29" end="29"/>
+ <!-- Zero Condition flag. -->
+ <field name="Z" start="30" end="30"/>
+ <!-- Negative Condition flag. -->
+ <field name="N" start="31" end="31"/>
+ </flags>
+ <reg name="NZCV" bitsize="64" type="nzcv_flags"/>
</feature>
diff --git a/target/arm/gdbstub64.c b/target/arm/gdbstub64.c
index 16b564e1a970cb5e854a705619f71ffc61545a73..dd3c6222a577efa03753cf07371afdedeefdb771 100644
--- a/target/arm/gdbstub64.c
+++ b/target/arm/gdbstub64.c
@@ -51,6 +51,9 @@ int aarch64_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
case 34:
/* CurrentEL */
return gdb_get_reg64(mem_buf, env->pstate & PSTATE_EL);
+ case 35:
+ /* NZCV */
+ return gdb_get_reg64(mem_buf, pstate_read(env) & PSTATE_NZCV);
}
/* Unknown register. */
return 0;
@@ -83,6 +86,11 @@ int aarch64_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
case 34:
/* CurrentEL */
return 0;
+ case 35:
+ /* NZCV */
+ tmp = (pstate_read(env) & ~PSTATE_NZCV) | (tmp & PSTATE_NZCV);
+ pstate_write(env, tmp);
+ return 8;
}
/* Unknown register. */
return 0;
--
2.47.2