From: Cary Coutant Date: Wed, 2 Apr 2014 22:04:36 +0000 (-0700) Subject: Modify gold testsuite to disable plugins added by GCC driver. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ae447ddd12cf05bc5bef90c4a3f53239b5bcf2f9;p=binutils-gdb.git Modify gold testsuite to disable plugins added by GCC driver. GCC 4.8 now adds linker plugin options by default, which conflict with the --incremental tests in the testsuite. This patch checks whether the compiler supports the -fno-use-linker-plugin option, and adds it to all link commands. 2014-04-02 Cary Coutant * configure.ac (HAVE_PUBNAMES): Use C instead of C++. (HAVE_NO_USE_LINKER_PLUGIN): Check for -fno-use-linker-plugin. * configure: Regenerate. * testsuite/Makefile.am (OPT_NO_PLUGINS): New macro for -fno-use-linker-plugin. (LINK1, CXXLINK1): Add it to the link command. * testsuite/Makefile.in: Regenerate. --- diff --git a/gold/ChangeLog b/gold/ChangeLog index 730418506d2..7545ddb3090 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,13 @@ +2014-04-02 Cary Coutant + + * configure.ac (HAVE_PUBNAMES): Use C instead of C++. + (HAVE_NO_USE_LINKER_PLUGIN): Check for -fno-use-linker-plugin. + * configure: Regenerate. + * testsuite/Makefile.am (OPT_NO_PLUGINS): New macro for + -fno-use-linker-plugin. + (LINK1, CXXLINK1): Add it to the link command. + * testsuite/Makefile.in: Regenerate. + 2014-03-12 Alan Modra * Makefile.in: Regenerate. diff --git a/gold/configure b/gold/configure index 22573247808..f61307b0980 100755 --- a/gold/configure +++ b/gold/configure @@ -594,10 +594,12 @@ LTLIBOBJS MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE -HAVE_PUBNAMES_FALSE -HAVE_PUBNAMES_TRUE DLOPEN_LIBS CXXCPP +HAVE_NO_USE_LINKER_PLUGIN_FALSE +HAVE_NO_USE_LINKER_PLUGIN_TRUE +HAVE_PUBNAMES_FALSE +HAVE_PUBNAMES_TRUE HAVE_ZLIB_FALSE HAVE_ZLIB_TRUE LIBOBJS @@ -6991,6 +6993,50 @@ cat >>confdefs.h <<_ACEOF _ACEOF +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Werror -gpubnames" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int i; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + have_pubnames=yes +else + have_pubnames=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="$save_CFLAGS" + if test "$have_pubnames" = "yes"; then + HAVE_PUBNAMES_TRUE= + HAVE_PUBNAMES_FALSE='#' +else + HAVE_PUBNAMES_TRUE='#' + HAVE_PUBNAMES_FALSE= +fi + + +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int i; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + have_no_use_linker_plugin=yes +else + have_no_use_linker_plugin=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="$save_CFLAGS" + if test "$have_no_use_linker_plugin" = "yes"; then + HAVE_NO_USE_LINKER_PLUGIN_TRUE= + HAVE_NO_USE_LINKER_PLUGIN_FALSE='#' +else + HAVE_NO_USE_LINKER_PLUGIN_TRUE='#' + HAVE_NO_USE_LINKER_PLUGIN_FALSE= +fi + + ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7515,28 +7561,6 @@ $as_echo "#define HAVE_STAT_ST_MTIM 1" >>confdefs.h fi -save_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS -Werror -gpubnames" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int i; -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - have_pubnames=yes -else - have_pubnames=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -CXXFLAGS="$save_CXXFLAGS" - if test "$have_pubnames" = "yes"; then - HAVE_PUBNAMES_TRUE= - HAVE_PUBNAMES_FALSE='#' -else - HAVE_PUBNAMES_TRUE='#' - HAVE_PUBNAMES_FALSE= -fi - - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7837,6 +7861,10 @@ if test -z "${HAVE_PUBNAMES_TRUE}" && test -z "${HAVE_PUBNAMES_FALSE}"; then as_fn_error "conditional \"HAVE_PUBNAMES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_NO_USE_LINKER_PLUGIN_TRUE}" && test -z "${HAVE_NO_USE_LINKER_PLUGIN_FALSE}"; then + as_fn_error "conditional \"HAVE_NO_USE_LINKER_PLUGIN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/gold/configure.ac b/gold/configure.ac index 803cf46f8b5..7ad73029793 100644 --- a/gold/configure.ac +++ b/gold/configure.ac @@ -520,6 +520,25 @@ dnl multiple declarations of functions like basename when compiling dnl with C++. AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp]) +dnl Check if gcc supports the -gpubnames option. +dnl Use -Werror in case of compilers that make unknown -g options warnings. +dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS +dnl gets set later by default Autoconf magic to include -Werror. (We are +dnl assuming here that there is no compiler that groks -gpubnames +dnl but does not grok -Werror.) +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Werror -gpubnames" +AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no]) +CFLAGS="$save_CFLAGS" +AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes") + +dnl Check if gcc supports the -fno-use-linker-plugin option. +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Werror -fno-use-linker-plugin" +AC_COMPILE_IFELSE([int i;], [have_no_use_linker_plugin=yes], [have_no_use_linker_plugin=no]) +CFLAGS="$save_CFLAGS" +AM_CONDITIONAL(HAVE_NO_USE_LINKER_PLUGIN, test "$have_no_use_linker_plugin" = "yes") + AC_LANG_PUSH(C++) AC_CHECK_HEADERS(unordered_set unordered_map) @@ -601,18 +620,6 @@ if test "$gold_cv_stat_st_mtim" = "yes"; then [Define if struct stat has a field st_mtim with timespec for mtime]) fi -dnl Check if gcc supports the -gpubnames option. -dnl Use -Werror in case of compilers that make unknown -g options warnings. -dnl They would pass the test here, but fail in actual use when $WARN_CFLAGS -dnl gets set later by default Autoconf magic to include -Werror. (We are -dnl assuming here that there is no compiler that groks -gpubnames -dnl but does not grok -Werror.) -save_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS -Werror -gpubnames" -AC_COMPILE_IFELSE([int i;], [have_pubnames=yes], [have_pubnames=no]) -CXXFLAGS="$save_CXXFLAGS" -AM_CONDITIONAL(HAVE_PUBNAMES, test "$have_pubnames" = "yes") - AC_LANG_POP(C++) AC_CHECK_HEADERS(locale.h) diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index aa41290bc72..52cc05e4abc 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -19,18 +19,25 @@ AM_CPPFLAGS = \ -DLOCALEDIR="\"$(datadir)/locale\"" \ @INCINTL@ +# Some versions of GCC now automatically enable linker plugins, +# but we want to run our tests without GCC's plugins. +if HAVE_NO_USE_LINKER_PLUGIN +OPT_NO_PLUGINS = -fno-use-linker-plugin +endif + # COMPILE1, LINK1, CXXCOMPILE1, CXXLINK1 are renamed from COMPILE, LINK, # CXXCOMPILE and CXXLINK generated by automake 1.11.1. FIXME: they should # be updated if they are different from automake used by gold. COMPILE1 = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LINK1 = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK1 = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(OPT_NO_PLUGINS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE1 = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLINK1 = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ +CXXLINK1 = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(OPT_NO_PLUGINS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ -# Strip out -Wp,-D_FORTIFY_SOURCE=, which is rrelevant for the gold +# Strip out -Wp,-D_FORTIFY_SOURCE=, which is irrelevant for the gold # testsuite and incompatible with -O0 used in gold tests, from # COMPILE, LINK, CXXCOMPILE and CXXLINK. COMPILE = `echo $(COMPILE1) | sed -e 's/-Wp,-D_FORTIFY_SOURCE=[0-9[0-9]]*//'` diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index 60c2c10f5b2..da0a3385825 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -2096,21 +2096,27 @@ AM_CPPFLAGS = \ @INCINTL@ +# Some versions of GCC now automatically enable linker plugins, +# but we want to run our tests without GCC's plugins. +@HAVE_NO_USE_LINKER_PLUGIN_TRUE@OPT_NO_PLUGINS = -fno-use-linker-plugin + # COMPILE1, LINK1, CXXCOMPILE1, CXXLINK1 are renamed from COMPILE, LINK, # CXXCOMPILE and CXXLINK generated by automake 1.11.1. FIXME: they should # be updated if they are different from automake used by gold. COMPILE1 = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LINK1 = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK1 = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(OPT_NO_PLUGINS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ + CXXCOMPILE1 = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLINK1 = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ +CXXLINK1 = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(OPT_NO_PLUGINS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ -# Strip out -Wp,-D_FORTIFY_SOURCE=, which is rrelevant for the gold +# Strip out -Wp,-D_FORTIFY_SOURCE=, which is irrelevant for the gold # testsuite and incompatible with -O0 used in gold tests, from # COMPILE, LINK, CXXCOMPILE and CXXLINK. COMPILE = `echo $(COMPILE1) | sed -e 's/-Wp,-D_FORTIFY_SOURCE=[0-9[0-9]]*//'`