aboutsummaryrefslogtreecommitdiff
path: root/gdbstub.c
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2013-05-13 22:32:53 -0600
committerPeter Maydell <peter.maydell@linaro.org>2013-05-20 19:13:22 +0100
commit575ffffcbf6763fc09e844fb5930b0b8e2d63b94 (patch)
tree3b5224eb5e9623fc5a02573755ba40ab76bd12b2 /gdbstub.c
parent4092486d31433d62cae17687aa3db3167f0983d6 (diff)
AArch64: Add gdb stub
We want to be able to debug AArch64 guests. So let's add the respective gdb stub functions and xml descriptions that allow us to do so. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: John Rigby <john.rigby@linaro.org> Message-id: 1368505980-17151-6-git-send-email-john.rigby@linaro.org
Diffstat (limited to 'gdbstub.c')
-rw-r--r--gdbstub.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/gdbstub.c b/gdbstub.c
index e80e1d32b1..e85f34a0af 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -935,6 +935,59 @@ static int cpu_gdb_write_register(CPUSPARCState *env, uint8_t *mem_buf, int n)
return 8;
#endif
}
+#elif defined(TARGET_AARCH64)
+
+#define NUM_CORE_REGS 34
+#define GDB_CORE_XML "aarch64-core.xml"
+
+static int cpu_gdb_read_register(CPUARMState *env, uint8_t *mem_buf, int n)
+{
+ if (n < 31) {
+ /* Core integer register. */
+ GET_REG64(env->xregs[n]);
+ }
+ switch (n) {
+ case 31:
+ GET_REG64(env->xregs[31]);
+ break;
+ case 32:
+ GET_REG64(env->pc);
+ break;
+ case 33:
+ GET_REG32(env->pstate);
+ break;
+ }
+ /* Unknown register. */
+ return 0;
+}
+
+static int cpu_gdb_write_register(CPUARMState *env, uint8_t *mem_buf, int n)
+{
+ uint64_t tmp;
+
+ tmp = ldq_p(mem_buf);
+
+ if (n < 31) {
+ /* Core integer register. */
+ env->xregs[n] = tmp;
+ return 8;
+ }
+ switch (n) {
+ case 31:
+ env->xregs[31] = tmp;
+ return 8;
+ case 32:
+ env->pc = tmp;
+ return 8;
+ case 33:
+ /* CPSR */
+ env->pstate = tmp;
+ return 4;
+ }
+ /* Unknown register. */
+ return 0;
+}
+
#elif defined (TARGET_ARM)
/* Old gdb always expect FPA registers. Newer (xml-aware) gdb only expect