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  <ccoutant@google.com>

	* 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.
This commit is contained in:
Cary Coutant 2014-04-02 15:04:36 -07:00
parent 0a899fd5ac
commit ae447ddd12
5 changed files with 102 additions and 44 deletions

View File

@ -1,3 +1,13 @@
2014-04-02 Cary Coutant <ccoutant@google.com>
* 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 <amodra@gmail.com>
* Makefile.in: Regenerate.

76
gold/configure vendored
View File

@ -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

View File

@ -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)

View File

@ -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]]*//'`

View File

@ -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]]*//'`