target/m68k: fix gdb for m68xxx

Currently "cf-core.xml" is sent to GDB when using any m68k flavor.  Thing is
it uses the "org.gnu.gdb.coldfire.core" feature name and gdb 8.3 then expects
a coldfire FPU instead of the default m68881 FPU.

This is not OK because the m68881 floats registers are 96 bits wide so it
crashes GDB with the following error message:

(gdb) target remote localhost:7960
Remote debugging using localhost:7960
warning: Register "fp0" has an unsupported size (96 bits)
warning: Register "fp1" has an unsupported size (96 bits)
...
Remote 'g' packet reply is too long (expected 148 bytes, got 180 bytes):    \
  00000000000[...]0000

With this patch: qemu-system-m68k -M none -cpu m68020 -s -S

(gdb) tar rem :1234
Remote debugging using :1234
warning: No executable has been specified and target does not support
determining executable automatically.  Try using the "file" command.
0x00000000 in ?? ()
(gdb) p $fp0
$1 = nan(0xffffffffffffffff)

Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <1588094279-17913-3-git-send-email-frederic.konrad@adacore.com>
Message-Id: <20200430190122.4592-10-alex.bennee@linaro.org>
This commit is contained in:
KONRAD Frederic 2020-04-30 20:01:22 +01:00 committed by Alex Bennée
parent df3ca22318
commit a976ed3ffd
3 changed files with 67 additions and 16 deletions

2
configure vendored
View File

@ -7825,7 +7825,7 @@ case "$target_name" in
;; ;;
m68k) m68k)
bflt="yes" bflt="yes"
gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml"
TARGET_SYSTBL_ABI=common TARGET_SYSTBL_ABI=common
;; ;;
microblaze|microblazeel) microblaze|microblazeel)

29
gdb-xml/m68k-core.xml Normal file
View File

@ -0,0 +1,29 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2008 Free Software Foundation, Inc.
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.m68k.core">
<reg name="d0" bitsize="32"/>
<reg name="d1" bitsize="32"/>
<reg name="d2" bitsize="32"/>
<reg name="d3" bitsize="32"/>
<reg name="d4" bitsize="32"/>
<reg name="d5" bitsize="32"/>
<reg name="d6" bitsize="32"/>
<reg name="d7" bitsize="32"/>
<reg name="a0" bitsize="32" type="data_ptr"/>
<reg name="a1" bitsize="32" type="data_ptr"/>
<reg name="a2" bitsize="32" type="data_ptr"/>
<reg name="a3" bitsize="32" type="data_ptr"/>
<reg name="a4" bitsize="32" type="data_ptr"/>
<reg name="a5" bitsize="32" type="data_ptr"/>
<reg name="fp" bitsize="32" type="data_ptr"/>
<reg name="sp" bitsize="32" type="data_ptr"/>
<reg name="ps" bitsize="32"/>
<reg name="pc" bitsize="32" type="code_ptr"/>
</feature>

View File

@ -292,16 +292,38 @@ static void m68k_cpu_class_init(ObjectClass *c, void *data)
cc->tcg_initialize = m68k_tcg_init; cc->tcg_initialize = m68k_tcg_init;
cc->gdb_num_core_regs = 18; cc->gdb_num_core_regs = 18;
cc->gdb_core_xml_file = "cf-core.xml";
dc->vmsd = &vmstate_m68k_cpu; dc->vmsd = &vmstate_m68k_cpu;
} }
#define DEFINE_M68K_CPU_TYPE(cpu_model, initfn) \ static void m68k_cpu_class_init_cf_core(ObjectClass *c, void *data)
{ \ {
.name = M68K_CPU_TYPE_NAME(cpu_model), \ CPUClass *cc = CPU_CLASS(c);
.instance_init = initfn, \
.parent = TYPE_M68K_CPU, \ cc->gdb_core_xml_file = "cf-core.xml";
}
#define DEFINE_M68K_CPU_TYPE_CF(model) \
{ \
.name = M68K_CPU_TYPE_NAME(#model), \
.instance_init = model##_cpu_initfn, \
.parent = TYPE_M68K_CPU, \
.class_init = m68k_cpu_class_init_cf_core \
}
static void m68k_cpu_class_init_m68k_core(ObjectClass *c, void *data)
{
CPUClass *cc = CPU_CLASS(c);
cc->gdb_core_xml_file = "m68k-core.xml";
}
#define DEFINE_M68K_CPU_TYPE_M68K(model) \
{ \
.name = M68K_CPU_TYPE_NAME(#model), \
.instance_init = model##_cpu_initfn, \
.parent = TYPE_M68K_CPU, \
.class_init = m68k_cpu_class_init_m68k_core \
} }
static const TypeInfo m68k_cpus_type_infos[] = { static const TypeInfo m68k_cpus_type_infos[] = {
@ -314,15 +336,15 @@ static const TypeInfo m68k_cpus_type_infos[] = {
.class_size = sizeof(M68kCPUClass), .class_size = sizeof(M68kCPUClass),
.class_init = m68k_cpu_class_init, .class_init = m68k_cpu_class_init,
}, },
DEFINE_M68K_CPU_TYPE("m68000", m68000_cpu_initfn), DEFINE_M68K_CPU_TYPE_M68K(m68000),
DEFINE_M68K_CPU_TYPE("m68020", m68020_cpu_initfn), DEFINE_M68K_CPU_TYPE_M68K(m68020),
DEFINE_M68K_CPU_TYPE("m68030", m68030_cpu_initfn), DEFINE_M68K_CPU_TYPE_M68K(m68030),
DEFINE_M68K_CPU_TYPE("m68040", m68040_cpu_initfn), DEFINE_M68K_CPU_TYPE_M68K(m68040),
DEFINE_M68K_CPU_TYPE("m68060", m68060_cpu_initfn), DEFINE_M68K_CPU_TYPE_M68K(m68060),
DEFINE_M68K_CPU_TYPE("m5206", m5206_cpu_initfn), DEFINE_M68K_CPU_TYPE_CF(m5206),
DEFINE_M68K_CPU_TYPE("m5208", m5208_cpu_initfn), DEFINE_M68K_CPU_TYPE_CF(m5208),
DEFINE_M68K_CPU_TYPE("cfv4e", cfv4e_cpu_initfn), DEFINE_M68K_CPU_TYPE_CF(cfv4e),
DEFINE_M68K_CPU_TYPE("any", any_cpu_initfn), DEFINE_M68K_CPU_TYPE_CF(any),
}; };
DEFINE_TYPES(m68k_cpus_type_infos) DEFINE_TYPES(m68k_cpus_type_infos)