Index: libjava/configure.ac =================================================================== --- libjava/configure.ac (revision 157534) +++ libjava/configure.ac (working copy) @@ -157,6 +157,7 @@ AC_CHECK_TOOL(AS, as) AC_CHECK_TOOL(LD, ld) AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(DLLTOOL, dlltool, :) AC_PROG_AWK AC_CHECK_PROGS([JAR], [jar fastjar gjar], no) AC_PATH_PROG([ZIP], [zip], no) @@ -194,13 +195,16 @@ AC_EXEEXT # libgcj_cxxflags - host specific C++ compiler flags # libgcj_javaflags - host specific Java compiler flags # libgcj_sublib_ltflags - host specific Libtool flags -# (only used when building sublibs) +# libgcj_sublib_core_extra_deps - host specific extra +# dependencies for core sublib +# (these last two only used when building sublibs) # and a number of others; see the list at the start of the file. libgcj_cflags= libgcj_cxxflags= libgcj_javaflags= libgcj_sublib_ltflags= +libgcj_sublib_core_extra_deps= . ${srcdir}/configure.host @@ -214,12 +218,14 @@ LIBGCJ_CFLAGS="${libgcj_cflags}" LIBGCJ_CXXFLAGS="${libgcj_cxxflags}" LIBGCJ_JAVAFLAGS="${libgcj_javaflags}" LIBGCJ_SUBLIB_LTFLAGS="${libgcj_sublib_ltflags}" +LIBGCJ_SUBLIB_CORE_EXTRA_DEPS="${libgcj_sublib_core_extra_deps}" LIBGCJ_LD_SYMBOLIC="${libgcj_ld_symbolic}" LIBGCJ_LD_SYMBOLIC_FUNCTIONS="${libgcj_ld_symbolic_functions}" AC_SUBST(LIBGCJ_CFLAGS) AC_SUBST(LIBGCJ_CXXFLAGS) AC_SUBST(LIBGCJ_JAVAFLAGS) AC_SUBST(LIBGCJ_SUBLIB_LTFLAGS) +AC_SUBST(LIBGCJ_SUBLIB_CORE_EXTRA_DEPS) AC_SUBST(LIBGCJ_LD_SYMBOLIC) AC_SUBST(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) Index: libjava/configure.host =================================================================== --- libjava/configure.host (revision 157534) +++ libjava/configure.host (working copy) @@ -18,7 +18,8 @@ # libgcj_cflags Special CFLAGS to use when building # libgcj_cxxflags Special CXXFLAGS to use when building # libgcj_javaflags Special JAVAFLAGS to use when building -# libgcj_sublib_ltflags Special Libtool flags to use when building. +# libgcj_sublib_ltflags Special Libtool flags to use when building sublibs +# libgcj_sublib_core_extra_deps Extra dependencies to add to core sublib # libgcj_interpreter If the bytecode interpreter supports this platform. # enable_java_net_default If java.net native code should be enabled by # default. @@ -43,6 +44,7 @@ libgcj_cflags= libgcj_cxxflags= libgcj_javaflags= libgcj_sublib_ltflags= +libgcj_sublib_core_extra_deps= libgcj_interpreter= enable_java_net_default=yes enable_hash_synchronization_default=no @@ -351,7 +353,9 @@ case "${host}" in BACKTRACESPEC= # Win32 DLLs are limited to 64k exported symbols each. enable_libgcj_sublibs_default=yes - libgcj_sublib_ltflags='-no-undefined -bindir $(bindir)' + libgcj_sublib_ltflags='-no-undefined -bindir $(bindir) \ + -Wl,-u,__ZN3org4ietf4jgss10GSSManagerC1Ev,-L..,-lgcj-noncore-dummy' + libgcj_sublib_core_extra_deps=libgcj-noncore-dummy.dll.a ;; esac Index: libjava/Makefile.am =================================================================== --- libjava/Makefile.am (revision 157534) +++ libjava/Makefile.am (working copy) @@ -202,11 +202,13 @@ toolexeclib_LTLIBRARIES += libgcj-noncore.la libgcj_noncore_la_LIBADD_SUBOBJECTS = $(NONCORE_PACKAGE_SOURCE_FILES_LO) libgcj_la_LIBADD_SUBOBJECTS = $(CORE_PACKAGE_SOURCE_FILES_LO) LIBJAVA_LDFLAGS_NOUNDEF = $(LIBGCJ_SUBLIB_LTFLAGS) +LIBJAVA_CORE_EXTRA = @LIBGCJ_SUBLIB_CORE_EXTRA_DEPS@ else # If not building sublibraries, everything goes in libgcj, # and it cannot be usefully built shared on PE platforms. libgcj_la_LIBADD_SUBOBJECTS = $(ALL_PACKAGE_SOURCE_FILES_LO) LIBJAVA_LDFLAGS_NOUNDEF = +LIBJAVA_CORE_EXTRA = endif if USE_LIBGCJ_BC @@ -460,7 +462,8 @@ libgcj_la_DEPENDENCIES = libgcj-$(gcc_version).jar java/lang/Class.lo \ java/process-$(PLATFORM).lo \ $(ALL_PACKAGE_SOURCE_FILES_LO) \ - $(LIBLTDL) $(libgcj_la_LIBADD) + $(LIBLTDL) $(libgcj_la_LIBADD) \ + $(LIBJAVA_CORE_EXTRA) if ANONVERSCRIPT libgcj_la_DEPENDENCIES += $(srcdir)/libgcj.ver endif @@ -472,18 +475,29 @@ libgcj_la_LINK = $(LIBLINK) $(libgcj_la_LDFLAGS) EXTRA_libgcj_la_SOURCES = java/lang/Object.java if BUILD_SUBLIBS +## This extra target is invoked on windows hosts only by adding it +## to LIBGCJ_SUBLIB_CORE_EXTRA_SRCS in configure.host, which causes +## it to be linked in to the core DLL and generate a circular import +## dependency loop between the two DLLs. This is required to fix +## PR42811 by ensuring that any application that links against +## either always loads both at runtime. +DLL_VERSION=`expr \`grep -v '^\#' $(srcdir)/libtool-version | sed -e 's/\(.*\):\(.*\):.*/\1 + \2/'\`` +libgcj-noncore-dummy.dll.a : $(srcdir)/libgcj-noncore-dummy.def + $(DLLTOOL) -d $^ -l $@ --dllname cyggcj-noncore-$(DLL_VERSION).dll + +## These are the libtool definitions for the noncore library. libgcj_noncore_la_SOURCES = libgcj_noncore_la_LDFLAGS = $(libgcj_la_LDFLAGS) -libgcj_noncore_la_LIBADD = $(libgcj_noncore_la_LIBADD_SUBOBJECTS) \ - $(LIBFFI) $(ZLIBS) $(GCLIBS) libgcj.la +libgcj_noncore_la_LIBADD = $(libgcj_noncore_la_LIBADD_SUBOBJECTS) libgcj.la libgcj_noncore_la_DEPENDENCIES = libgcj-$(gcc_version).jar $(LIBLTDL) \ $(libgcj_noncore_la_LIBADD) libgcj.la if ANONVERSCRIPT libgcj_noncore_la_DEPENDENCIES += $(srcdir)/libgcj.ver endif libgcj_noncore_la_LINK = $(libgcj_la_LINK) -endif +endif # BUILD_SUBLIBS + # We compile libgcj_tools with -findirect-dispatch so that they can # depend on external classes: in particular, gjdoc uses antlr. In # addition, -fno-bootstrap-classes ensures that the tools are loaded @@ -1513,6 +1527,7 @@ AM_MAKEFLAGS = \ "gxx_include_dir=$(gxx_include_dir)" \ "AR=$(AR)" \ "AS=$(AS)" \ + "DLLTOOL=$(DLLTOOL)" \ "LD=$(LD)" \ "LIBCFLAGS=$(LIBCFLAGS)" \ "NM=$(NM)" \ Index: libjava/libgcj-noncore-dummy.def =================================================================== --- libjava/libgcj-noncore-dummy.def (revision 0) +++ libjava/libgcj-noncore-dummy.def (revision 0) @@ -0,0 +1,7 @@ + +LIBRARY cyggcj-noncore-11.dll + +EXPORTS + + _ZN3org4ietf4jgss10GSSManagerC1Ev +