Mixing 32-bit and 64-bit DWARF2/3 sections

Mark Kettenis
2004-11-07T14:28:27Z

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
says:

"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?

Cheers,

Mark

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.