Bug 38298 - libjava link failures.
Summary: libjava link failures.
Status: RESOLVED WONTFIX
Alias: None
Product: gcc
Classification: Unclassified
Component: libgcj (show other bugs)
Version: 4.4.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-11-28 02:21 UTC by Pawel Sikora
Modified: 2016-09-30 22:50 UTC (History)
3 users (show)

See Also:
Host:
Target: x86_64-gnu-linux
Build:
Known to work: 4.3.2 4.5.0
Known to fail: 4.4.0
Last reconfirmed: 2009-09-26 09:03:36


Attachments
full log (configure & build without --as-needed flag). (193.84 KB, application/octet-stream)
2008-12-29 14:28 UTC, Pawel Sikora
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Pawel Sikora 2008-11-28 02:21:30 UTC
during building latest 4.4 snapshot i've got a linker error:

(...)
/bin/sh ./libtool --tag=GCJ --mode=link /home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/gcc/gcj -B/home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/x86_64-pld-linux/libjava/ -B/home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/gcc/ -L/home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/x86_64-pld-linux/libjava -fomit-frame-pointer -O2 -march=x86-64  -Wl,--as-needed -Wl,-z,relro -Wl,-z,combreloc  -o grmic --main=gnu.classpath.tools.rmic.Main -rpath /usr/lib64/../lib64 -shared-libgcc    -L/home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/x86_64-pld-linux/libjava/.libs libgcj-tools.la
libtool: link: /home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/gcc/gcj -B/home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/x86_64-pld-linux/libjava/ -B/home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/gcc/ -fomit-frame-pointer -O2 -march=x86-64 -Wl,--as-needed -Wl,-z -Wl,relro -Wl,-z -Wl,combreloc -o .libs/grmic --main=gnu.classpath.tools.rmic.Main -shared-libgcc  -L/home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/x86_64-pld-linux/libjava/.libs -L/home/users/pluto/rpm/BUILD/gcc-4.4-20081121/builddir/x86_64-pld-linux/libjava ./.libs/libgcj-tools.so -Wl,-rpath -Wl,/usr/lib64/../lib64
./.libs/libgcj-tools.so: undefined reference to `fmod'
collect2: ld returned 1 exit status
make[3]: *** [grmic] Error 1
Comment 1 Andrew Pinski 2008-12-24 01:37:55 UTC
fmod should be in libm, do you know if -lm is being included on the link line or are we linking with gcj?
Comment 2 Andrew Pinski 2008-12-24 01:38:51 UTC
Also this works for me and many other folks, can you try making sure that you run gcc_update --touch before building the snapshot, it could be that configure is being marked as older than configure.ac and breaking the build.
Comment 3 Pawel Sikora 2008-12-24 12:57:35 UTC
passing -Wl,--as-needed to LDFLAGS_FOR_TARGET causing this failure.
4.3 works fine with --as-needed.
Comment 4 Andrew Pinski 2008-12-24 13:49:25 UTC
Not a GCC bug, please report this to the binutils project which controls ld.
Comment 5 Pawel Sikora 2008-12-24 17:02:11 UTC
(In reply to comment #4)
> Not a GCC bug, please report this to the binutils project which controls ld.
> 

link failure with --as-needed is not a linker bug.
it's strictly related to bugs in makefiles.
i'll analyze gcc build logs and post conclusions...
Comment 6 Pawel Sikora 2008-12-29 09:59:14 UTC
during standard build (w/o --as-needed) the libgcj-tools.so is linked
in the following way:

(...)
libtool: link:  /home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/./gcc/xgcc -shared-libgcc
-B/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/./gcc -nostdinc++
-L/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/x86_64-pld-linux/libstdc++-v3/src
-L/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/x86_64-pld-linux/libstdc++-v3/src/.libs
-B/usr/x86_64-pld-linux/bin/ -B/usr/x86_64-pld-linux/lib/ -isystem /usr/x86_64-pld-linux/include
-isystem /usr/x86_64-pld-linux/sys-include -shared -nostdlib /usr/lib/../lib64/crti.o
/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/./gcc/crtbeginS.o
classpath/tools/.libs/libgcj_tools_la-tools.o
-L/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/x86_64-pld-linux/libstdc++-v3/src
-L/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/x86_64-pld-linux/libstdc++-v3/src/.libs
-L/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/x86_64-pld-linux/libjava
-L/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/./gcc -L/lib/../lib64
-L/usr/lib/../lib64 -lc -lgcc_s /home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/./gcc/crtendS.o
/usr/lib/../lib64/crtn.o  -march=x86-64 -Wl,-z -Wl,relro -Wl,-z -Wl,combreloc
-Wl,--version-script=../../../libjava/libgcj.ver -Wl,-Bsymbolic-functions
-Wl,-soname -Wl,libgcj-tools.so.10 -o .libs/libgcj-tools.so.10.0.0


$ ldd -r x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0
        linux-vdso.so.1 =>  (0x00007fffa2fff000)
        libc.so.6 => /lib64/libc.so.6 (0x00002abf084bc000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002abf08813000)
        /lib64/ld-linux-x86-64.so.2 (0x00002abf07b02000)

undefined symbol: _Jv_charClass (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_floatClass        (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_shortClass        (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_byteClass (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_booleanClass      (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_doubleClass       (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_longClass (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_intClass  (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _ZTVN4java4lang5ClassE        (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_ThrowAbstractMethodError  (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: __gcj_personality_v0  (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_IsInstanceOf      (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_NewPrimArray      (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_Throw     (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_CheckArrayStore   (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_CheckCast (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_LookupInterfaceMethodIdx  (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_RegisterResource  (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_NewMultiArray     (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_ResolvePoolEntry  (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_AllocObjectNoFinalizer    (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_ThrowNoSuchFieldError     (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_ThrowBadArrayIndex        (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_ThrowNullPointerException (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: fmod  (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_InitClass (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_MonitorExit       (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_NewObjectArray    (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_MonitorEnter      (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)
undefined symbol: _Jv_AllocObject       (x86_64-pld-linux/libjava/.libs/libgcj-tools.so.10.0.0)

$ cat x86_64-pld-linux/libjava/.libs/libgcj-tools.la
# libgcj-tools.la - a libtool library file
# Generated by ltmain.sh (GNU libtool) 2.2.6
#
# Please DO NOT delete this file!
# It is necessary for linking the library.

# The name that we can dlopen(3).
dlname='libgcj-tools.so.10'

# Names of this library.
library_names='libgcj-tools.so.10.0.0 libgcj-tools.so.10 libgcj-tools.so'

# The name of the static archive.
old_library='libgcj-tools.a'

# Linker flags that can not go in dependency_libs.
inherited_linker_flags=''

# Libraries that this one depends upon.
dependency_libs=' -L/home/users/pluto/rpm/BUILD/gcc-4.4-20081219/builddir/x86_64-pld-linux/libjava'

# Names of additional weak libraries provided by this library
weak_library_names=''

# Version information for libgcj-tools.
current=10
age=0
revision=0

# Is this an already installed library?
installed=no

# Should we warn about portability when linking against -modules?
shouldnotlink=no

# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''

# Directory that this library needs to be installed in:
libdir='/usr/lib64/../lib64'


as you can see, there's undefined fmod symbol and related .la doesn't
contain required -lm. the --as-needed feature only exposes this bug.
Comment 7 Andrew Pinski 2008-12-29 14:19:09 UTC
How did you configure GCC?  How did you invoke make?  What environment variables are set?

I know building libgcj on x86_64-linux-gnu works so it has something to do with your environment.
Comment 8 Pawel Sikora 2008-12-29 14:28:30 UTC
Created attachment 17000 [details]
full log (configure & build without --as-needed flag).
Comment 9 Ralf Wildenhues 2009-09-26 09:03:36 UTC
proposed patch at <http://gcc.gnu.org/ml/gcc-patches/2009-09/msg01850.html>.
Comment 10 Ralf Wildenhues 2009-09-27 06:49:55 UTC
Subject: Bug 38298

Author: rwild
Date: Sun Sep 27 06:49:33 2009
New Revision: 152215

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=152215
Log:
Fix library dependencies for -Wl,--as-needed.

gcc/:
	PR bootstrap/40928
	* configure.ac: Use $LIBS for '-ldl', not $LDFLAGS.
	* configure: Regenerate.

libjava/:
	PR libgcj/38298
	* Makefile.am (libgcj_tools_la_LIBADD): Add '-lm'.
	* Makefile.in: Regenerate.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/configure
    trunk/gcc/configure.ac
    trunk/libjava/ChangeLog
    trunk/libjava/Makefile.am
    trunk/libjava/Makefile.in

Comment 11 Ralf Wildenhues 2009-09-27 06:56:03 UTC
Fixed in trunk.
Comment 12 Andrew Pinski 2016-09-30 22:50:59 UTC
Closing as won't fix as libgcj (and the java front-end) has been removed from the trunk.