-findirect-dispatch: broken on Linux, working on Mingw?

Marco Trudel mtrudel@gmx.ch
Wed Mar 7 11:42:00 GMT 2007


Andrew Haley wrote:
> Marco Trudel writes:
>  > Hey all
>  > 
>  > I once started a discussion that ecj1 can't be compiled for a host=Linux 
>  > target=Linux static gcj: http://gcc.gnu.org/ml/java/2007-01/msg00082.html
>  > Back then, no one knew why the error occurred. I think I now stumbled 
>  > over the answer:
>  > 
>  > Having Test.java as a simple "HelloWorld" and working with the compiled 
>  > class:
>  > 
>  > On Linux:
>  > ---------
>  > 
>  > static-gcj-for-lin Test.class --main=Test -findirect-dispatch
>  > -> /tmp/ccq2qpMg.o: In function `main':cc3Fk97a.i:(.text+0x30): 
>  > undefined reference to `JvRunMainName'
>  > collect2: ld returned 1 exit status
>  > 
>  > static-gcj-for-win Test.class --main=Test -findirect-dispatch
>  > -> works
>  > 
> 
> I just can't imagine how indirect dispatch is ever going to work with
> static linking.

I don't know what indirect dispatch exactly does. But I know that it 
perfectly works with gcc 4.2. So it looks to me like it's a regression.

> It certainly isn't designed to, and there are lots of
> good technical reasons for believing it can't.  The linker can't see
> the symbols indirect dispatch uses, so can't find out what objects need
> to be linked into the program.
> 
>  > Any direct ideas? Otherwise I'll add a bugreport.
> 
> Short of fixing Mingw to work properly with shared libraries, no.

It works in GCC 4.2 for Linux and Mingw as well as in GCC 4.3 for Mingw. 
So it more looks like Linux should be fixed instead of Mingw broken to 
be consistent ;-)


Marco



More information about the Java mailing list