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

Marco Trudel mtrudel@gmx.ch
Sat Mar 10 08:42:00 GMT 2007


Andrew Haley wrote:
> Marco Trudel writes:
>  > Andrew Haley wrote:
>  > > Marco Trudel writes:
>  > >  > Andrew Haley wrote:
>  > >  > > Marco Trudel writes:
>  > >  > >  > Andrew Haley wrote:
>  > >  > >  > > Marco Trudel writes:
>  > >  > > 
>  > >  > >  > >  > Is there a better way to solve this problem?
>  > >  > >  > > 
>  > >  > > 
>  > >  > > Notice this fragment:
>  > >  > > 
>  > >  > > -lgcc -lgcj_bc -lm
>  > >  > > 
>  > >  > > shouldn't be there.  -lgcj_bc should only be linked when linking
>  > >  > > dynamically.  It should be 
>  > >  > > 
>  > >  > > -lgcc -lgcj -lm
>  > >  > 
>  > >  > Well then, lets take your suggested line:
>  > >  > *lib: %{static-libgcj:-non_shared -lgcj 
>  > >  > -call_shared;:%{s-bc-abi:-lgcj_bc;:-lgcj}} -lm   -lpthread -lrt    -ldl 
>  > >  > %(libgcc) %(liborig)
>  > >  > and change it to:
>  > >  > *lib: %{static-libgcj:-non_shared -lgcj 
>  > >  > -call_shared;:%{s-bc-abi:-lgcj;:-lgcj}} -lm   -lpthread -lrt    -ldl 
>  > >  > %(libgcc) %(liborig)
>  > > 
>  > > My suggestion is
>  > > 
>  > > *lib: -lgcj  -lm   -lpthread -lrt    -ldl %(libgcc) %(liborig)
>  > 
>  > Sorry, I wasn't sure if you meant this as suggestion or if you meant 
>  > that I just should stay with the default. This prints "gcj: unrecognized 
>  > option '-s-bc-abi'" as warning but otherwise works.
> 
> OK, rewrite that to
> 
> *lib: %{s-bc-abi:} -lgcj  -lm   -lpthread -lrt    -ldl %(libgcc) %(liborig)

Yes, that finally does the trick.

> Now, I'm very confused.  I don't know why you are getting all this
> stuff in Windows.  It shouldn't be there.  The logic (in configure.host)
> that controls this is:
> 
> case "${host}" in
>   *linux*|*-kfreebsd*-gnu)
>     use_libgcj_bc=yes
>   ;;
>   *)
>     use_libgcj_bc=no
>   ;;
> esac    

In my build dir:

config.log:
USE_LIBGCJ_BC_FALSE='#'
USE_LIBGCJ_BC_TRUE=''

config.status:
s,@USE_LIBGCJ_BC_TRUE@,,;t t
s,@USE_LIBGCJ_BC_FALSE@,#,;t t

4 Makefiles:
USE_LIBGCJ_BC_FALSE = #
USE_LIBGCJ_BC_TRUE =


Are these correct? In config.log for instance, I also see:
USING_BOEHMGC_FALSE = #
USING_BOEHMGC_TRUE =
Since I configure with "--enable-java-gc=boehm", I would assume that no
value means to set it. So USING_BOEHMGC_TRUE and USE_LIBGCJ_BC_TRUE
should be set.

BTW, in my host=Windows target=Linux GCC, I also have a libgcj_bc.a,
libgcj_bc.so.1 and libgcj_bc.so.1.0.0. These shouldn't have been built
either, right?

> Without use_libgcj_bc set to "yes" you should get the simple *lib line
> above.  There should be no references to -lgcj_bc.

What about the the host=Linux target=Linux compiler? -findirect-dispatch
doesn't work either. So I end up with a wrong *lib line there too. And I
guess there I really have LIBGCJ_BC.

> So, I don't know where your strage Windows *lib line came from.

And what about my Linux one?


thanks
Marco



More information about the Java mailing list