Binary Compatibility: debug info for compiled Java programs

Andrew Haley
2004-06-09T12:15:18Z

At the gcc summit last week, we were asked about how we're going to do
debug info for programs compiled with the BC ABI. This is a problem:
as we don't know the layout of objects at compile time, we can't
generate the usual DWARF debugging type info.

I said that there were two front-running solutions: calling into
libgcj runtime routines that access the metadata, or generating DWARF
debugging type info at run time. Andrew Cagney objects to calling
libgcj runtime routines, because then we won't be able to debug core
files. Also, if the runtime library is hosed for some reason, we
won't be able to debug any structures. This is a good point, and I
suppose it more or less kills the idea.

Bryce pointed out that there is another solution that he favours,
which involves gdb reading libgcj's metadata.

I reacted badly to this idea because I found it rather distasteful.
It seems to me that to do it this way is a case of pathological
coupling that I'd like to avoid. However, it may well be the most
efficient solution because it doesn't involve doing any extra work at
runtime.

Bryce pointed out that there's already some precedent for this, in
that C++ debugging already does something similar. He also thinks
that doing this is easier than generating DWARF in libgcj. I'm not
sure about that, one way or the other.

Both solutions require gdb changes: to generate DWARF data at runtime
requires some changes because gdb is used to reading debug data from
object files, not from the inferior process.

So, I'm still unsure about how to proceed. It looks like Bryce's
suggestion is preferable on efficiency grounds, although it might be
possible to generate DWARF cheaply while laying out classes.

Bryce, sorry if I've misstated your position. This is based on my
best recollection.

Comments welcome...

Andrew.