Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Tom Tromey <tromey@redhat.com>
To: Daniel Jacobowitz <drow@false.org>
Cc: Andrew Haley <aph@redhat.com>, java@gcc.gnu.org, gdb@sources.redhat.com
Subject: Re: Binary Compatibility: debug info for compiled Java programs
Date: Wed, 09 Jun 2004 22:37:00 -0000	[thread overview]
Message-ID: <87ise0bc8y.fsf@fleche.redhat.com> (raw)
In-Reply-To: <20040609221710.GA16922@nevyn.them.org>

>>>>> "Daniel" == Daniel Jacobowitz <drow@false.org> writes:

>> No, not exactly.  It's possible to insert a class into the inheritance
>> chain or add new fields.

Daniel> That's something you can do while preserving Binary Compatibility, but
Daniel> if we find the loaded copy of the class, its compile-time-generated
Daniel> debug information will describe its fields, right?

Not really.  First, you can read about Java binary compatibility here:

http://java.sun.com/docs/books/jls/second_edition/html/binaryComp.doc.html#44872

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.

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.

Tom


  reply	other threads:[~2004-06-09 22:37 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-09 12:15 Andrew Haley
2004-06-09 13:09 ` Daniel Jacobowitz
2004-06-09 13:19   ` Andrew Haley
2004-06-09 13:29     ` Daniel Jacobowitz
2004-06-09 13:39       ` Andrew Haley
2004-06-09 22:17         ` Daniel Jacobowitz
2004-06-09 22:37           ` Tom Tromey [this message]
2004-06-10 16:37             ` Daniel Jacobowitz
2004-06-10 16:42               ` Tom Tromey
2004-06-10 16:47                 ` Ian Lance Taylor
2004-06-10 16:58                   ` Andrew Haley
2004-06-10 17:12                     ` Ian Lance Taylor
2004-06-10 17:25                       ` Andrew Haley
2004-06-10 16:44               ` Andrew Haley
2004-06-10 16:54                 ` Daniel Jacobowitz
2004-06-09 14:13 ` Per Bothner
2004-06-09 14:20   ` Andrew Haley
2004-06-09 20:46 ` Anthony Green
2004-06-09 21:26   ` Andrew Cagney
2004-06-09 22:11     ` Anthony Green
2004-06-11 13:04     ` Andrew Haley
2004-06-11 15:11       ` Andrew Cagney
2004-06-11 15:17         ` Andrew Haley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ise0bc8y.fsf@fleche.redhat.com \
    --to=tromey@redhat.com \
    --cc=aph@redhat.com \
    --cc=drow@false.org \
    --cc=gdb@sources.redhat.com \
    --cc=java@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox