[backport proposed but not yet approved or applied patch for 4.9/trunk, I'm seeing the exact same problem with gcc-4.7 on m68k ] List-Archive: From: Andreas Schwab Subject: [PATCH] Fix linking with -findirect-dispatch Linking with -findirect-dispatch fails with this error: x86_64-linux-gcj -o ecjx -findirect-dispatch --main=org.eclipse.jdt.internal.compiler.batch.GCCMain ../../../gcc/libjava/../ecj.jar ecjx.o /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: /tmp/ccppO92n.o: undefined reference to symbol '_Jv_MonitorExit' /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: note: '_Jv_MonitorExit' is defined in DSO /usr/lib64/libgcj.so.13 so try adding it to the linker command line List-Archive: From: Andreas Schwab Subject: Re: [PATCH] Fix linking with -findirect-dispatch Jakub Jelinek writes: > I'm pretty sure when the changes were added for gcc 4.2 it worked just fine, I'm pretty sure it never worked as intented. Andreas. * Makefile.am (toolexeclib_LTLIBRARIES) [USE_LIBGCJ_BC]: Use install/libgcj_bc.la instead of libgcj_bc.la. (noinst_LTLIBRARIES) [USE_LIBGCJ_BC]: Define. (install_libgcj_bc_la_SOURCES): Define. (install/libgcj_bc.la): New rule. * Makefile.in: Rebuild. --- gcc-4.7.3/libjava/Makefile.am.~1~ 2011-08-05 16:37:48.000000000 +0200 +++ gcc-4.7.3/libjava/Makefile.am 2013-04-20 20:35:08.666876447 +0200 @@ -212,7 +212,8 @@ LIBJAVA_CORE_EXTRA = endif if USE_LIBGCJ_BC -toolexeclib_LTLIBRARIES += libgcj_bc.la +toolexeclib_LTLIBRARIES += install/libgcj_bc.la +noinst_LTLIBRARIES = libgcj_bc.la endif if XLIB_AWT @@ -609,6 +610,7 @@ lib_gnu_awt_xlib_la_LINK = $(LIBLINK) $( ## This lets us have one soname in BC objects and another in C++ ABI objects. ## This library is not linked against libgcj. libgcj_bc_la_SOURCES = libgcj_bc.c +install_libgcj_bc_la_SOURCES = $(libgcj_bc_la_SOURCES) libgcj_bc_la_LDFLAGS = -rpath $(toolexeclibdir) -no-static -version-info 1:0:0 \ $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) libgcj_bc_la_DEPENDENCIES = libgcj.la $(libgcj_bc_la_version_dep) @@ -631,6 +633,11 @@ libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $( rm .libs/libgcj_bc.so.1; \ $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 +## This rule creates the libgcj_bc library that is actually installed. +install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp) + $(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \ + $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) + ## Note that property_files is defined in sources.am. propertyo_files = $(patsubst classpath/resource/%,%,$(addsuffix .lo,$(property_files))) --- gcc-4.7.3/libjava/Makefile.in.~1~ 2013-04-11 09:59:02.000000000 +0200 +++ gcc-4.7.3/libjava/Makefile.in 2013-04-20 20:35:22.536827099 +0200 @@ -40,7 +40,7 @@ host_triplet = @host@ target_triplet = @target@ @TESTSUBDIR_TRUE@am__append_1 = testsuite @BUILD_SUBLIBS_TRUE@am__append_2 = libgcj-noncore.la -@USE_LIBGCJ_BC_TRUE@am__append_3 = libgcj_bc.la +@USE_LIBGCJ_BC_TRUE@am__append_3 = install/libgcj_bc.la @XLIB_AWT_TRUE@am__append_4 = lib-gnu-awt-xlib.la @INSTALL_ECJ_JAR_TRUE@am__append_5 = $(ECJ_BUILD_JAR) @CREATE_GJDOC_TRUE@@NATIVE_TRUE@am__append_6 = gjdoc @@ -155,9 +155,16 @@ am__installdirs = "$(DESTDIR)$(dbexecdir "$(DESTDIR)$(libexecsubdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(dbexecdir)" "$(DESTDIR)$(jardir)" \ "$(DESTDIR)$(toolexecmainlibdir)" -LTLIBRARIES = $(dbexec_LTLIBRARIES) $(toolexeclib_LTLIBRARIES) +LTLIBRARIES = $(dbexec_LTLIBRARIES) $(noinst_LTLIBRARIES) \ + $(toolexeclib_LTLIBRARIES) +install_libgcj_bc_la_LIBADD = +am__objects_1 = libgcj_bc.lo +am_install_libgcj_bc_la_OBJECTS = $(am__objects_1) +install_libgcj_bc_la_OBJECTS = $(am_install_libgcj_bc_la_OBJECTS) +@USE_LIBGCJ_BC_TRUE@am_install_libgcj_bc_la_rpath = -rpath \ +@USE_LIBGCJ_BC_TRUE@ $(toolexeclibdir) am__dirstamp = $(am__leading_dot)dirstamp -am__objects_1 = gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo \ +am__objects_2 = gnu/gcj/xlib/lib_gnu_awt_xlib_la-natClip.lo \ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natColormap.lo \ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDisplay.lo \ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natDrawable.lo \ @@ -177,7 +184,7 @@ am__objects_1 = gnu/gcj/xlib/lib_gnu_awt gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXExposeEvent.lo \ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXImage.lo \ gnu/gcj/xlib/lib_gnu_awt_xlib_la-natXUnmapEvent.lo -am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_1) +am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_2) lib_gnu_awt_xlib_la_OBJECTS = $(am_lib_gnu_awt_xlib_la_OBJECTS) @XLIB_AWT_TRUE@am_lib_gnu_awt_xlib_la_rpath = -rpath $(toolexeclibdir) am_libgcj_noncore_la_OBJECTS = @@ -319,13 +326,13 @@ am__DEPENDENCIES_3 = $(am__DEPENDENCIES_ @BUILD_SUBLIBS_TRUE@am__DEPENDENCIES_4 = \ @BUILD_SUBLIBS_TRUE@ $(CORE_PACKAGE_SOURCE_FILES_LO) am__DEPENDENCIES_5 = -@INTERPRETER_TRUE@am__objects_2 = jvmti.lo interpret.lo -@INTERPRETER_TRUE@am__objects_3 = gnu/classpath/jdwp/natVMFrame.lo \ +@INTERPRETER_TRUE@am__objects_3 = jvmti.lo interpret.lo +@INTERPRETER_TRUE@am__objects_4 = gnu/classpath/jdwp/natVMFrame.lo \ @INTERPRETER_TRUE@ gnu/classpath/jdwp/natVMMethod.lo \ @INTERPRETER_TRUE@ gnu/classpath/jdwp/natVMVirtualMachine.lo -@INTERPRETER_TRUE@am__objects_4 = gnu/gcj/jvmti/natBreakpoint.lo \ +@INTERPRETER_TRUE@am__objects_5 = gnu/gcj/jvmti/natBreakpoint.lo \ @INTERPRETER_TRUE@ gnu/gcj/jvmti/natNormalBreakpoint.lo -am__objects_5 = $(am__objects_3) gnu/classpath/natConfiguration.lo \ +am__objects_6 = $(am__objects_4) gnu/classpath/natConfiguration.lo \ gnu/classpath/natSystemProperties.lo \ gnu/classpath/natVMStackWalker.lo gnu/gcj/natCore.lo \ gnu/gcj/convert/JIS0208_to_Unicode.lo \ @@ -336,7 +343,7 @@ am__objects_5 = $(am__objects_3) gnu/cla gnu/gcj/convert/natOutput_EUCJIS.lo \ gnu/gcj/convert/natOutput_SJIS.lo \ gnu/gcj/io/natSimpleSHSStream.lo gnu/gcj/io/shs.lo \ - $(am__objects_4) gnu/gcj/runtime/natFinalizerThread.lo \ + $(am__objects_5) gnu/gcj/runtime/natFinalizerThread.lo \ gnu/gcj/runtime/natSharedLibLoader.lo \ gnu/gcj/runtime/natSystemClassLoader.lo \ gnu/gcj/runtime/natStringBuffer.lo gnu/gcj/util/natDebug.lo \ @@ -382,24 +389,24 @@ am__objects_5 = $(am__objects_3) gnu/cla java/util/concurrent/atomic/natAtomicLong.lo \ java/util/logging/natLogger.lo java/util/zip/natDeflater.lo \ java/util/zip/natInflater.lo sun/misc/natUnsafe.lo -@USING_BOEHMGC_TRUE@am__objects_6 = boehm.lo -@USING_NOGC_TRUE@am__objects_7 = nogc.lo -@USING_POSIX_PLATFORM_TRUE@am__objects_8 = posix.lo -@USING_WIN32_PLATFORM_TRUE@am__objects_9 = win32.lo -@USING_DARWIN_CRT_TRUE@am__objects_10 = darwin.lo -@USING_POSIX_THREADS_TRUE@am__objects_11 = posix-threads.lo -@USING_WIN32_THREADS_TRUE@am__objects_12 = win32-threads.lo -@USING_NO_THREADS_TRUE@am__objects_13 = no-threads.lo +@USING_BOEHMGC_TRUE@am__objects_7 = boehm.lo +@USING_NOGC_TRUE@am__objects_8 = nogc.lo +@USING_POSIX_PLATFORM_TRUE@am__objects_9 = posix.lo +@USING_WIN32_PLATFORM_TRUE@am__objects_10 = win32.lo +@USING_DARWIN_CRT_TRUE@am__objects_11 = darwin.lo +@USING_POSIX_THREADS_TRUE@am__objects_12 = posix-threads.lo +@USING_WIN32_THREADS_TRUE@am__objects_13 = win32-threads.lo +@USING_NO_THREADS_TRUE@am__objects_14 = no-threads.lo am_libgcj_la_OBJECTS = prims.lo jni.lo exception.lo stacktrace.lo \ - link.lo defineclass.lo verify.lo $(am__objects_2) \ - $(am__objects_5) $(am__objects_6) $(am__objects_7) \ - $(am__objects_8) $(am__objects_9) $(am__objects_10) \ - $(am__objects_11) $(am__objects_12) $(am__objects_13) + link.lo defineclass.lo verify.lo $(am__objects_3) \ + $(am__objects_6) $(am__objects_7) $(am__objects_8) \ + $(am__objects_9) $(am__objects_10) $(am__objects_11) \ + $(am__objects_12) $(am__objects_13) $(am__objects_14) libgcj_la_OBJECTS = $(am_libgcj_la_OBJECTS) libgcj_bc_la_LIBADD = am_libgcj_bc_la_OBJECTS = libgcj_bc.lo libgcj_bc_la_OBJECTS = $(am_libgcj_bc_la_OBJECTS) -@USE_LIBGCJ_BC_TRUE@am_libgcj_bc_la_rpath = -rpath $(toolexeclibdir) +@USE_LIBGCJ_BC_TRUE@am_libgcj_bc_la_rpath = am_libgij_la_OBJECTS = gij.lo libgij_la_OBJECTS = $(am_libgij_la_OBJECTS) am_libjvm_la_OBJECTS = jni-libjvm.lo @@ -484,7 +491,8 @@ GCJCOMPILE = $(GCJ) $(AM_GCJFLAGS) $(GCJ LTGCJCOMPILE = $(LIBTOOL) --tag=GCJ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS) GCJLD = $(GCJ) -SOURCES = $(lib_gnu_awt_xlib_la_SOURCES) $(libgcj_noncore_la_SOURCES) \ +SOURCES = $(install_libgcj_bc_la_SOURCES) \ + $(lib_gnu_awt_xlib_la_SOURCES) $(libgcj_noncore_la_SOURCES) \ $(libgcj_tools_la_SOURCES) $(libgcj_la_SOURCES) \ $(EXTRA_libgcj_la_SOURCES) $(libgcj_bc_la_SOURCES) \ $(libgij_la_SOURCES) $(libjvm_la_SOURCES) $(ecjx_SOURCES) \ @@ -936,6 +944,7 @@ CORE_PACKAGE_SOURCE_FILES_LO = $(filter- @BUILD_SUBLIBS_TRUE@LIBJAVA_LDFLAGS_NOUNDEF = $(LIBGCJ_SUBLIB_LTFLAGS) @BUILD_SUBLIBS_FALSE@LIBJAVA_CORE_EXTRA = @BUILD_SUBLIBS_TRUE@LIBJAVA_CORE_EXTRA = @LIBGCJ_SUBLIB_CORE_EXTRA_DEPS@ +@USE_LIBGCJ_BC_TRUE@noinst_LTLIBRARIES = libgcj_bc.la dbexec_LTLIBRARIES = libjvm.la pkgconfigdir = $(libdir)/pkgconfig jardir = $(datadir)/java @@ -1145,6 +1154,7 @@ lib_gnu_awt_xlib_la_LINK = $(LIBLINK) $( $(lib_gnu_awt_xlib_la_version_arg) libgcj_bc_la_SOURCES = libgcj_bc.c +install_libgcj_bc_la_SOURCES = $(libgcj_bc_la_SOURCES) libgcj_bc_la_LDFLAGS = -rpath $(toolexeclibdir) -no-static -version-info 1:0:0 \ $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) @@ -8813,6 +8823,15 @@ clean-dbexecLTLIBRARIES: echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(toolexeclibdir)" || $(MKDIR_P) "$(DESTDIR)$(toolexeclibdir)" @@ -8844,6 +8863,9 @@ clean-toolexeclibLTLIBRARIES: echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done +install/$(am__dirstamp): + @$(MKDIR_P) install + @: > install/$(am__dirstamp) gnu/gcj/xlib/$(am__dirstamp): @$(MKDIR_P) gnu/gcj/xlib @: > gnu/gcj/xlib/$(am__dirstamp) @@ -10116,6 +10138,7 @@ clean-libtool: -rm -rf gnu/java/nio/.libs gnu/java/nio/_libs -rm -rf gnu/java/nio/channels/.libs gnu/java/nio/channels/_libs -rm -rf gnu/java/security/jce/prng/.libs gnu/java/security/jce/prng/_libs + -rm -rf install/.libs install/_libs -rm -rf java/io/.libs java/io/_libs -rm -rf java/lang/.libs java/lang/_libs -rm -rf java/lang/ref/.libs java/lang/ref/_libs @@ -10395,6 +10418,7 @@ distclean-generic: -rm -f gnu/java/nio/channels/$(am__dirstamp) -rm -f gnu/java/security/jce/prng/$(DEPDIR)/$(am__dirstamp) -rm -f gnu/java/security/jce/prng/$(am__dirstamp) + -rm -f install/$(am__dirstamp) -rm -f java/io/$(DEPDIR)/$(am__dirstamp) -rm -f java/io/$(am__dirstamp) -rm -f java/lang/$(DEPDIR)/$(am__dirstamp) @@ -10431,8 +10455,9 @@ maintainer-clean-generic: clean: clean-multi clean-recursive clean-am: clean-binPROGRAMS clean-dbexecLTLIBRARIES clean-generic \ - clean-libexecsubPROGRAMS clean-libtool clean-noinstPROGRAMS \ - clean-toolexeclibLTLIBRARIES mostlyclean-am + clean-libexecsubPROGRAMS clean-libtool clean-noinstLTLIBRARIES \ + clean-noinstPROGRAMS clean-toolexeclibLTLIBRARIES \ + mostlyclean-am distclean: distclean-multi distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) @@ -10519,12 +10544,13 @@ uninstall-am: uninstall-binPROGRAMS unin all all-am all-multi am--refresh check check-am clean \ clean-binPROGRAMS clean-dbexecLTLIBRARIES clean-generic \ clean-libexecsubPROGRAMS clean-libtool clean-multi \ - clean-noinstPROGRAMS clean-toolexeclibLTLIBRARIES ctags \ - ctags-recursive distclean distclean-compile distclean-generic \ - distclean-libtool distclean-local distclean-multi \ - distclean-tags dvi dvi-am html html-am info info-am install \ - install-am install-binPROGRAMS install-binSCRIPTS install-data \ - install-data-am install-data-local install-dbexecDATA \ + clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ + clean-toolexeclibLTLIBRARIES ctags ctags-recursive distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-local distclean-multi distclean-tags dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-binSCRIPTS install-data install-data-am \ + install-data-local install-dbexecDATA \ install-dbexecLTLIBRARIES install-dvi install-dvi-am \ install-exec install-exec-am install-exec-hook install-html \ install-html-am install-info install-info-am install-jarDATA \ @@ -10562,6 +10588,10 @@ libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $( rm .libs/libgcj_bc.so.1; \ $(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1 +install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp) + $(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \ + $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) + $(propertyo_files): %.lo: classpath/resource/% $(mkinstalldirs) `dirname $@`; \ $(LTGCJCOMPILE) -o $@ -c $< -Wc,--resource,$(@:.lo=)