This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] gdb/riscv: Don't use default bfd to define required features
- From: Andrew Burgess <andrew dot burgess at embecosm dot com>
- To: gdb-patches at sourceware dot org
- Cc: Jim Wilson <jimw at sifive dot com>, Palmer Dabbelt <palmer at sifive dot com>, John Baldwin <jhb at freebsd dot org>
- Date: Tue, 9 Jul 2019 10:03:38 +0100
- Subject: Re: [PATCH] gdb/riscv: Don't use default bfd to define required features
- References: <20190704210758.22920-1-andrew.burgess@embecosm.com>
* Andrew Burgess <andrew.burgess@embecosm.com> [2019-07-04 22:07:58 +0100]:
> When we initialise a gdbarch object we perform a check to try and
> detect if the user is doing something silly; trying to run an RV64
> binary on an RV32 target. To perform this check we compare the xlen
> from the target description with the xlen specified in the headers on
> the ELF being debugged.
>
> If there is no ELF being debugged then we (currently) try to use the
> bfd_arch_info from the gdbarch_info object, which will have been set
> to the default architecture if no bfd is currently being debugged.
> For RISC-V the default architecture is RV64.
>
> What this means is that if a user tries to connect to an RV32 target
> without specifying the BFD to debug then GDB will assume RV64. The
> sanity check mentioned above will failed (xlen difference) and GDB
> will throw an error. The error causes GDB to disconnect from the
> remote target.
>
> After this commit GDB no longer relies on the default bfd
> architecture. If the user tries to connect without specifying the bfd
> then GDB will simply make use of the xlen extracted from the target
> description in order to find or create a suitable gdbarch object.
>
> gdb/ChangeLog:
>
> * riscv-tdep.c (riscv_features_from_gdbarch_info): Don't modify
> required features based on default bfd type when no specific bfd
> is present.
This is now pushed.
Thanks,
Andrew
> ---
> gdb/ChangeLog | 6 ++++++
> gdb/riscv-tdep.c | 12 ------------
> 2 files changed, 6 insertions(+), 12 deletions(-)
>
> diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
> index bae987cf66b..828beea7e2b 100644
> --- a/gdb/riscv-tdep.c
> +++ b/gdb/riscv-tdep.c
> @@ -2917,18 +2917,6 @@ riscv_features_from_gdbarch_info (const struct gdbarch_info info)
> else if (e_flags & EF_RISCV_FLOAT_ABI_SINGLE)
> features.flen = 4;
> }
> - else
> - {
> - const struct bfd_arch_info *binfo = info.bfd_arch_info;
> -
> - if (binfo->bits_per_word == 32)
> - features.xlen = 4;
> - else if (binfo->bits_per_word == 64)
> - features.xlen = 8;
> - else
> - internal_error (__FILE__, __LINE__, _("unknown bits_per_word %d"),
> - binfo->bits_per_word);
> - }
>
> return features;
> }
> --
> 2.14.5
>