From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:52974) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QHQRq-0004I9-GW for qemu-devel@nongnu.org; Tue, 03 May 2011 21:00:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QHQRp-0000jU-Gp for qemu-devel@nongnu.org; Tue, 03 May 2011 21:00:14 -0400 Received: from mail-ew0-f45.google.com ([209.85.215.45]:56465) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QHQRp-0000ZL-Bw for qemu-devel@nongnu.org; Tue, 03 May 2011 21:00:13 -0400 Received: by mail-ew0-f45.google.com with SMTP id 24so221435ewy.4 for ; Tue, 03 May 2011 18:00:12 -0700 (PDT) From: Max Filippov Date: Wed, 4 May 2011 04:59:07 +0400 Message-Id: <1304470768-16924-7-git-send-email-jcmvbkbc@gmail.com> In-Reply-To: <1304470768-16924-1-git-send-email-jcmvbkbc@gmail.com> References: <1304470768-16924-1-git-send-email-jcmvbkbc@gmail.com> Subject: [Qemu-devel] [RFC 07/28] target-xtensa: add gdb support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Max Filippov Signed-off-by: Max Filippov --- configure | 1 + default-configs/xtensa-softmmu.mak | 1 + gdb-xml/xtensa-core.xml | 24 ++++++++++++++++++++++ gdbstub.c | 39 ++++++++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 0 deletions(-) create mode 100644 gdb-xml/xtensa-core.xml diff --git a/configure b/configure index d8c33b9..41a7007 100755 --- a/configure +++ b/configure @@ -3213,6 +3213,7 @@ case "$target_arch2" in ;; xtensa) TARGET_ARCH=xtensa + gdb_xml_files="xtensa-core.xml" target_phys_bits=32 ;; *) diff --git a/default-configs/xtensa-softmmu.mak b/default-configs/xtensa-softmmu.mak index e5faa09..57ad848 100644 --- a/default-configs/xtensa-softmmu.mak +++ b/default-configs/xtensa-softmmu.mak @@ -1 +1,2 @@ # Default configuration for Xtensa +CONFIG_GDBSTUB_XML=y diff --git a/gdb-xml/xtensa-core.xml b/gdb-xml/xtensa-core.xml new file mode 100644 index 0000000..e71d8bc --- /dev/null +++ b/gdb-xml/xtensa-core.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gdbstub.c b/gdbstub.c index 0838948..9f6145f 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1541,6 +1541,43 @@ static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n) } return 4; } +#elif defined(TARGET_XTENSA) + +#define GDB_CORE_XML "xtensa-core.xml" +#define NUM_CORE_REGS (45) + +static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n) +{ + if (n < 0 || n >= NUM_CORE_REGS) { + return 0; + } + if (n == 0) { + GET_REG32(env->pc); + } else if (n < 17) { + GET_REG32(env->regs[n - 1]); + } else { + GET_REG32(env->sregs[n - 17]); + } +} + +static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n) +{ + uint32_t tmp; + + if (n < 0 || n >= NUM_CORE_REGS) { + return 0; + } + tmp = ldl_p(mem_buf); + + if (n == 0) { + env->pc = tmp; + } else if (n < 17) { + env->regs[n - 1] = tmp; + } else { + env->sregs[n - 17] = tmp; + } + return 4; +} #else #define NUM_CORE_REGS 0 @@ -1818,6 +1855,8 @@ static void gdb_set_cpu_pc(GDBState *s, target_ulong pc) s->c_cpu->psw.addr = pc; #elif defined (TARGET_LM32) s->c_cpu->pc = pc; +#elif defined(TARGET_XTENSA) + s->c_cpu->pc = pc; #endif } -- 1.7.3.4