change of libgcj soname for gcc-3.2?

Bryce McKinlay bryce@waitaki.otago.ac.nz
Mon Jul 29 20:22:00 GMT 2002


Adam Megacz wrote:
>Bryce McKinlay <bryce@waitaki.otago.ac.nz> writes:
>>>>simple evolution of classes breaks binary compatibility with the 
>>current ABI.
>>>>>>This was a source of much frustration for me early on.
>>I take it that at compile time, virtual method invocations generate a
>CALL(symbol_for_vtable + N * sizeof(void*)) where N is the numerical
>index of the member function being invoked. Of course, small changes
>to .java files can result in N changing
>
Right.
>Have there been any suggestions on how to deal with stuff like this?
>Does the indirect dispatch stuff solve this problem? 
>>
Yes. See http://gcc.gnu.org/ml/java/2001-12/msg00209.html
Right now --indirect-dispatch solves the problem for virtual methods. 
More needs to be done before we fully implement the Java binary 
compatibility rules, for interfaces, fields, static methods, etc.
>If so, I'll start using it; the small decrease in performance would be well worth the
>headaches I'd save.
>
I doubt you'll notice any performance decrease, in fact it seems to 
increase performance on most of the tests I've seen!
>Actually, I wonder if it's feasible to delay writing CALL addresses
>until class initialization time. Are code pages write-protected in
>memory, or could ClassLoader::loadClass() do something similar to what
>ldd does (ie runtime fixups)?
>
Code pages are not typically write protected, however writing to them 
will cause copy-on-write, so you lose the advantages of shared memory 
between different instances of the same application or shared library 
(ie one of the key benefits of GCJ!). Also, there isn't really any 
practical and portable way to modify code at runtime. Note that ldd 
doesn't actually modify code either - PIC calls are indirected through 
the PLT, which is probibly actually less efficient than the indirect 
dispatch technique since it adds an extra branch instruction.
regards
Bryce.


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /