This is the mail archive of the
mailing list for the binutils project.
Mixing 32-bit and 64-bit DWARF2/3 sections
- From: Mark Kettenis <kettenis at gnu dot org>
- To: gcc at gcc dot gnu dot org, binutils at sources dot redhat dot com
- Cc: echristo at redhat dot com, seufer at csv dot ica dot uni-stuttgart dot de, gdb at sources dot redhat dot com
- Date: Sun, 7 Nov 2004 15:28:07 +0100 (CET)
- Subject: Mixing 32-bit and 64-bit DWARF2/3 sections
Currently GDB barfs when you use it on an executable that contains
compilation units that mix 32-bit and 64-bit DWARF sections. Looking
at the (latest?) DWARF3 draft it doesn't seem to be unreasonable that
it does so:
"The 32-bit and 64-bit DWARF format conventions must not be
intermixed within a single compilation unit."
The way things are structured now, it is easy to end up with a
configuration where this happens since some DWARF sections are
generated by GCC and others by gas, i.e. if GCC is configured to
generate 32-bit DWARF, and gas will generate 64-bit dwarf. This is
currently the case for the (not yet contributed) GCC configuration
that's currently used by OpenBSD/mips64. Now this can be easily fixed
by changing either the GCC config or gas, but the DWARF3 draft also
"It is expected that DWARF producing compilers will not use the
64-bit format by default. In most cases, the division of even very
large applications into a number of executable and shared objects
will suffice to assure that the DWARF sections within each
individual linked object are less than 4 GBytes in size. However,
for those cases where needed, the 64-format allows the unusual case
to be handled as well. Even in this case, it is expected that only
application supplied objects will need be compiled using the 64-bit
format; separate 32-bit format versions of system supplied shared
executable libraries can still be used."
This argues that what's currently done in gas and GCC for most 64-bit
MIPS targets is wrong, since these use the 64-bit DWARF format
unconditionally for the n64 ABI.
Fixing this would be a tricky though, since doing it requires some
coordination between GCC and binutils. We could add a switch to gas
to tell it to generate 64-bit DWARF format. But even then GCC will
probably need to support old gas versions that generate 64-bit format
by default, adding more config goo to GCC. So I think the existing
MIPS targets should probably keep doing what they do now.
However, I could make OpenBSD/mips64 do the right thing, making both
GCC and gas generate 32-bit DWARF by default. What do the MIPS people
think about that?
P.S. It seems that MIPS is the only 64-bit target for which this is a
problem, since all other 64-bit targets (AMD64, UltraSPARC) still
use the 32-bit DWARF format.