Re: [RFC PATCH] make libgcj_bc prims symbol sizes correct

Andrew Haley <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
Andrew Haley wrote:
> Nix wrote:
>> Way back in 2006, in
>> <http://gcc.gnu.org/ml/java-patches/2006-q3/msg00342.html>, you said, of
>> the evil trick whereby DECLARE_PRIM_TYPE declares an int in libgcj_bc.so
>> but a Class * in libgcj itself:
>>
>>> I'm a little surprised this works -- I would have expected that
>>> something (ld?  ld.so?), would want the objects to have the proper
>>> size.  However, this doesn't seem to be the case.
>> Well, it's stopped working :( on my Linux x86_64/eglibc-2.10 box, GCC
>> 4.4's testsuite says this in every test that pulls in one of the
>> primitive types (e.g. Array_1 and a whole lot more):
>>
>> /usr/src/gcc/x86_64-spindle/x86_64-pc-linux-gnu/libjava/testsuite/Array_1.exe: Symbol `_Jv_intClass' has different size in shared object, consider re-linking
>>
>> Then it dumps core:
>>
>> Program terminated with signal 6, Aborted.
>> [New process 20396]
>> [New process 20398]
>> #0  0x00007f84e5603d75 in raise () from /lib/libc.so.6
>> (gdb) bt
>> #0  0x00007f84e5603d75 in raise () from /lib/libc.so.6
>> #1  0x00007f84e56069ff in *__GI_abort () at abort.c:88
>> #2  0x00007f84e3a1181b in _Jv_Throw (value=0x7f84e5cde2f8) at /usr/src/gcc/4.4-090813/libjava/exception.cc:128
>> #3  0x00007f84e3a058ba in _Jv_catch_segv (_p=<value optimized out>) at /usr/src/gcc/4.4-090813/libjava/prims.cc:184
>> #4  <signal handler called>
>> #5  0x0000000000000000 in ?? ()
>> #6  0x0000000000400b97 in Array_1.main(java.lang.String[])void () at Array_1.java:16
>> #7  0x00007f84e3a40e1a in gnu::java::lang::MainThread::call_main (this=0x7f84e5bb1dc0) at /usr/src/gcc/4.4-090813/libjava/gnu/java/lang/natMainThread.cc:54
>> #8  0x00007f84e3aa2c34 in gnu.java.lang.MainThread.run()void (this=0x7f84e5bb1dc0) at /usr/src/gcc/4.4-090813/libjava/gnu/java/lang/MainThread.java:106
>> #9  0x00007f84e3a516fa in _Jv_ThreadRun (thread=0x7f84e5bb1dc0) at /usr/src/gcc/4.4-090813/libjava/java/lang/natThread.cc:335
>> #10 0x00007f84e3a05fe5 in _Jv_RunMain (vm_args=<value optimized out>, klass=0x0, name=<value optimized out>, argc=1, argv=0x7f84e17d3fc0, is_jar=<value optimized out>) at /usr/src/gcc/4.4-090813/libjava/prims.cc:1789
>> #11 0x00007f84e55f0a7d in __libc_start_main () from /lib/libc.so.6
>> #12 0x0000000000400919 in _start ()
>>
>> This is with GNU ld 2.19.1.20090202. Obviously the dynamic linker is
>> complaining, not the linker itself, but whichever it is, this trick will
>> obviously no longer work. We need to get the sizes of symbols right.
> 
> Maybe.  But only part of the test uses libgcj_bc, so I can't understand why all
> the tests are failing.

Ah, there's a deeper bug here.

BC-compiled executables are being linked against libgcj as well as libgcj_bc.
We've seen this bug before, and we fixed it.

This means that BC-compiled executable are not binary compatible.  This is a
MUSTFIX, and I'll do it next week.

Thanks for the heads up.

Andrew.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.