2006-11-21 Jakub Jelinek <jakub@redhat.com> * configure.ac (libjava_cv_anon_version_script): New test. (ANONVERSCRIPT): New AM_CONDITIONAL. * configure: Rebuilt. * Makefile.am (extra_ldflags_libjava): Link with -Wl,--version-script if ANONVERSCRIPT. * Makefile.in: Rebuilt. (libgcj_la_DEPENDENCIES): Depend on libgcj.ver. * libgcj.ver: New file. --- libjava/configure.ac.jj 2006-11-04 22:39:14.000000000 +0100 +++ libjava/configure.ac 2006-11-21 14:23:01.000000000 +0100 @@ -1489,6 +1489,19 @@ fi # See if we support thread-local storage. GCC_CHECK_TLS +# See if linker supports anonymous version scripts. +AC_CACHE_CHECK([whether ld supports anonymous version scripts], + [libjava_cv_anon_version_script], + [save_CFLAGS="$CFLAGS"; save_LDFLAGS="$LDFLAGS" + libjava_cv_anon_version_script=no + CFLAGS="$CFLAGS -fPIC"; LDFLAGS="$LDFLAGS -shared -Wl,--version-script,conftest.map" + echo '{ global: globalsymb*; local: *; };' > conftest.map + AC_TRY_LINK(void globalsymbol (void) {} void localsymbol (void) {},, + [libjava_cv_anon_version_script=yes], []) + CFLAGS="$save_CFLAGS"; LDFLAGS="$save_LDFLAGS" + ]) +AM_CONDITIONAL(ANONVERSCRIPT, test "$libjava_cv_anon_version_script" = yes) + # Check if linker supports static linking on a per library basis LD_START_STATIC_SPEC= LD_FINISH_STATIC_SPEC= --- libjava/Makefile.am.jj 2006-09-22 13:49:10.000000000 +0200 +++ libjava/Makefile.am 2006-11-21 14:10:49.000000000 +0100 @@ -93,6 +93,10 @@ GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 extra_ldflags_libjava = @extra_ldflags_libjava@ +if ANONVERSCRIPT +extra_ldflags_libjava += -Wl,--version-script=$(srcdir)/libgcj.ver +endif + GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) \ $(LDFLAGS) -o $@ LIBLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) -L$(here) $(JC1FLAGS) \ @@ -229,6 +233,9 @@ libgcj_la_LIBADD = \ libgcj_la_DEPENDENCIES = libgcj-$(gcc_version).jar \ $(all_packages_source_files:.list=.lo) \ $(LIBLTDL) $(libgcj_la_LIBADD) +if ANONVERSCRIPT +libgcj_la_DEPENDENCIES += $(srcdir)/libgcj.ver +endif libgcj_la_LINK = $(LIBLINK) libgcj_tools_la_SOURCES = classpath/tools/tools.jar --- libjava/libgcj.ver.jj 2006-11-21 14:08:08.000000000 +0100 +++ libjava/libgcj.ver 2006-11-21 14:08:01.000000000 +0100 @@ -0,0 +1,7 @@ +# Anonymous GNU ld version script to hide boehm-gc, libffi and fdlibm +# symbols in libgcj.so. + +{ + global: Jv*; _Jv_*; __gcj_personality_v0; _Z*; + local: *; +}; --- libjava/configure.jj 2006-11-04 22:39:14.000000000 +0100 +++ libjava/configure 2006-11-21 14:23:04.000000000 +0100 @@ -310,7 +310,7 @@ ac_includes_default="\ # include <unistd.h> #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_subdir host_subdir target_subdir libgcj_basedir host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE AS ac_ct_AS LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB JAR ZIP UNZIP BASH_JAR_TRUE BASH_JAR_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS LIBGCJ_LD_SYMBOLIC LIBGCJDEBUG TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE GCJH INCLTDL LIBLTDL DIRLTDL LIBTOOL CXXCPP CPPFLAGS GCJ GCJFLAGS GCJDEPMODE am__fastdepGCJ_TRUE am__fastdepGCJ_FALSE subdirs TESTSUBDIR_TRUE TESTSUBDIR_FALSE JAVA_HOME_SET_TRUE JAVA_HOME_SET_FALSE JAVA_HOME INTERPRETER LIBFFI LIBFFIINCS PLATFORM_INNER_NAT_HDRS CPP EGREP USING_WIN32_PLATFORM_TRUE USING_WIN32_PLATFORM_FALSE USING_POSIX_PLATFORM_TRUE USING_POSIX_PLATFORM_FALSE USING_DARWIN_CRT_TRUE USING_DARWIN_CRT_FALSE SYSTEMSPEC LIBGCJTESTSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS extra_ldflags_libjava GCLIBS GCINCS GCDEPS GCSPEC JC1GCSPEC GCTESTSPEC USING_BOEHMGC_TRUE USING_BOEHMGC_FALSE USING_NOGC_TRUE USING_NOGC_FALSE THREADLIBS THREADINCS THREADDEPS THREADSPEC THREADSTARTFILESPEC THREADLDFLAGS THREADCXXFLAGS USING_POSIX_THREADS_TRUE USING_POSIX_THREADS_FALSE USING_WIN32_THREADS_TRUE USING_WIN32_THREADS_FALSE USING_NO_THREADS_TRUE USING_NO_THREADS_FALSE USE_LIBGCJ_BC_TRUE USE_LIBGCJ_BC_FALSE LIBGCJ_SPEC HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE LIBICONV LTLIBICONV PKG_CONFIG GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS CLASSPATH_SEPARATOR ac_ct_GCJ ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC BACKTRACESPEC IEEESPEC NATIVE_TRUE NATIVE_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir dbexecdir GCJVERSION gxx_include_dir libstdcxx_incdir ALLOCA PERL SYSDEP_SOURCES LD_START_STATIC_SPEC LD_FINISH_STATIC_SPEC here LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os build_subdir host_subdir target_subdir libgcj_basedir host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical LN_S mkinstalldirs CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LDFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE AS ac_ct_AS LD ac_ct_LD AR ac_ct_AR RANLIB ac_ct_RANLIB JAR ZIP UNZIP BASH_JAR_TRUE BASH_JAR_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBGCJ_CFLAGS LIBGCJ_CXXFLAGS LIBGCJ_JAVAFLAGS LIBGCJ_LD_SYMBOLIC LIBGCJDEBUG TOOLKIT XLIB_AWT_TRUE XLIB_AWT_FALSE GCJH INCLTDL LIBLTDL DIRLTDL LIBTOOL CXXCPP CPPFLAGS GCJ GCJFLAGS GCJDEPMODE am__fastdepGCJ_TRUE am__fastdepGCJ_FALSE subdirs TESTSUBDIR_TRUE TESTSUBDIR_FALSE JAVA_HOME_SET_TRUE JAVA_HOME_SET_FALSE JAVA_HOME INTERPRETER LIBFFI LIBFFIINCS PLATFORM_INNER_NAT_HDRS CPP EGREP USING_WIN32_PLATFORM_TRUE USING_WIN32_PLATFORM_FALSE USING_POSIX_PLATFORM_TRUE USING_POSIX_PLATFORM_FALSE USING_DARWIN_CRT_TRUE USING_DARWIN_CRT_FALSE SYSTEMSPEC LIBGCJTESTSPEC ZLIBSPEC ZLIBTESTSPEC X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS extra_ldflags_libjava GCLIBS GCINCS GCDEPS GCSPEC JC1GCSPEC GCTESTSPEC USING_BOEHMGC_TRUE USING_BOEHMGC_FALSE USING_NOGC_TRUE USING_NOGC_FALSE THREADLIBS THREADINCS THREADDEPS THREADSPEC THREADSTARTFILESPEC THREADLDFLAGS THREADCXXFLAGS USING_POSIX_THREADS_TRUE USING_POSIX_THREADS_FALSE USING_WIN32_THREADS_TRUE USING_WIN32_THREADS_FALSE USING_NO_THREADS_TRUE USING_NO_THREADS_FALSE USE_LIBGCJ_BC_TRUE USE_LIBGCJ_BC_FALSE LIBGCJ_SPEC HASH_SYNC_SPEC USING_GCC_TRUE USING_GCC_FALSE LIBICONV LTLIBICONV PKG_CONFIG GTK_CFLAGS GTK_LIBS GLIB_CFLAGS GLIB_LIBS LIBART_CFLAGS LIBART_LIBS CLASSPATH_SEPARATOR ac_ct_GCJ ZLIBS SYS_ZLIBS ZINCS DIVIDESPEC CHECKREFSPEC EXCEPTIONSPEC BACKTRACESPEC IEEESPEC NATIVE_TRUE NATIVE_FALSE NEEDS_DATA_START_TRUE NEEDS_DATA_START_FALSE GCC_UNWIND_INCLUDE toolexecdir toolexecmainlibdir toolexeclibdir dbexecdir GCJVERSION gxx_include_dir libstdcxx_incdir ALLOCA PERL SYSDEP_SOURCES ANONVERSCRIPT_TRUE ANONVERSCRIPT_FALSE LD_START_STATIC_SPEC LD_FINISH_STATIC_SPEC here LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -16638,6 +16639,82 @@ _ACEOF fi +# See if linker supports anonymous version scripts. +echo "$as_me:$LINENO: checking whether ld supports anonymous version scripts" >&5 +echo $ECHO_N "checking whether ld supports anonymous version scripts... $ECHO_C" >&6 +if test "${libjava_cv_anon_version_script+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + save_CFLAGS="$CFLAGS"; save_LDFLAGS="$LDFLAGS" + libjava_cv_anon_version_script=no + CFLAGS="$CFLAGS -fPIC"; LDFLAGS="$LDFLAGS -shared -Wl,--version-script,conftest.map" + echo '{ global: globalsymb*; local: *; };' > conftest.map + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +void globalsymbol (void) {} void localsymbol (void) {} +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + libjava_cv_anon_version_script=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$save_CFLAGS"; LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $libjava_cv_anon_version_script" >&5 +echo "${ECHO_T}$libjava_cv_anon_version_script" >&6 + + +if test "$libjava_cv_anon_version_script" = yes; then + ANONVERSCRIPT_TRUE= + ANONVERSCRIPT_FALSE='#' +else + ANONVERSCRIPT_TRUE='#' + ANONVERSCRIPT_FALSE= +fi + + # Check if linker supports static linking on a per library basis LD_START_STATIC_SPEC= LD_FINISH_STATIC_SPEC= @@ -16903,6 +16980,13 @@ echo "$as_me: error: conditional \"NEEDS Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi +if test -z "${ANONVERSCRIPT_TRUE}" && test -z "${ANONVERSCRIPT_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"ANONVERSCRIPT\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"ANONVERSCRIPT\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files @@ -17665,6 +17749,8 @@ s,@libstdcxx_incdir@,$libstdcxx_incdir,; s,@ALLOCA@,$ALLOCA,;t t s,@PERL@,$PERL,;t t s,@SYSDEP_SOURCES@,$SYSDEP_SOURCES,;t t +s,@ANONVERSCRIPT_TRUE@,$ANONVERSCRIPT_TRUE,;t t +s,@ANONVERSCRIPT_FALSE@,$ANONVERSCRIPT_FALSE,;t t s,@LD_START_STATIC_SPEC@,$LD_START_STATIC_SPEC,;t t s,@LD_FINISH_STATIC_SPEC@,$LD_FINISH_STATIC_SPEC,;t t s,@here@,$here,;t t --- libjava/Makefile.in.jj 2006-11-04 22:39:14.000000000 +0100 +++ libjava/Makefile.in 2006-11-21 14:12:00.000000000 +0100 @@ -48,15 +48,17 @@ target_triplet = @target@ @NATIVE_TRUE@ gcj-dbtool$(EXEEXT) gappletviewer$(EXEEXT) \ @NATIVE_TRUE@ gjarsigner$(EXEEXT) gkeytool$(EXEEXT) @BASH_JAR_TRUE@am__append_4 = scripts/jar -@USING_GCC_TRUE@am__append_5 = $(WARNINGS) -@USING_BOEHMGC_TRUE@am__append_6 = boehm.cc -@USING_NOGC_TRUE@am__append_7 = nogc.cc -@USING_POSIX_PLATFORM_TRUE@am__append_8 = posix.cc -@USING_WIN32_PLATFORM_TRUE@am__append_9 = win32.cc -@USING_DARWIN_CRT_TRUE@am__append_10 = darwin.cc -@USING_POSIX_THREADS_TRUE@am__append_11 = posix-threads.cc -@USING_WIN32_THREADS_TRUE@am__append_12 = win32-threads.cc -@USING_NO_THREADS_TRUE@am__append_13 = no-threads.cc +@ANONVERSCRIPT_TRUE@am__append_5 = -Wl,--version-script=$(srcdir)/libgcj.ver +@USING_GCC_TRUE@am__append_6 = $(WARNINGS) +@USING_BOEHMGC_TRUE@am__append_7 = boehm.cc +@USING_NOGC_TRUE@am__append_8 = nogc.cc +@USING_POSIX_PLATFORM_TRUE@am__append_9 = posix.cc +@USING_WIN32_PLATFORM_TRUE@am__append_10 = win32.cc +@USING_DARWIN_CRT_TRUE@am__append_11 = darwin.cc +@USING_POSIX_THREADS_TRUE@am__append_12 = posix-threads.cc +@USING_WIN32_THREADS_TRUE@am__append_13 = win32-threads.cc +@USING_NO_THREADS_TRUE@am__append_14 = no-threads.cc +@ANONVERSCRIPT_TRUE@am__append_15 = $(srcdir)/libgcj.ver DIST_COMMON = README $(am__configure_deps) $(srcdir)/../compile \ $(srcdir)/../config.guess $(srcdir)/../config.sub \ $(srcdir)/../depcomp $(srcdir)/../install-sh \ @@ -68,7 +70,7 @@ DIST_COMMON = README $(am__configure_dep $(top_srcdir)/scripts/jar.in COPYING ChangeLog NEWS THANKS @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@noinst_PROGRAMS = \ @MAINTAINER_MODE_TRUE@@NATIVE_TRUE@ gen-from-JIS$(EXEEXT) -@XLIB_AWT_TRUE@am__append_14 = $(xlib_nat_headers) +@XLIB_AWT_TRUE@am__append_16 = $(xlib_nat_headers) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ @@ -473,6 +475,8 @@ ALLOCA = @ALLOCA@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ +ANONVERSCRIPT_FALSE = @ANONVERSCRIPT_FALSE@ +ANONVERSCRIPT_TRUE = @ANONVERSCRIPT_TRUE@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ @@ -653,7 +657,7 @@ build_vendor = @build_vendor@ datadir = @datadir@ dbexecdir = @dbexecdir@ exec_prefix = @exec_prefix@ -extra_ldflags_libjava = @extra_ldflags_libjava@ +extra_ldflags_libjava = @extra_ldflags_libjava@ $(am__append_5) gxx_include_dir = @gxx_include_dir@ here = @here@ host = @host@ @@ -763,7 +767,7 @@ AM_GCJFLAGS = \ --encoding=UTF-8 \ -Wno-deprecated -fbootstrap-classes -AM_CFLAGS = @LIBGCJ_CFLAGS@ $(am__append_5) +AM_CFLAGS = @LIBGCJ_CFLAGS@ $(am__append_6) PEDANTIC_CFLAGS = -ansi -pedantic -Wall -Wno-long-long JCFLAGS = -g JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS) @@ -785,9 +789,9 @@ libgij_la_LDFLAGS = -rpath $(toolexeclib libgcj_la_SOURCES = prims.cc jni.cc jvmti.cc exception.cc \ stacktrace.cc link.cc defineclass.cc interpret.cc verify.cc \ java/lang/Class.java java/lang/Object.java $(nat_source_files) \ - $(am__append_6) $(am__append_7) $(am__append_8) \ - $(am__append_9) $(am__append_10) $(am__append_11) \ - $(am__append_12) $(am__append_13) + $(am__append_7) $(am__append_8) $(am__append_9) \ + $(am__append_10) $(am__append_11) $(am__append_12) \ + $(am__append_13) $(am__append_14) nat_files = $(nat_source_files:.cc=.lo) xlib_nat_files = $(xlib_nat_source_files:.cc=.lo) @@ -805,9 +809,8 @@ libgcj_la_LIBADD = \ $(LIBFFI) $(ZLIBS) $(GCLIBS) libgcj_la_DEPENDENCIES = libgcj-$(gcc_version).jar \ - $(all_packages_source_files:.list=.lo) \ - $(LIBLTDL) $(libgcj_la_LIBADD) - + $(all_packages_source_files:.list=.lo) $(LIBLTDL) \ + $(libgcj_la_LIBADD) $(am__append_15) libgcj_la_LINK = $(LIBLINK) libgcj_tools_la_SOURCES = classpath/tools/tools.jar libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch -fno-indirect-classes @@ -7460,7 +7463,7 @@ gnu/gcj/xlib/natXImage.cc \ gnu/gcj/xlib/natXUnmapEvent.cc sourcesdir = $(jardir) -headers_to_make = $(nat_headers) $(am__append_14) +headers_to_make = $(nat_headers) $(am__append_16) # 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