Message ID | 20121129174031.GA31369@intel.com |
---|---|
State | New |
Headers | show |
On Thu, Nov 29, 2012 at 6:40 PM, H.J. Lu <hongjiu.lu@intel.com> wrote: > Hi, > > When GCC is configured with --with-build-config="bootstrap-asan", all > -flto tests will fail since -fsanitize=address is used to compile host > libiberty, which is used to create liblto_plugin.so, and linker isn't > compiled with -fsanitize=address. This patch filters out > -fsanitize=address from CFLAGS if we aren't in a combined tree with > binutils. OK to install? Why not simply ensure that only host _executables_ are sanitized? Richard. > Thanks. > > H.J. > --- > 2012-11-21 H.J. Lu <hongjiu.lu@intel.com> > > * Makefile.in (CFLAGS): Filter out -fsanitize=address if in GCC > tree, but not in a combined tree with binutils. > * configure.ac (COMBINED_TREE_FALSE): New AC_SUBST. > * configure: Regenerated. > > diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in > index 1ba8cf1..2d357d7 100644 > --- a/libiberty/Makefile.in > +++ b/libiberty/Makefile.in > @@ -63,6 +63,10 @@ PERL = @PERL@ > > PICFLAG = @PICFLAG@ > > +# Filter out -fsanitize=address if we are in GCC tree, but aren't in a > +# combined tree with binutils. > +@COMBINED_TREE_FALSE@override CFLAGS := $(filter-out -fsanitize=address,$(CFLAGS)) > + > MAKEOVERRIDES = > > TARGETLIB = ./libiberty.a > diff --git a/libiberty/configure b/libiberty/configure > index 5367027..4869cd5 100755 > --- a/libiberty/configure > +++ b/libiberty/configure > @@ -590,6 +590,7 @@ ac_includes_default="\ > > ac_subst_vars='LTLIBOBJS > INSTALL_DEST > +COMBINED_TREE_FALSE > pexecute > target_header_dir > CHECK > @@ -6917,6 +6918,20 @@ esac > fi > > > +# Check if this is in GCC tree, but aren't in a combined tree with > +# binutils. > +if test -e ${srcdir}/../gcc/gcc.c; then > + if test -e ${srcdir}/../ld/ldmain.c -o \ > + -e ${top_srcdir}/../gold/version.cc; then > + COMBINED_TREE_FALSE='#' > + else > + COMBINED_TREE_FALSE='' > + fi > +else > + COMBINED_TREE_FALSE='#' > +fi > + > + > # Install a library built with a cross compiler in $(tooldir) rather > # than $(libdir). > if test -z "${with_cross_host}"; then > diff --git a/libiberty/configure.ac b/libiberty/configure.ac > index c763894..7661752 100644 > --- a/libiberty/configure.ac > +++ b/libiberty/configure.ac > @@ -670,6 +670,20 @@ AC_SUBST(pexecute) > > libiberty_AC_FUNC_STRNCMP > > +# Check if this is in GCC tree, but aren't in a combined tree with > +# binutils. > +if test -e ${srcdir}/../gcc/gcc.c; then > + if test -e ${srcdir}/../ld/ldmain.c -o \ > + -e ${top_srcdir}/../gold/version.cc; then > + COMBINED_TREE_FALSE='#' > + else > + COMBINED_TREE_FALSE='' > + fi > +else > + COMBINED_TREE_FALSE='#' > +fi > +AC_SUBST(COMBINED_TREE_FALSE) > + > # Install a library built with a cross compiler in $(tooldir) rather > # than $(libdir). > if test -z "${with_cross_host}"; then > -- > 1.7.11.7 >
On Fri, Nov 30, 2012 at 12:45 AM, Richard Biener <richard.guenther@gmail.com> wrote: > On Thu, Nov 29, 2012 at 6:40 PM, H.J. Lu <hongjiu.lu@intel.com> wrote: >> Hi, >> >> When GCC is configured with --with-build-config="bootstrap-asan", all >> -flto tests will fail since -fsanitize=address is used to compile host >> libiberty, which is used to create liblto_plugin.so, and linker isn't >> compiled with -fsanitize=address. This patch filters out >> -fsanitize=address from CFLAGS if we aren't in a combined tree with >> binutils. OK to install? > > Why not simply ensure that only host _executables_ are sanitized? > Host libiberty library is used to create both host executables and host plugins. We don't have separate host libiberty libraries for them.
On Fri, Nov 30, 2012 at 2:17 PM, H.J. Lu <hjl.tools@gmail.com> wrote: > On Fri, Nov 30, 2012 at 12:45 AM, Richard Biener > <richard.guenther@gmail.com> wrote: >> On Thu, Nov 29, 2012 at 6:40 PM, H.J. Lu <hongjiu.lu@intel.com> wrote: >>> Hi, >>> >>> When GCC is configured with --with-build-config="bootstrap-asan", all >>> -flto tests will fail since -fsanitize=address is used to compile host >>> libiberty, which is used to create liblto_plugin.so, and linker isn't >>> compiled with -fsanitize=address. This patch filters out >>> -fsanitize=address from CFLAGS if we aren't in a combined tree with >>> binutils. OK to install? >> >> Why not simply ensure that only host _executables_ are sanitized? >> > > Host libiberty library is used to create both host executables and > host plugins. We don't have separate host libiberty libraries for them. So don't instrument libiberty then. Richard. > > -- > H.J.
On Fri, Nov 30, 2012 at 5:30 AM, Richard Biener <richard.guenther@gmail.com> wrote: > On Fri, Nov 30, 2012 at 2:17 PM, H.J. Lu <hjl.tools@gmail.com> wrote: >> On Fri, Nov 30, 2012 at 12:45 AM, Richard Biener >> <richard.guenther@gmail.com> wrote: >>> On Thu, Nov 29, 2012 at 6:40 PM, H.J. Lu <hongjiu.lu@intel.com> wrote: >>>> Hi, >>>> >>>> When GCC is configured with --with-build-config="bootstrap-asan", all >>>> -flto tests will fail since -fsanitize=address is used to compile host >>>> libiberty, which is used to create liblto_plugin.so, and linker isn't >>>> compiled with -fsanitize=address. This patch filters out >>>> -fsanitize=address from CFLAGS if we aren't in a combined tree with >>>> binutils. OK to install? >>> >>> Why not simply ensure that only host _executables_ are sanitized? >>> >> >> Host libiberty library is used to create both host executables and >> host plugins. We don't have separate host libiberty libraries for them. > > So don't instrument libiberty then. > When you bootstrap, all host libraries are compiled with the same CFLAGS as gcc itself in 3 stages. That means stage2 and stage3 libiberty are compiled with -fsanitize=address if it is added to stage2/stage3 CFLAGS for gcc. My patch filters it out when compiling stage2/stage3 libiberty.
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in index 1ba8cf1..2d357d7 100644 --- a/libiberty/Makefile.in +++ b/libiberty/Makefile.in @@ -63,6 +63,10 @@ PERL = @PERL@ PICFLAG = @PICFLAG@ +# Filter out -fsanitize=address if we are in GCC tree, but aren't in a +# combined tree with binutils. +@COMBINED_TREE_FALSE@override CFLAGS := $(filter-out -fsanitize=address,$(CFLAGS)) + MAKEOVERRIDES = TARGETLIB = ./libiberty.a diff --git a/libiberty/configure b/libiberty/configure index 5367027..4869cd5 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -590,6 +590,7 @@ ac_includes_default="\ ac_subst_vars='LTLIBOBJS INSTALL_DEST +COMBINED_TREE_FALSE pexecute target_header_dir CHECK @@ -6917,6 +6918,20 @@ esac fi +# Check if this is in GCC tree, but aren't in a combined tree with +# binutils. +if test -e ${srcdir}/../gcc/gcc.c; then + if test -e ${srcdir}/../ld/ldmain.c -o \ + -e ${top_srcdir}/../gold/version.cc; then + COMBINED_TREE_FALSE='#' + else + COMBINED_TREE_FALSE='' + fi +else + COMBINED_TREE_FALSE='#' +fi + + # Install a library built with a cross compiler in $(tooldir) rather # than $(libdir). if test -z "${with_cross_host}"; then diff --git a/libiberty/configure.ac b/libiberty/configure.ac index c763894..7661752 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -670,6 +670,20 @@ AC_SUBST(pexecute) libiberty_AC_FUNC_STRNCMP +# Check if this is in GCC tree, but aren't in a combined tree with +# binutils. +if test -e ${srcdir}/../gcc/gcc.c; then + if test -e ${srcdir}/../ld/ldmain.c -o \ + -e ${top_srcdir}/../gold/version.cc; then + COMBINED_TREE_FALSE='#' + else + COMBINED_TREE_FALSE='' + fi +else + COMBINED_TREE_FALSE='#' +fi +AC_SUBST(COMBINED_TREE_FALSE) + # Install a library built with a cross compiler in $(tooldir) rather # than $(libdir). if test -z "${with_cross_host}"; then