This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Add --with-build-config=bootstrap-asan support


On Thu, Nov 29, 2012 at 11:06 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Thu, Nov 29, 2012 at 07:24:38PM +0100, Paolo Carlini wrote:
>> On 11/29/2012 06:36 PM, Tobias Burnus wrote:
>> >H.J. Lu wrote:
>> >>This patch adds --with-build-config=bootstrap-asan support.  Tested on
>> >>Linux/x86-64.  OK to install?
>> >
>> >I think that patch has broken bootstrap for me. If I do a normal
>> >bootstrap, Stage1 fails with:
>> >
>> >libtool: compile: unrecognized option `-D_GNU_SOURCE'
>> >libtool: compile: Try `libtool --help' for more information.
>> >make[4]: *** [interception_linux.lo] Error 1
>> >make[4]: Leaving directory `/home/burnus/gcc/build/x86_64-unknown-linux-gnu/libsanitizer/interception'
>> Likewise here. Would it be possible to revert the offending commit,
>> in the meanwhile?
>
> Yes, H.J., please revert the patch, I thought you have tested it alone

Done.

> without any further patches.  For the -I patch, I really would prefer if
> libsanitizer just had a dependency on libstdc++ at toplevel
> (configure-target-sanitizer depending on all-target-libstdc++-v3),
> then you can (and similarly for host variants if we need host sanitizer at
> all).  Then you should be able to use scripts/testsuite_flags
> --build-includes just fine.
>

>From Makefile.tpl:

@if target-libstdc++-v3
# CXX_FOR_TARGET is tricky to get right for target libs that require a
# functional C++ compiler.  When we recurse, if we expand
# CXX_FOR_TARGET before configuring libstdc++-v3, we won't get
# libstdc++ include flags from the script.  Instead, we get an
# -funconfigured-* word, so that we'll get errors if this invalid C++
# command line is used for anything, but also so that we can use the
# word to decide whether or not to pass on this CXX_FOR_TARGET.  If we
# don't pass it on, sub-make will use the default definition, that
# re-expands it at the time of use, so we'll get it right when we need
# it.  One potential exception is the expansion of CXX_FOR_TARGET
# passed down as part of CXX within TARGET_FLAGS, but this wouldn't
# really work, for C++ host programs can't depend on the current-stage
# C++ target library.
CXX_FOR_TARGET_FLAG_TO_PASS = \
        $(shell if echo "$(CXX_FOR_TARGET)" | grep " -funconfigured-"
> /dev/null; then :; else echo '"CXX_FOR_TARGET=$(CXX_FOR_TARGET)"';
fi)
@endif target-libstdc++-v3

bootstrap library in C++ has raw_cxx=true and

CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/gcc/g++
-B$$r/$(HOST_SUBDIR)/gcc/ -nostdinc++ `if test -f
$$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags; then
$(SHELL) $$r/$(TARGET_SUBDIR)/libstdc++-v3/scripts/testsuite_flags
--build-includes; else echo -funconfigured-libstdc++-v3 ; fi`
-L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src
-L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs
RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/gcc/xgcc
-shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++
-L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src
-L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs

That is why we need to explicit -I for libstdc++ header files.
If we remove raw_cxx=true from bootstrap C++ library, which
include libstdc++ and libjava, they won't compile for multitib.
scripts/testsuite_flags can not be used to compile bootstrap library
in C++.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]