[PATCH] gdb: restrict configure error with all targets and 64 bit bfd to mips
Maciej W. Rozycki
macro@redhat.com
Wed Feb 12 18:39:41 GMT 2025
On Wed, 5 Feb 2025, Maciej W. Rozycki wrote:
> > I spoke to Maciej, and actually what is going on is that mips really needs 64
> > bit bfd, and requests that in the bfd/configure file.
> >
> > Somehow that isn't propagated, and both gdb's and opcodes's configure doesn't
> > get that propagated correctly. The proper fix would involve propagating things
> > correctly in several configure files, and I don't even understand why it
> > fails, so it is a bit over my head...
>
> There's something fishy going on here that has to be investigated. It
> may come from native 32-bit MIPS configurations such as `mips-linux-gnu'
> requiring 64-bit BFD, uniquely I believe across 32-bit native builds, so
> if the host and the default targets are `mips-linux-gnu' both at a time,
> then 64-bit BFD must have somehow been enabled anyway. Weird that it
> seems as if not.
>
> I'm not sure offhand if my native 32-bit MIPS environment is up to the
> task toolchain-wise, or whether it would be feasible for me time-wise to
> set up a crossed build of native 32-bit MIPS GDB, as I reckon there are
> extra host library requirements for GDB, but I'll see if I can reproduce
> it sometime.
So I don't have a C++17 compiler in the first place in my native 32-bit
MIPS environment, but I was able to trigger this issue with a crossed
native `mips-linux-gnu' `--enable-targets=all' build.
And after a little detective work I can see where the configury logic is
flawed: configuring for a 32-bit host enables 64-bit BFD implicitly via
this statement in bfd/configure.ac:
case ${host64}-${target64}-${want64} in
*true*)
wordsize=64
[...]
;;
false-false-false)
wordsize=32
all_backends='$(BFD32_BACKENDS)'
;;
esac
(notice how wordsize=64 can be set regardless of the host pointer size),
but config/bfd64.m4 only checks for `--enable-64-bit-bfd' and the host
pointer size, which in preset ${want64} and set ${host64} respectively in
bfd/configure.ac, ignoring any ${want64} overrides or the ${target64}
part.
Following this observation I also triggered this build failure with a
`--host=i386-linux-gnu --target=riscv64-linux-gnu --enable-targets=all'
Canadian cross configuration; it has nothing specific to do with the MIPS
host and said configuration still breaks at link time with our trunk (it's
libopcodes rather than GDB that fails anyway).
I think the correct way to get this mess sorted is to move BFD_64_BIT
code from config/bfd64.m4 over to bfd/configure.ac for its private use
only and write replacement BFD_64_BIT that just checks for BFD64, having
included "bfd.h".
Cc'ing binutils as the problem spans across. I have posted a proposed
fix now; cf.
<https://inbox.sourceware.org/gdb-patches/a7356a9c-ea48-ff18-d99b-4e2840a871fc@redhat.com/>.
Maciej
More information about the Binutils
mailing list