[gold][PATCH] PR gold/17675: pie_copyrelocs_test fails with GCC 4.2
H.J. Lu
hongjiu.lu@intel.com
Wed Dec 3 19:31:00 GMT 2014
More information about the Binutils mailing list
Wed Dec 3 19:31:00 GMT 2014
- Previous message (by thread): [gold][PATCH] PR gold/17675: pie_copyrelocs_test fails with GCC 4.2
- Next message (by thread): [PATCH 0/6] binutils port for the Visium
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi, On Linux/x86-64 with GCC 4.2, I got /usr/gcc-4.2/bin/g++ -W -Wall -Werror -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fmerge-constants -g -O2 -Bgcctestdir/ -Wl,-R,. -pie -o pie_copyrelocs_test pie_copyrelocs_test.o pie_copyrelocs_shared_test.so -ldl -lz gcctestdir/ld: error: pie_copyrelocs_test.o: requires dynamic R_X86_64_32 reloc against '__gxx_personality_v0' which may overflow at runtime; recompile with -fPIC collect2: ld returned 1 exit status make[7]: *** [pie_copyrelocs_test] Error 1 This patch replaces pie_copyrelocs_test.cc with pie_copyrelocs_test.S. OK for trunk? Thanks. H.J. --- PR gold/17675 * configure.ac: Add AM_PROG_AS. * testsuite/Makefile.am (pie_copyrelocs_test_SOURCES): Replace pie_copyrelocs_test.cc with pie_copyrelocs_test.S. * testsuite/pie_copyrelocs_test.cc: Removed. * testsuite/pie_copyrelocs_test.S: New file. * aclocal.m4: Regenerated. * configure: Likewise. * Makefile.in: Likewise. * testsuite/Makefile.in: Likewise. --- gold/ChangeLog | 14 ++++ gold/Makefile.in | 3 + gold/aclocal.m4 | 22 ++++++ gold/configure | 145 ++++++++++++++++++++++++++++++++++ gold/configure.ac | 1 + gold/testsuite/Makefile.am | 2 +- gold/testsuite/Makefile.in | 25 +++++- gold/testsuite/pie_copyrelocs_test.S | 38 +++++++++ gold/testsuite/pie_copyrelocs_test.cc | 31 -------- 9 files changed, 246 insertions(+), 35 deletions(-) create mode 100644 gold/testsuite/pie_copyrelocs_test.S delete mode 100644 gold/testsuite/pie_copyrelocs_test.cc diff --git a/gold/ChangeLog b/gold/ChangeLog index b75530f..c112504 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,17 @@ +2014-12-03 H.J. Lu <hongjiu.lu@intel.com> + + PR gold/17675 + * configure.ac: Add AM_PROG_AS. + * testsuite/Makefile.am (pie_copyrelocs_test_SOURCES): Replace + pie_copyrelocs_test.cc with pie_copyrelocs_test.S. + * testsuite/pie_copyrelocs_test.cc: Removed. + * testsuite/pie_copyrelocs_test.S: New file. + + * aclocal.m4: Regenerated. + * configure: Likewise. + * Makefile.in: Likewise. + * testsuite/Makefile.in: Likewise. + 2014-12-03 Alan Modra <amodra@gmail.com> PR 17566 diff --git a/gold/Makefile.in b/gold/Makefile.in index 3e49957..e30d67e 100644 --- a/gold/Makefile.in +++ b/gold/Makefile.in @@ -277,6 +277,9 @@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ diff --git a/gold/aclocal.m4 b/gold/aclocal.m4 index 8321894..3f404e2 100644 --- a/gold/aclocal.m4 +++ b/gold/aclocal.m4 @@ -55,6 +55,28 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +# Figure out how to run the assembler. -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_PROG_AS +# ---------- +AC_DEFUN([AM_PROG_AS], +[# By default we simply use the C compiler to build assembly code. +AC_REQUIRE([AC_PROG_CC]) +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS +AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) +AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl +]) + # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. diff --git a/gold/configure b/gold/configure index 7d7b849..2968726 100755 --- a/gold/configure +++ b/gold/configure @@ -659,6 +659,11 @@ LN_S RANLIB YFLAGS YACC +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE @@ -808,6 +813,8 @@ CPPFLAGS CXX CXXFLAGS CCC +CCAS +CCASFLAGS YACC YFLAGS CPP @@ -1463,6 +1470,8 @@ Some influential environment variables: you have headers in a nonstandard directory <include dir> CXX C++ compiler command CXXFLAGS C++ compiler flags + CCAS assembler compiler command (defaults to CC) + CCASFLAGS assembler compiler flags (defaults to CFLAGS) YACC The `Yet Another C Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. @@ -5019,6 +5028,138 @@ else fi +# By default we simply use the C compiler to build assembly code. + +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS + + + +depcc="$CCAS" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CCAS_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CCAS_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CCAS_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then + am__fastdepCCAS_TRUE= + am__fastdepCCAS_FALSE='#' +else + am__fastdepCCAS_TRUE='#' + am__fastdepCCAS_FALSE= +fi + + for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -7831,6 +7972,10 @@ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then + as_fn_error "conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${NATIVE_LINKER_TRUE}" && test -z "${NATIVE_LINKER_FALSE}"; then as_fn_error "conditional \"NATIVE_LINKER\" was never defined. diff --git a/gold/configure.ac b/gold/configure.ac index 0478011..1938723 100644 --- a/gold/configure.ac +++ b/gold/configure.ac @@ -275,6 +275,7 @@ AC_CHECK_TOOL(NM, nm) AC_PROG_CC AC_PROG_CXX +AM_PROG_AS AC_PROG_YACC AC_PROG_RANLIB AC_PROG_INSTALL diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index 35cd013..fb8aa0f 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -518,7 +518,7 @@ two_file_pie_test: two_file_test_1_pie.o two_file_test_1b_pie.o \ $(CXXLINK) -Bgcctestdir/ -pie two_file_test_1_pie.o two_file_test_1b_pie.o two_file_test_2_pie.o two_file_test_main_pie.o check_PROGRAMS += pie_copyrelocs_test -pie_copyrelocs_test_SOURCES = pie_copyrelocs_test.cc +pie_copyrelocs_test_SOURCES = pie_copyrelocs_test.S pie_copyrelocs_test_DEPENDENCIES = gcctestdir/ld pie_copyrelocs_shared_test.so pie_copyrelocs_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -pie pie_copyrelocs_test_LDADD = pie_copyrelocs_shared_test.so diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index 8fbb644..81af312 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -1422,7 +1422,7 @@ permission_test_DEPENDENCIES = libgoldtest.a ../libgold.a \ @GCC_TRUE@@NATIVE_LINKER_TRUE@am_pie_copyrelocs_test_OBJECTS = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ pie_copyrelocs_test.$(OBJEXT) pie_copyrelocs_test_OBJECTS = $(am_pie_copyrelocs_test_OBJECTS) -pie_copyrelocs_test_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ +pie_copyrelocs_test_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(pie_copyrelocs_test_LDFLAGS) $(LDFLAGS) -o $@ plugin_test_1_SOURCES = plugin_test_1.c plugin_test_1_OBJECTS = plugin_test_1.$(OBJEXT) @@ -1854,6 +1854,8 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f +CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) CCLD = $(CC) CXXLD = $(CXX) SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c basic_pie_test.c \ @@ -2025,6 +2027,9 @@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ @@ -2336,7 +2341,7 @@ LDADD = libgoldtest.a ../libgold.a ../../libiberty/libiberty.a $(LIBINTL) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_relocatable_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. @GCC_TRUE@@NATIVE_LINKER_TRUE@two_file_relocatable_test_LDADD = two_file_relocatable.o -@GCC_TRUE@@NATIVE_LINKER_TRUE@pie_copyrelocs_test_SOURCES = pie_copyrelocs_test.cc +@GCC_TRUE@@NATIVE_LINKER_TRUE@pie_copyrelocs_test_SOURCES = pie_copyrelocs_test.S @GCC_TRUE@@NATIVE_LINKER_TRUE@pie_copyrelocs_test_DEPENDENCIES = gcctestdir/ld pie_copyrelocs_shared_test.so @GCC_TRUE@@NATIVE_LINKER_TRUE@pie_copyrelocs_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,. -pie @GCC_TRUE@@NATIVE_LINKER_TRUE@pie_copyrelocs_test_LDADD = pie_copyrelocs_shared_test.so @@ -2741,7 +2746,7 @@ all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .c .cc .html .log .o .obj .test .test$(EXEEXT) +.SUFFIXES: .S .c .cc .html .log .o .obj .test .test$(EXEEXT) $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -3722,6 +3727,20 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weak_undef_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/weak_undef_test_2.Po@am__quote@ +.S.o: +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< + +.S.obj: +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCCAS_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po diff --git a/gold/testsuite/pie_copyrelocs_test.S b/gold/testsuite/pie_copyrelocs_test.S new file mode 100644 index 0000000..733e643 --- /dev/null +++ b/gold/testsuite/pie_copyrelocs_test.S @@ -0,0 +1,38 @@ +// pie_coprelocs_test.S -- a test case for gold + +// Copyright (C) 2014 Free Software Foundation, Inc. + +// This file is part of gold. + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +// MA 02110-1301, USA. + +// Check if copy relocs are used to access globals below when -fpie is +// is not used to compile but -pie is used to link. + + .section .text.startup,"ax",@progbits + .p2align 4,,15 + .globl main + .type main, @function +main: +.LFB0: + .cfi_startproc + movl glob_a(%rip), %eax + addl $-128, %eax + ret + .cfi_endproc +.LFE0: + .size main, .-main + .section .note.GNU-stack,"",@progbits diff --git a/gold/testsuite/pie_copyrelocs_test.cc b/gold/testsuite/pie_copyrelocs_test.cc deleted file mode 100644 index bebe89d..0000000 --- a/gold/testsuite/pie_copyrelocs_test.cc +++ /dev/null @@ -1,31 +0,0 @@ -// pie_coprelocs_test.cc -- a test case for gold - -// Copyright (C) 2014 Free Software Foundation, Inc. -// Written by Sriraman Tallam <tmsriram@google.com>. - -// This file is part of gold. - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, -// MA 02110-1301, USA. - -// Check if copy relocs are used to access globals below when -fpie is -// is not used to compile but -pie is used to link. - -extern int glob_a; - -int main () -{ - return glob_a - 128; -} -- 1.9.3
- Previous message (by thread): [gold][PATCH] PR gold/17675: pie_copyrelocs_test fails with GCC 4.2
- Next message (by thread): [PATCH 0/6] binutils port for the Visium
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list