Binary Compatibility: debug info for compiled Java programs

Daniel Jacobowitz
Thu Jun 10 16:37:00 GMT 2004

On Wed, Jun 09, 2004 at 04:25:01PM -0600, Tom Tromey wrote:
> However, this is only part of the picture.  The other part is that the
> Java runtime environment can differ from the compile-time environment.
> In particular, a given class can be loaded into a running virtual
> machine any number of times, via different ClassLoaders.  And since
> all references used by a class are symbolic, and since a ClassLoader
> mediates the name->class lookup, it follows that each separately
> loaded instance of such a class can have different superclasses.
> I.e., we load class Derived, which inherits from class Base, twice.
> We load it once via ClassLoader A and once via ClassLoader B.  Then we
> can end up with different versions of Base, that might have different
> properties.  E.g., B's Base might have extra private fields.  (Exactly
> what changes are valid is what is described in that chapter of the
> JLS.)
> In our BC ABI, we add a new level of indirection.  So, a field lookup
> isn't just *(object+offset), but instead *(object+otable[index]),
> where the otable ("offset table") is computed at class initialization
> time.

I still don't see how this mechanism implements the above principle,
i.e. converting symbolic field names to offsets; is the otable
associated with the object doing the access or with the objet defining
the class?  Anyway, I could probably work this out if I sat down for an
hour with your paper :)

> Generating Dwarf that redirects through the otable, like the code
> itself does, is tempting.  But is it possible?  I don't see how
> something like 'print object' would work -- you would have to look
> more closely at all the reflection data to discover all the fields in
> a given class.

Generating Dwarf that redirects through a particular otable is easy. 
Generating information to describe the sort of symbolic changes to
inheritance and fields, on the other hand, is not.

Daniel Jacobowitz

More information about the Gdb mailing list