This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Don't link ecj1 against libgcj.so.* (PR libgcj/38396)
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Andrew Haley <aph at redhat dot com>, Paolo Bonzini <bonzini at gnu dot org>, Alexandre Oliva <aoliva at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Thu, 18 Dec 2008 10:37:33 +0100
- Subject: [PATCH] Don't link ecj1 against libgcj.so.* (PR libgcj/38396)
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
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