Browse Source
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> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1378235544-22290-12-git-send-email-peter.maydell@linaro.org Message-id: 1368505980-17151-6-git-send-email-john.rigby@linaro.org [PMM: dropped unused fp regs XML for now; moved 64 bit only functions to new gdbstub64.c; these are hooked up in AArch64CPU, not via ifdefs in ARMCPU] Signed-off-by: Peter Maydell <peter.maydell@linaro.org>pull/8/head
committed by
Peter Maydell
5 changed files with 126 additions and 1 deletions
@ -0,0 +1,46 @@ |
|||
<?xml version="1.0"?> |
|||
<!-- Copyright (C) 2009-2012 Free Software Foundation, Inc. |
|||
Contributed by ARM Ltd. |
|||
|
|||
Copying and distribution of this file, with or without modification, |
|||
are permitted in any medium without royalty provided the copyright |
|||
notice and this notice are preserved. --> |
|||
|
|||
<!DOCTYPE feature SYSTEM "gdb-target.dtd"> |
|||
<feature name="org.gnu.gdb.aarch64.core"> |
|||
<reg name="x0" bitsize="64"/> |
|||
<reg name="x1" bitsize="64"/> |
|||
<reg name="x2" bitsize="64"/> |
|||
<reg name="x3" bitsize="64"/> |
|||
<reg name="x4" bitsize="64"/> |
|||
<reg name="x5" bitsize="64"/> |
|||
<reg name="x6" bitsize="64"/> |
|||
<reg name="x7" bitsize="64"/> |
|||
<reg name="x8" bitsize="64"/> |
|||
<reg name="x9" bitsize="64"/> |
|||
<reg name="x10" bitsize="64"/> |
|||
<reg name="x11" bitsize="64"/> |
|||
<reg name="x12" bitsize="64"/> |
|||
<reg name="x13" bitsize="64"/> |
|||
<reg name="x14" bitsize="64"/> |
|||
<reg name="x15" bitsize="64"/> |
|||
<reg name="x16" bitsize="64"/> |
|||
<reg name="x17" bitsize="64"/> |
|||
<reg name="x18" bitsize="64"/> |
|||
<reg name="x19" bitsize="64"/> |
|||
<reg name="x20" bitsize="64"/> |
|||
<reg name="x21" bitsize="64"/> |
|||
<reg name="x22" bitsize="64"/> |
|||
<reg name="x23" bitsize="64"/> |
|||
<reg name="x24" bitsize="64"/> |
|||
<reg name="x25" bitsize="64"/> |
|||
<reg name="x26" bitsize="64"/> |
|||
<reg name="x27" bitsize="64"/> |
|||
<reg name="x28" bitsize="64"/> |
|||
<reg name="x29" bitsize="64"/> |
|||
<reg name="x30" bitsize="64"/> |
|||
<reg name="sp" bitsize="64" type="data_ptr"/> |
|||
|
|||
<reg name="pc" bitsize="64" type="code_ptr"/> |
|||
<reg name="cpsr" bitsize="32"/> |
|||
</feature> |
|||
@ -0,0 +1,73 @@ |
|||
/*
|
|||
* ARM gdb server stub: AArch64 specific functions. |
|||
* |
|||
* Copyright (c) 2013 SUSE LINUX Products GmbH |
|||
* |
|||
* This library is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU Lesser General Public |
|||
* License as published by the Free Software Foundation; either |
|||
* version 2 of the License, or (at your option) any later version. |
|||
* |
|||
* This library is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|||
* Lesser General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Lesser General Public |
|||
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
#include "config.h" |
|||
#include "qemu-common.h" |
|||
#include "exec/gdbstub.h" |
|||
|
|||
int aarch64_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n) |
|||
{ |
|||
ARMCPU *cpu = ARM_CPU(cs); |
|||
CPUARMState *env = &cpu->env; |
|||
|
|||
if (n < 31) { |
|||
/* Core integer register. */ |
|||
return gdb_get_reg64(mem_buf, env->xregs[n]); |
|||
} |
|||
switch (n) { |
|||
case 31: |
|||
return gdb_get_reg64(mem_buf, env->xregs[31]); |
|||
break; |
|||
case 32: |
|||
return gdb_get_reg64(mem_buf, env->pc); |
|||
break; |
|||
case 33: |
|||
return gdb_get_reg32(mem_buf, env->pstate); |
|||
} |
|||
/* Unknown register. */ |
|||
return 0; |
|||
} |
|||
|
|||
int aarch64_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) |
|||
{ |
|||
ARMCPU *cpu = ARM_CPU(cs); |
|||
CPUARMState *env = &cpu->env; |
|||
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; |
|||
} |
|||
Loading…
Reference in new issue