This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Don't link ecj1 against libgcj.so.* (PR libgcj/38396)


Hi!

When libjava is configured --with-ecj-jar=/some/path/eclipse-ecj.jar,
ecj1 is linked against both libgcj_bc.so.1 (because if USE_LIBGCJ_BC
it is compiled/linked with -findirect-dispatch) and libgcj.so.*
(because of explicit LDADD).  Now if such ecj1 linked say against
libgcj.so.9 in GCC 4.3 is run against libgcj_bc.so.1 from GCC 4.4 build,
libgcj_bc.so.1 depends on libgcj.so.10 and so ecj1 dynamically links against
both libgcj.so.9 and libgcj.so.10, which is fatal.
Java programs either have to be linked against libgcj.so.* only, no
libgcj_bc.so.1 (for direct dispatch), or only against libgcj_bc.so.1
and no libgcj.so.*.

The following patch fixes it, tested on x86_64-linux.
The addition of dummy ecjx.cc was needed, because otherwise ecjx would
be without any sources, which confuses libtool.
Ok for trunk (and after some time also 4.3)?

2008-12-18  Jakub Jelinek  <jakub@redhat.com>

	PR libgcj/38396
	* Makefile.am (ecjx_SOURCES): Add ecjx.cc.
	(ecjx_LDADD): Don't add libgcj.la when
	NATIVE && USE_LIBBGCJ_BC && ENABLE_SHARED.
	* Makefile.in: Regenerated.
	* ecjx.cc: New file.

--- libjava/Makefile.am.jj	2008-11-12 20:43:24.000000000 +0100
+++ libjava/Makefile.am	2008-12-18 10:10:33.000000000 +0100
@@ -868,7 +868,7 @@ gij_LDADD = -L$(here)/.libs libgij.la
 gij_DEPENDENCIES = libgij.la
 
 ## Build an ecjx from a .jar.
-ecjx_SOURCES =
+ecjx_SOURCES = ecjx.cc
 ## We use the BC ABI here so that we don't need to compile ecj.jar.
 ## Hopefully the user has compiled it into his system .db.
 ## However, even if not it will run reasonably quickly.
@@ -888,10 +888,15 @@ else !ENABLE_SHARED
 ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR) -fbootclasspath=$(BOOTCLASSPATH)
 endif !ENABLE_SHARED
 
-ecjx_LDADD = -L$(here)/.libs libgcj.la
+ecjx_LDADD = -L$(here)/.libs
 ecjx_DEPENDENCIES = libgcj.la libgcj.spec
 if USE_LIBGCJ_BC
 ecjx_DEPENDENCIES += libgcj_bc.la
+if !ENABLE_SHARED
+ecjx_LDADD += libgcj.la
+endif
+else
+ecjx_LDADD += libgcj.la
 endif
 
 else !NATIVE
--- libjava/ecjx.cc.jj	2008-12-18 10:07:30.000000000 +0100
+++ libjava/ecjx.cc	2008-12-18 10:04:28.000000000 +0100
@@ -0,0 +1 @@
+// Dummy
--- libjava/Makefile.in.jj	2008-11-12 20:43:24.000000000 +0100
+++ libjava/Makefile.in	2008-12-18 10:11:23.000000000 +0100
@@ -76,7 +76,9 @@ DIST_COMMON = README $(am__configure_dep
 	$(top_srcdir)/scripts/jar.in COPYING ChangeLog NEWS THANKS
 @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@am__append_19 = gen-from-JIS
 @NATIVE_TRUE@@USE_LIBGCJ_BC_TRUE@am__append_20 = libgcj_bc.la
-@XLIB_AWT_TRUE@am__append_21 = $(xlib_nat_headers)
+@ENABLE_SHARED_FALSE@@NATIVE_TRUE@@USE_LIBGCJ_BC_TRUE@am__append_21 = libgcj.la
+@NATIVE_TRUE@@USE_LIBGCJ_BC_FALSE@am__append_22 = libgcj.la
+@XLIB_AWT_TRUE@am__append_23 = $(xlib_nat_headers)
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/libltdl/acinclude.m4 \
@@ -467,8 +469,10 @@ libexecsubPROGRAMS_INSTALL = $(INSTALL_P
 @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@am__EXEEXT_4 =  \
 @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@	gen-from-JIS$(EXEEXT)
 PROGRAMS = $(bin_PROGRAMS) $(libexecsub_PROGRAMS) $(noinst_PROGRAMS)
-am_ecjx_OBJECTS =
+am_ecjx_OBJECTS = ecjx.$(OBJEXT)
 ecjx_OBJECTS = $(am_ecjx_OBJECTS)
+@ENABLE_SHARED_FALSE@@NATIVE_TRUE@@USE_LIBGCJ_BC_TRUE@am__DEPENDENCIES_6 = libgcj.la
+@NATIVE_TRUE@@USE_LIBGCJ_BC_FALSE@am__DEPENDENCIES_7 = libgcj.la
 am_gappletviewer_OBJECTS =
 gappletviewer_OBJECTS = $(am_gappletviewer_OBJECTS)
 am_gc_analyze_OBJECTS =
@@ -8343,7 +8347,7 @@ gij_LDFLAGS = -rpath $(dbexecdir) -rpath
 gij_LINK = $(GCJLINK)
 gij_LDADD = -L$(here)/.libs libgij.la
 gij_DEPENDENCIES = libgij.la
-ecjx_SOURCES = 
+ecjx_SOURCES = ecjx.cc
 ECJX_BASE_FLAGS = -findirect-dispatch \
 	--main=org.eclipse.jdt.internal.compiler.batch.GCCMain
 
@@ -8353,7 +8357,8 @@ ECJX_BASE_FLAGS = -findirect-dispatch \
 @ENABLE_SHARED_TRUE@@NATIVE_TRUE@ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) -Djava.class.path=$(ECJ_JAR)
 @NATIVE_FALSE@ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
 @NATIVE_FALSE@ecjx_LDADD = 
-@NATIVE_TRUE@ecjx_LDADD = -L$(here)/.libs libgcj.la
+@NATIVE_TRUE@ecjx_LDADD = -L$(here)/.libs $(am__append_21) \
+@NATIVE_TRUE@	$(am__append_22)
 @NATIVE_FALSE@ecjx_DEPENDENCIES = 
 @NATIVE_TRUE@ecjx_DEPENDENCIES = libgcj.la libgcj.spec \
 @NATIVE_TRUE@	$(am__append_20)
@@ -8572,7 +8577,7 @@ gnu/gcj/xlib/natXImage.cc \
 gnu/gcj/xlib/natXUnmapEvent.cc
 
 sourcesdir = $(jardir)
-headers_to_make = $(nat_headers) $(am__append_21)
+headers_to_make = $(nat_headers) $(am__append_23)
 
 # Work around what appears to be a GNU make bug handling MAKEFLAGS
 # values defined in terms of make variables, as is the case for CC and
@@ -9554,6 +9559,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boehm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/darwin.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defineclass.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecjx.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gij.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpret.Plo@am__quote@

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]