public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd
@ 2021-12-09 18:08 Andrew Burgess
  2021-12-09 18:50 ` John Baldwin
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Andrew Burgess @ 2021-12-09 18:08 UTC (permalink / raw)
  To: gdb-patches; +Cc: Andrew Burgess

While testing another patch I was trying to build different
configurations of GDB, and, during one test build I ran into a
problem, I configured with `--enable-targets=all
--host=i686-w64-mingw32` and saw this error while linking GDB:

  .../i686-w64-mingw32/bin/ld: mips-tdep.o: in function `mips_gdbarch_init':
  .../src/gdb/mips-tdep.c:8730: undefined reference to `disassembler_options_mips'
  .../i686-w64-mingw32/bin/ld: riscv-tdep.o: in function `riscv_gdbarch_init':
  .../src/gdb/riscv-tdep.c:3851: undefined reference to `disassembler_options_riscv'

So the `disassembler_options_mips` and `disassembler_options_riscv`
symbols are missing.

This turns out to be because mips-dis.c and riscv-dis.c, in which
these symbols are defined, are in the TARGET64_LIBOPCODES_CFILES list
in opcodes/Makefile.am, these files are only built when we are
building with a 64-bit bfd.

If we look further, into bfd/Makefile.am, we can see that all the
files matching elf*-riscv.lo are in the BFD64_BACKENDS list, as are
the elf*-mips.lo files, and (I know because I tried), the two
disassemblers do, not surprisingly, depend on features supplied from
libbfd.

So, though we can build most of GDB just fine for riscv and mips with
a 32-bit bfd, if I understand correctly, the final GDB
executable (assuming we could get it to link) would not understand
these architectures at the bfd level, nor would there be any
disassembler available.  This sounds like a pretty useless GDB to me.

So, in this commit, I move the riscv and mips targets into GDB's list
of targets that require a 64-bit bfd.  After this I can build GDB just
fine with the configure options given above.
---
 gdb/Makefile.in | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index bff27577b95..f2966cf6c00 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -710,10 +710,21 @@ ALL_64_TARGET_OBS = \
 	arch/aarch64-insn.o \
 	arch/aarch64-mte-linux.o \
 	arch/amd64.o \
+	arch/riscv.o \
 	ia64-linux-tdep.o \
 	ia64-tdep.o \
 	ia64-vms-tdep.o \
+	mips-fbsd-tdep.o \
+	mips-linux-tdep.o \
+	mips-netbsd-tdep.o \
+	mips-sde-tdep.o \
+	mips-tdep.o \
 	mips64-obsd-tdep.o \
+	riscv-fbsd-tdep.o \
+	riscv-linux-tdep.o \
+	riscv-none-tdep.o \
+	riscv-ravenscar-thread.o \
+	riscv-tdep.o \
 	sparc64-fbsd-tdep.o \
 	sparc64-linux-tdep.o \
 	sparc64-netbsd-tdep.o \
@@ -734,7 +745,6 @@ ALL_TARGET_OBS = \
 	arch/arm-linux.o \
 	arch/i386.o \
 	arch/ppc-linux-common.o \
-	arch/riscv.o \
 	arm-bsd-tdep.o \
 	arm-fbsd-tdep.o \
 	arm-linux-tdep.o \
@@ -793,11 +803,6 @@ ALL_TARGET_OBS = \
 	mep-tdep.o \
 	microblaze-linux-tdep.o \
 	microblaze-tdep.o \
-	mips-fbsd-tdep.o \
-	mips-linux-tdep.o \
-	mips-netbsd-tdep.o \
-	mips-sde-tdep.o \
-	mips-tdep.o \
 	mn10300-linux-tdep.o \
 	mn10300-tdep.o \
 	moxie-tdep.o \
@@ -818,11 +823,6 @@ ALL_TARGET_OBS = \
 	ppc-sysv-tdep.o \
 	ppc64-tdep.o \
 	ravenscar-thread.o \
-	riscv-fbsd-tdep.o \
-	riscv-linux-tdep.o \
-	riscv-none-tdep.o \
-	riscv-ravenscar-thread.o \
-	riscv-tdep.o \
 	rl78-tdep.o \
 	rs6000-aix-tdep.o \
 	rs6000-lynx178-tdep.o \
-- 
2.25.4


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd
  2021-12-09 18:08 [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd Andrew Burgess
@ 2021-12-09 18:50 ` John Baldwin
  2021-12-10 10:24   ` Andrew Burgess
  2021-12-09 22:40 ` Jim Wilson
  2021-12-13 11:09 ` Andrew Burgess
  2 siblings, 1 reply; 7+ messages in thread
From: John Baldwin @ 2021-12-09 18:50 UTC (permalink / raw)
  To: Andrew Burgess, gdb-patches

On 12/9/21 10:08 AM, Andrew Burgess via Gdb-patches wrote:
> While testing another patch I was trying to build different
> configurations of GDB, and, during one test build I ran into a
> problem, I configured with `--enable-targets=all
> --host=i686-w64-mingw32` and saw this error while linking GDB:
> 
>    .../i686-w64-mingw32/bin/ld: mips-tdep.o: in function `mips_gdbarch_init':
>    .../src/gdb/mips-tdep.c:8730: undefined reference to `disassembler_options_mips'
>    .../i686-w64-mingw32/bin/ld: riscv-tdep.o: in function `riscv_gdbarch_init':
>    .../src/gdb/riscv-tdep.c:3851: undefined reference to `disassembler_options_riscv'
> 
> So the `disassembler_options_mips` and `disassembler_options_riscv`
> symbols are missing.
> 
> This turns out to be because mips-dis.c and riscv-dis.c, in which
> these symbols are defined, are in the TARGET64_LIBOPCODES_CFILES list
> in opcodes/Makefile.am, these files are only built when we are
> building with a 64-bit bfd.
> 
> If we look further, into bfd/Makefile.am, we can see that all the
> files matching elf*-riscv.lo are in the BFD64_BACKENDS list, as are
> the elf*-mips.lo files, and (I know because I tried), the two
> disassemblers do, not surprisingly, depend on features supplied from
> libbfd.
> 
> So, though we can build most of GDB just fine for riscv and mips with
> a 32-bit bfd, if I understand correctly, the final GDB
> executable (assuming we could get it to link) would not understand
> these architectures at the bfd level, nor would there be any
> disassembler available.  This sounds like a pretty useless GDB to me.
> 
> So, in this commit, I move the riscv and mips targets into GDB's list
> of targets that require a 64-bit bfd.  After this I can build GDB just
> fine with the configure options given above.

Note that mips-tdep.c and riscv-tdep.c are a bit funky in that they
support both 32-bit and 64-bit flavors of the architectures, unlike
arm or x86 where the 32-bit and 64-bit support use separate tdep files,
so this change requires 64-bit BFD for 32-bit MIPS for example which is
a bit odd.  That said, fixing all of that is probably a bit of a work
over in bfd that I'm not volunteering for, so I would be ok with this
compromise.  I do wonder what happens if you build a GDB targetting
a 32-bit MIPS or RISC-V without enabling 64-bit bfd though, e.g.

configure --target=mips-unknown-linux

Hmm, seems bfd forces that on for some MIPS targets but not all:

# All MIPS ELF targets need a 64-bit bfd_vma.
case "${targ_defvec} ${targ_selvecs}" in
   *mips_elf*)
     want64=true
     ;;
esac

I guess bfd expects you to use 'linuxelf' instead of 'linux' in that
case?  (And there's no similar fix for risc-v it seems, probably
because most people are building on 64-bit hosts these days and bfd
defaults to a 64-bit vma on 64-bit hosts.)

-- 
John Baldwin

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd
  2021-12-09 18:08 [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd Andrew Burgess
  2021-12-09 18:50 ` John Baldwin
@ 2021-12-09 22:40 ` Jim Wilson
  2021-12-10 10:42   ` Andrew Burgess
  2021-12-13 11:09 ` Andrew Burgess
  2 siblings, 1 reply; 7+ messages in thread
From: Jim Wilson @ 2021-12-09 22:40 UTC (permalink / raw)
  To: Andrew Burgess; +Cc: gdb-patches

On Thu, Dec 9, 2021 at 10:08 AM Andrew Burgess via Gdb-patches <
gdb-patches@sourceware.org> wrote:

> This turns out to be because mips-dis.c and riscv-dis.c, in which
> these symbols are defined, are in the TARGET64_LIBOPCODES_CFILES list
> in opcodes/Makefile.am, these files are only built when we are
> building with a 64-bit bfd.
>

Nelson Chu posted a binutils patch Nov 12 that fixes the RISC-V port so
that it can be built with a 32-bit bfd.  Alan Modra suggested at the time
that it wasn't necessary, but binutils is still running into 32-bit
enable-target=all problems and I think the patch should be reconsidered.
If this patch goes in, then you should not need special handling in gdb for
RISC-V.
https://sourceware.org/pipermail/binutils/2021-November/118498.html

Jim

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd
  2021-12-09 18:50 ` John Baldwin
@ 2021-12-10 10:24   ` Andrew Burgess
  2021-12-10 17:05     ` John Baldwin
  0 siblings, 1 reply; 7+ messages in thread
From: Andrew Burgess @ 2021-12-10 10:24 UTC (permalink / raw)
  To: John Baldwin; +Cc: gdb-patches

* John Baldwin <jhb@FreeBSD.org> [2021-12-09 10:50:12 -0800]:

> On 12/9/21 10:08 AM, Andrew Burgess via Gdb-patches wrote:
> > While testing another patch I was trying to build different
> > configurations of GDB, and, during one test build I ran into a
> > problem, I configured with `--enable-targets=all
> > --host=i686-w64-mingw32` and saw this error while linking GDB:
> > 
> >    .../i686-w64-mingw32/bin/ld: mips-tdep.o: in function `mips_gdbarch_init':
> >    .../src/gdb/mips-tdep.c:8730: undefined reference to `disassembler_options_mips'
> >    .../i686-w64-mingw32/bin/ld: riscv-tdep.o: in function `riscv_gdbarch_init':
> >    .../src/gdb/riscv-tdep.c:3851: undefined reference to `disassembler_options_riscv'
> > 
> > So the `disassembler_options_mips` and `disassembler_options_riscv`
> > symbols are missing.
> > 
> > This turns out to be because mips-dis.c and riscv-dis.c, in which
> > these symbols are defined, are in the TARGET64_LIBOPCODES_CFILES list
> > in opcodes/Makefile.am, these files are only built when we are
> > building with a 64-bit bfd.
> > 
> > If we look further, into bfd/Makefile.am, we can see that all the
> > files matching elf*-riscv.lo are in the BFD64_BACKENDS list, as are
> > the elf*-mips.lo files, and (I know because I tried), the two
> > disassemblers do, not surprisingly, depend on features supplied from
> > libbfd.
> > 
> > So, though we can build most of GDB just fine for riscv and mips with
> > a 32-bit bfd, if I understand correctly, the final GDB
> > executable (assuming we could get it to link) would not understand
> > these architectures at the bfd level, nor would there be any
> > disassembler available.  This sounds like a pretty useless GDB to me.
> > 
> > So, in this commit, I move the riscv and mips targets into GDB's list
> > of targets that require a 64-bit bfd.  After this I can build GDB just
> > fine with the configure options given above.
> 
> Note that mips-tdep.c and riscv-tdep.c are a bit funky in that they
> support both 32-bit and 64-bit flavors of the architectures, unlike
> arm or x86 where the 32-bit and 64-bit support use separate tdep files,
> so this change requires 64-bit BFD for 32-bit MIPS for example which is
> a bit odd.

I'm not sure if you are suggesting that my patch is odd, or that the
situation my patch is trying to accommodate for is odd?

>             That said, fixing all of that is probably a bit of a work
> over in bfd that I'm not volunteering for, so I would be ok with this
> compromise.

Absolutely, I'm not suggesting that this is ideal, I'm just trying to
get GDB building again when we have a 32-bit BFD.

Thanks for looking through the patch,
Andrew

>              I do wonder what happens if you build a GDB targetting
> a 32-bit MIPS or RISC-V without enabling 64-bit bfd though, e.g.
> 
> configure --target=mips-unknown-linux
> 
> Hmm, seems bfd forces that on for some MIPS targets but not all:
> 
> # All MIPS ELF targets need a 64-bit bfd_vma.
> case "${targ_defvec} ${targ_selvecs}" in
>   *mips_elf*)
>     want64=true
>     ;;
> esac
> 
> I guess bfd expects you to use 'linuxelf' instead of 'linux' in that
> case?  (And there's no similar fix for risc-v it seems, probably
> because most people are building on 64-bit hosts these days and bfd
> defaults to a 64-bit vma on 64-bit hosts.)
> 
> -- 
> John Baldwin
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd
  2021-12-09 22:40 ` Jim Wilson
@ 2021-12-10 10:42   ` Andrew Burgess
  0 siblings, 0 replies; 7+ messages in thread
From: Andrew Burgess @ 2021-12-10 10:42 UTC (permalink / raw)
  To: Jim Wilson; +Cc: gdb-patches

* Jim Wilson <jim.wilson.gcc@gmail.com> [2021-12-09 14:40:52 -0800]:

> On Thu, Dec 9, 2021 at 10:08 AM Andrew Burgess via Gdb-patches <
> gdb-patches@sourceware.org> wrote:
> 
> > This turns out to be because mips-dis.c and riscv-dis.c, in which
> > these symbols are defined, are in the TARGET64_LIBOPCODES_CFILES list
> > in opcodes/Makefile.am, these files are only built when we are
> > building with a 64-bit bfd.
> >
> 
> Nelson Chu posted a binutils patch Nov 12 that fixes the RISC-V port so
> that it can be built with a 32-bit bfd.  Alan Modra suggested at the time
> that it wasn't necessary, but binutils is still running into 32-bit
> enable-target=all problems and I think the patch should be reconsidered.
> If this patch goes in, then you should not need special handling in gdb for
> RISC-V.
> https://sourceware.org/pipermail/binutils/2021-November/118498.html

Thanks, I posted to that thread to keep them in the loop.  It sounds
like Nelson might be working on having riscv support build in 32-bit
bfd mode.

I'll probably push this patch next week, but am happy to revert the
riscv parts if/when Nelson's work lands.

Thanks,
Andrew


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd
  2021-12-10 10:24   ` Andrew Burgess
@ 2021-12-10 17:05     ` John Baldwin
  0 siblings, 0 replies; 7+ messages in thread
From: John Baldwin @ 2021-12-10 17:05 UTC (permalink / raw)
  To: Andrew Burgess; +Cc: gdb-patches

On 12/10/21 2:24 AM, Andrew Burgess wrote:
> * John Baldwin <jhb@FreeBSD.org> [2021-12-09 10:50:12 -0800]:
>> Note that mips-tdep.c and riscv-tdep.c are a bit funky in that they
>> support both 32-bit and 64-bit flavors of the architectures, unlike
>> arm or x86 where the 32-bit and 64-bit support use separate tdep files,
>> so this change requires 64-bit BFD for 32-bit MIPS for example which is
>> a bit odd.
> 
> I'm not sure if you are suggesting that my patch is odd, or that the
> situation my patch is trying to accommodate for is odd?

Just that the end result is a bit odd perhaps in that a 32-bit debugger
with --enable-targets=all won't support some 32-bit targets.  However, I
think your patch is fine and that bits can be reverted if binutils is
fixed to handle those cases better as the RISC-V folks are looking at doing.

-- 
John Baldwin

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd
  2021-12-09 18:08 [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd Andrew Burgess
  2021-12-09 18:50 ` John Baldwin
  2021-12-09 22:40 ` Jim Wilson
@ 2021-12-13 11:09 ` Andrew Burgess
  2 siblings, 0 replies; 7+ messages in thread
From: Andrew Burgess @ 2021-12-13 11:09 UTC (permalink / raw)
  To: gdb-patches

Thank you everyone for all the feedback.

I've now pushed this patch.  As has been discussed on this thread, and
the thread Jim linked, if/when the situation changes, and either riscv
or mips can build with a 32-bit libbfd, then I'm obviously happy for
some/all of this patch to be reverted.

Thanks,
Andrew


* Andrew Burgess <aburgess@redhat.com> [2021-12-09 18:08:26 +0000]:

> While testing another patch I was trying to build different
> configurations of GDB, and, during one test build I ran into a
> problem, I configured with `--enable-targets=all
> --host=i686-w64-mingw32` and saw this error while linking GDB:
> 
>   .../i686-w64-mingw32/bin/ld: mips-tdep.o: in function `mips_gdbarch_init':
>   .../src/gdb/mips-tdep.c:8730: undefined reference to `disassembler_options_mips'
>   .../i686-w64-mingw32/bin/ld: riscv-tdep.o: in function `riscv_gdbarch_init':
>   .../src/gdb/riscv-tdep.c:3851: undefined reference to `disassembler_options_riscv'
> 
> So the `disassembler_options_mips` and `disassembler_options_riscv`
> symbols are missing.
> 
> This turns out to be because mips-dis.c and riscv-dis.c, in which
> these symbols are defined, are in the TARGET64_LIBOPCODES_CFILES list
> in opcodes/Makefile.am, these files are only built when we are
> building with a 64-bit bfd.
> 
> If we look further, into bfd/Makefile.am, we can see that all the
> files matching elf*-riscv.lo are in the BFD64_BACKENDS list, as are
> the elf*-mips.lo files, and (I know because I tried), the two
> disassemblers do, not surprisingly, depend on features supplied from
> libbfd.
> 
> So, though we can build most of GDB just fine for riscv and mips with
> a 32-bit bfd, if I understand correctly, the final GDB
> executable (assuming we could get it to link) would not understand
> these architectures at the bfd level, nor would there be any
> disassembler available.  This sounds like a pretty useless GDB to me.
> 
> So, in this commit, I move the riscv and mips targets into GDB's list
> of targets that require a 64-bit bfd.  After this I can build GDB just
> fine with the configure options given above.
> ---
>  gdb/Makefile.in | 22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/gdb/Makefile.in b/gdb/Makefile.in
> index bff27577b95..f2966cf6c00 100644
> --- a/gdb/Makefile.in
> +++ b/gdb/Makefile.in
> @@ -710,10 +710,21 @@ ALL_64_TARGET_OBS = \
>  	arch/aarch64-insn.o \
>  	arch/aarch64-mte-linux.o \
>  	arch/amd64.o \
> +	arch/riscv.o \
>  	ia64-linux-tdep.o \
>  	ia64-tdep.o \
>  	ia64-vms-tdep.o \
> +	mips-fbsd-tdep.o \
> +	mips-linux-tdep.o \
> +	mips-netbsd-tdep.o \
> +	mips-sde-tdep.o \
> +	mips-tdep.o \
>  	mips64-obsd-tdep.o \
> +	riscv-fbsd-tdep.o \
> +	riscv-linux-tdep.o \
> +	riscv-none-tdep.o \
> +	riscv-ravenscar-thread.o \
> +	riscv-tdep.o \
>  	sparc64-fbsd-tdep.o \
>  	sparc64-linux-tdep.o \
>  	sparc64-netbsd-tdep.o \
> @@ -734,7 +745,6 @@ ALL_TARGET_OBS = \
>  	arch/arm-linux.o \
>  	arch/i386.o \
>  	arch/ppc-linux-common.o \
> -	arch/riscv.o \
>  	arm-bsd-tdep.o \
>  	arm-fbsd-tdep.o \
>  	arm-linux-tdep.o \
> @@ -793,11 +803,6 @@ ALL_TARGET_OBS = \
>  	mep-tdep.o \
>  	microblaze-linux-tdep.o \
>  	microblaze-tdep.o \
> -	mips-fbsd-tdep.o \
> -	mips-linux-tdep.o \
> -	mips-netbsd-tdep.o \
> -	mips-sde-tdep.o \
> -	mips-tdep.o \
>  	mn10300-linux-tdep.o \
>  	mn10300-tdep.o \
>  	moxie-tdep.o \
> @@ -818,11 +823,6 @@ ALL_TARGET_OBS = \
>  	ppc-sysv-tdep.o \
>  	ppc64-tdep.o \
>  	ravenscar-thread.o \
> -	riscv-fbsd-tdep.o \
> -	riscv-linux-tdep.o \
> -	riscv-none-tdep.o \
> -	riscv-ravenscar-thread.o \
> -	riscv-tdep.o \
>  	rl78-tdep.o \
>  	rs6000-aix-tdep.o \
>  	rs6000-lynx178-tdep.o \
> -- 
> 2.25.4
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-12-13 11:09 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-09 18:08 [PATCH] gdb: only include mips and riscv targets if building with 64-bit bfd Andrew Burgess
2021-12-09 18:50 ` John Baldwin
2021-12-10 10:24   ` Andrew Burgess
2021-12-10 17:05     ` John Baldwin
2021-12-09 22:40 ` Jim Wilson
2021-12-10 10:42   ` Andrew Burgess
2021-12-13 11:09 ` Andrew Burgess

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).