All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: frederic.konrad@adacore.com
Cc: huth@tuxfamily.org, qemu-devel@nongnu.org, laurent@vivier.eu,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	pierre@freepascal.org, f4bug@amsat.org
Subject: Re: [PATCH v1] target/m68k: fix gdb for m68xxx
Date: Mon, 20 Apr 2020 17:13:41 +0100	[thread overview]
Message-ID: <877dyadtje.fsf@linaro.org> (raw)
In-Reply-To: <1587391275-12748-1-git-send-email-frederic.konrad@adacore.com>


frederic.konrad@adacore.com writes:

> From: KONRAD Frederic <frederic.konrad@adacore.com>
>
> 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>

Well it solves the connection issue - but the FP values are still
hopelessly broken, from float_convs:

  from single: f32(-0x1.1874b200000000000000p+103:0xf30c3a59)

in gdb

  fp0            <invalid float value> (raw 0x8c3a5900000000004066)

> ---
>  configure             |  2 +-
>  gdb-xml/m68k-core.xml | 29 +++++++++++++++++++++++++++++
>  target/m68k/cpu.c     | 30 +++++++++++++++++++++++++-----
>  3 files changed, 55 insertions(+), 6 deletions(-)
>  create mode 100644 gdb-xml/m68k-core.xml
>
> diff --git a/configure b/configure
> index 23b5e93..2b07b85 100755
> --- a/configure
> +++ b/configure
> @@ -7825,7 +7825,7 @@ case "$target_name" in
>    ;;
>    m68k)
>      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
>    ;;
>    microblaze|microblazeel)
> diff --git a/gdb-xml/m68k-core.xml b/gdb-xml/m68k-core.xml
> new file mode 100644
> index 0000000..5b092d2
> --- /dev/null
> +++ b/gdb-xml/m68k-core.xml
> @@ -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>
> diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c
> index 9445fcd..976e624 100644
> --- a/target/m68k/cpu.c
> +++ b/target/m68k/cpu.c
> @@ -297,6 +297,21 @@ static void m68k_cpu_class_init(ObjectClass *c, void *data)
>      dc->vmsd = &vmstate_m68k_cpu;
>  }
>  
> +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_WITH_CLASS(cpu_model, initfn, classinit)      \
> +    {                                                                      \
> +        .name = M68K_CPU_TYPE_NAME(cpu_model),                             \
> +        .instance_init = initfn,                                           \
> +        .parent = TYPE_M68K_CPU,                                           \
> +        .class_init = classinit,                                           \
> +    }
> +
>  #define DEFINE_M68K_CPU_TYPE(cpu_model, initfn) \
>      {                                           \
>          .name = M68K_CPU_TYPE_NAME(cpu_model),  \
> @@ -314,11 +329,16 @@ static const TypeInfo m68k_cpus_type_infos[] = {
>          .class_size = sizeof(M68kCPUClass),
>          .class_init = m68k_cpu_class_init,
>      },
> -    DEFINE_M68K_CPU_TYPE("m68000", m68000_cpu_initfn),
> -    DEFINE_M68K_CPU_TYPE("m68020", m68020_cpu_initfn),
> -    DEFINE_M68K_CPU_TYPE("m68030", m68030_cpu_initfn),
> -    DEFINE_M68K_CPU_TYPE("m68040", m68040_cpu_initfn),
> -    DEFINE_M68K_CPU_TYPE("m68060", m68060_cpu_initfn),
> +    DEFINE_M68K_CPU_TYPE_WITH_CLASS("m68000", m68000_cpu_initfn,
> +                                    m68k_cpu_class_init_m68k_core),
> +    DEFINE_M68K_CPU_TYPE_WITH_CLASS("m68020", m68020_cpu_initfn,
> +                                    m68k_cpu_class_init_m68k_core),
> +    DEFINE_M68K_CPU_TYPE_WITH_CLASS("m68030", m68030_cpu_initfn,
> +                                    m68k_cpu_class_init_m68k_core),
> +    DEFINE_M68K_CPU_TYPE_WITH_CLASS("m68040", m68040_cpu_initfn,
> +                                    m68k_cpu_class_init_m68k_core),
> +    DEFINE_M68K_CPU_TYPE_WITH_CLASS("m68060", m68060_cpu_initfn,
> +                                    m68k_cpu_class_init_m68k_core),
>      DEFINE_M68K_CPU_TYPE("m5206", m5206_cpu_initfn),
>      DEFINE_M68K_CPU_TYPE("m5208", m5208_cpu_initfn),
>      DEFINE_M68K_CPU_TYPE("cfv4e", cfv4e_cpu_initfn),


-- 
Alex Bennée


  parent reply	other threads:[~2020-04-20 16:15 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-20 14:01 [PATCH v1] target/m68k: fix gdb for m68xxx frederic.konrad
2020-04-20 14:47 ` Laurent Vivier
2020-04-20 15:46 ` Laurent Vivier
2020-04-20 19:08   ` KONRAD Frederic
2020-04-20 19:59     ` Laurent Vivier
2020-04-20 20:43     ` Laurent Vivier
2020-04-21  9:47       ` KONRAD Frederic
2020-04-21 14:08         ` Laurent Vivier
2020-04-20 16:13 ` Alex Bennée [this message]
2020-04-20 18:54   ` KONRAD Frederic
2020-04-27  7:53 ` Laurent Vivier
2020-04-28 13:19   ` KONRAD Frederic
2020-04-28 14:13     ` Laurent Vivier
2020-04-28 16:46       ` KONRAD Frederic

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877dyadtje.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=f4bug@amsat.org \
    --cc=frederic.konrad@adacore.com \
    --cc=huth@tuxfamily.org \
    --cc=laurent@vivier.eu \
    --cc=philmd@redhat.com \
    --cc=pierre@freepascal.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.