On Thu, Nov 29, 2012 at 11:06 AM, Jakub Jelinek <ja...@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.