Skip to content

Commit dbd9e08

Browse files
pm215rth7680
authored andcommitted
target/arm: Advertise MVE to gdb when present
Cortex-M CPUs with MVE should advertise this fact to gdb, using the org.gnu.gdb.arm.m-profile-mve XML feature, which defines the VPR register. Presence of this feature also tells gdb to create pseudo-registers Q0..Q7, so we do not need to tell gdb about them separately. Note that unless you have a very recent GDB that includes this fix: http://patches-tcwg.linaro.org/patch/58133/ gdb will mis-print the individual fields of the VPR register as zero (but showing the whole thing as hex, eg with "print /x $vpr" will give the correct value). Signed-off-by: Peter Maydell <[email protected]> Reviewed-by: Richard Henderson <[email protected]> Reviewed-by: Philippe Mathieu-Daudé <[email protected]> Message-Id: <[email protected]> Signed-off-by: Richard Henderson <[email protected]>
1 parent da2f02b commit dbd9e08

File tree

6 files changed

+48
-4
lines changed

6 files changed

+48
-4
lines changed

configs/targets/aarch64-softmmu.mak

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
TARGET_ARCH=aarch64
22
TARGET_BASE_ARCH=arm
33
TARGET_SUPPORTS_MTTCG=y
4-
TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml
4+
TARGET_XML_FILES= gdb-xml/aarch64-core.xml gdb-xml/aarch64-fpu.xml gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
55
TARGET_NEED_FDT=y

configs/targets/arm-linux-user.mak

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
TARGET_ARCH=arm
22
TARGET_SYSTBL_ABI=common,oabi
33
TARGET_SYSTBL=syscall.tbl
4-
TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml
4+
TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
55
TARGET_HAS_BFLT=y
66
CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y

configs/targets/arm-softmmu.mak

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
TARGET_ARCH=arm
22
TARGET_SUPPORTS_MTTCG=y
3-
TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml
3+
TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
44
TARGET_NEED_FDT=y

configs/targets/armeb-linux-user.mak

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ TARGET_ARCH=arm
22
TARGET_SYSTBL_ABI=common,oabi
33
TARGET_SYSTBL=syscall.tbl
44
TARGET_WORDS_BIGENDIAN=y
5-
TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml
5+
TARGET_XML_FILES= gdb-xml/arm-core.xml gdb-xml/arm-vfp.xml gdb-xml/arm-vfp3.xml gdb-xml/arm-vfp-sysregs.xml gdb-xml/arm-neon.xml gdb-xml/arm-m-profile.xml gdb-xml/arm-m-profile-mve.xml
66
TARGET_HAS_BFLT=y
77
CONFIG_ARM_COMPATIBLE_SEMIHOSTING=y

gdb-xml/arm-m-profile-mve.xml

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0"?>
2+
<!-- Copyright (C) 2021 Free Software Foundation, Inc.
3+
4+
Copying and distribution of this file, with or without modification,
5+
are permitted in any medium without royalty provided the copyright
6+
notice and this notice are preserved. -->
7+
8+
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
9+
<feature name="org.gnu.gdb.arm.m-profile-mve">
10+
<flags id="vpr_reg" size="4">
11+
<!-- ARMv8.1-M and MVE: Unprivileged and privileged Access. -->
12+
<field name="P0" start="0" end="15"/>
13+
<!-- ARMv8.1-M: Privileged Access only. -->
14+
<field name="MASK01" start="16" end="19"/>
15+
<!-- ARMv8.1-M: Privileged Access only. -->
16+
<field name="MASK23" start="20" end="23"/>
17+
</flags>
18+
<reg name="vpr" bitsize="32" type="vpr_reg"/>
19+
</feature>

target/arm/gdbstub.c

+25
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,27 @@ static int vfp_gdb_set_sysreg(CPUARMState *env, uint8_t *buf, int reg)
199199
return 0;
200200
}
201201

202+
static int mve_gdb_get_reg(CPUARMState *env, GByteArray *buf, int reg)
203+
{
204+
switch (reg) {
205+
case 0:
206+
return gdb_get_reg32(buf, env->v7m.vpr);
207+
default:
208+
return 0;
209+
}
210+
}
211+
212+
static int mve_gdb_set_reg(CPUARMState *env, uint8_t *buf, int reg)
213+
{
214+
switch (reg) {
215+
case 0:
216+
env->v7m.vpr = ldl_p(buf);
217+
return 4;
218+
default:
219+
return 0;
220+
}
221+
}
222+
202223
/**
203224
* arm_get/set_gdb_*: get/set a gdb register
204225
* @env: the CPU state
@@ -468,6 +489,10 @@ void arm_cpu_register_gdb_regs_for_features(ARMCPU *cpu)
468489
2, "arm-vfp-sysregs.xml", 0);
469490
}
470491
}
492+
if (cpu_isar_feature(aa32_mve, cpu)) {
493+
gdb_register_coprocessor(cs, mve_gdb_get_reg, mve_gdb_set_reg,
494+
1, "arm-m-profile-mve.xml", 0);
495+
}
471496
gdb_register_coprocessor(cs, arm_gdb_get_sysreg, arm_gdb_set_sysreg,
472497
arm_gen_dynamic_sysreg_xml(cs, cs->gdb_num_regs),
473498
"system-registers.xml", 0);

0 commit comments

Comments
 (0)