diff mbox

Don't bootstrap libsanitizer or libvtv unless needed

Message ID 20140320122450.GJ1817@tucnak.redhat.com
State New
Headers show

Commit Message

Jakub Jelinek March 20, 2014, 12:24 p.m. UTC
Hi!

We currently bootstrap both libsanitizer and libvtv, the former
just in case somebody decides to --with-build-config=bootstrap-asan
(or --with-build-config=bootstrap-ubsan), the latter if somebody decides
to --enable-vtable-verify.

This patch changes it so that we only bootstrap libsanitizer if
bootstrap-asan or bootstrap-ubsan is in BOOT_CONFIG, and only bootstrap
libvtv if --enable-vtable-verify.

Bootstrapped/regtested on x86_64-linux and i686-linux, on x86_64 it
saved a few minutes of build time, neither libsanitizer nor libvtv
has been bootstrapped, only built in stage3.
Currently also bootstrapping on i686-linux with
--enable-vtable-verify --with-build-config=bootstrap-asan
but already got into stage2 and verified that both libsanitizer and libvtv
are being bootstrapped in that case.

Ok for trunk?

2014-03-20  Jakub Jelinek  <jakub@redhat.com>

	* configure.ac: Move BUILD_CONFIG set up earlier.  Add
	--enable-vtable-verify option parsing.  Don't add
	target-libsanitizer to bootstrap_target_libs unless
	--with-build-config=bootstrap-asan or
	--with-build-config=bootstrap-ubsan.  Don't add target-libvtv
	to bootstrap_target_libs unless --enable-vtable-verify.
	* configure: Regenerated.


	Jakub

Comments

Richard Biener March 20, 2014, 12:28 p.m. UTC | #1
On Thu, 20 Mar 2014, Jakub Jelinek wrote:

> Hi!
> 
> We currently bootstrap both libsanitizer and libvtv, the former
> just in case somebody decides to --with-build-config=bootstrap-asan
> (or --with-build-config=bootstrap-ubsan), the latter if somebody decides
> to --enable-vtable-verify.
> 
> This patch changes it so that we only bootstrap libsanitizer if
> bootstrap-asan or bootstrap-ubsan is in BOOT_CONFIG, and only bootstrap
> libvtv if --enable-vtable-verify.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, on x86_64 it
> saved a few minutes of build time, neither libsanitizer nor libvtv
> has been bootstrapped, only built in stage3.
> Currently also bootstrapping on i686-linux with
> --enable-vtable-verify --with-build-config=bootstrap-asan
> but already got into stage2 and verified that both libsanitizer and libvtv
> are being bootstrapped in that case.
> 
> Ok for trunk?

Fine with me though I'd like to see the build of libvtv disabled
alltogether if not --enable-vtable-verify as the build/install is
quite useless without building the startfiles referenced at link-time
when doing -fvtable-verify=XY (Caroline also thinks that not
instrumenting libstdc++ will make most use-cases fail).

Easy to do as followup though.

Thanks,
Richard.

> 2014-03-20  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* configure.ac: Move BUILD_CONFIG set up earlier.  Add
> 	--enable-vtable-verify option parsing.  Don't add
> 	target-libsanitizer to bootstrap_target_libs unless
> 	--with-build-config=bootstrap-asan or
> 	--with-build-config=bootstrap-ubsan.  Don't add target-libvtv
> 	to bootstrap_target_libs unless --enable-vtable-verify.
> 	* configure: Regenerated.
> 
> --- configure.ac.jj	2014-03-03 08:24:36.000000000 +0100
> +++ configure.ac	2014-03-20 09:47:17.676017039 +0100
> @@ -2472,6 +2472,62 @@ else
>    GCC_SHLIB_SUBDIR=
>  fi
>  
> +# Adjust the toplevel makefile according to whether bootstrap was selected.
> +case $enable_bootstrap in
> +  yes)
> +    bootstrap_suffix=bootstrap
> +    BUILD_CONFIG=bootstrap-debug
> +    ;;
> +  no)
> +    bootstrap_suffix=no-bootstrap
> +    BUILD_CONFIG=
> +    ;;
> +esac
> +
> +AC_MSG_CHECKING(for default BUILD_CONFIG)
> +
> +AC_ARG_WITH([build-config],
> +  [AS_HELP_STRING([--with-build-config='NAME NAME2...'],
> +		  [use config/NAME.mk build configuration])],
> +  [case $with_build_config in
> +   yes) with_build_config= ;;
> +   no) with_build_config= BUILD_CONFIG= ;;
> +   esac])
> +
> +if test "x${with_build_config}" != x; then
> +  BUILD_CONFIG=$with_build_config
> +else
> +  case $BUILD_CONFIG in
> +  bootstrap-debug)
> +    if echo "int f (void) { return 0; }" > conftest.c &&
> +       ${CC} -c conftest.c &&
> +       mv conftest.o conftest.o.g0 &&
> +       ${CC} -c -g conftest.c &&
> +       mv conftest.o conftest.o.g &&
> +       ${srcdir}/contrib/compare-debug conftest.o.g0 conftest.o.g > /dev/null 2>&1; then
> +      :
> +    else
> +      BUILD_CONFIG=
> +    fi
> +    rm -f conftest.c conftest.o conftest.o.g0 conftest.o.g
> +    ;;
> +  esac
> +fi
> +AC_MSG_RESULT($BUILD_CONFIG)
> +AC_SUBST(BUILD_CONFIG)
> +
> +# Use same top-level configure hooks in libgcc/libstdc++/libvtv.
> +AC_MSG_CHECKING([for --enable-vtable-verify])
> +AC_ARG_ENABLE(vtable-verify,
> +[  --enable-vtable-verify    Enable vtable verification feature ],
> +[case "$enableval" in
> + yes) enable_vtable_verify=yes ;;
> + no)  enable_vtable_verify=no ;;
> + *)   enable_vtable_verify=no;;
> + esac],
> +[enable_vtable_verify=no])
> +AC_MSG_RESULT($enable_vtable_verify)
> +
>  # Record target_configdirs and the configure arguments for target and
>  # build configuration in Makefile.
>  target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
> @@ -2482,13 +2538,19 @@ if echo " ${target_configdirs} " | grep
>    bootstrap_target_libs=${bootstrap_target_libs}target-libgomp,
>  fi
>  
> -# If we are building libsanitizer, bootstrap it.
> -if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1 ; then
> -  bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
> +# If we are building libsanitizer and $BUILD_CONFIG contains bootstrap-asan
> +# or bootstrap-ubsan, bootstrap it.
> +if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then
> +  case "$BUILD_CONFIG" in
> +    *bootstrap-asan* | *bootstrap-ubsan* )
> +      bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
> +      ;;
> +  esac
>  fi
>  
> -# If we are building libvtv, bootstrap it.
> -if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 ; then
> +# If we are building libvtv and --enable-vtable-verify, bootstrap it.
> +if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 &&
> +   test "$enable_vtable_verify" != no; then
>    bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
>  fi
>  
> @@ -2541,50 +2603,6 @@ case "$enable_bootstrap:$ENABLE_GOLD: $c
>      ;;
>  esac
>  
> -# Adjust the toplevel makefile according to whether bootstrap was selected.
> -case $enable_bootstrap in
> -  yes)
> -    bootstrap_suffix=bootstrap
> -    BUILD_CONFIG=bootstrap-debug
> -    ;;
> -  no)
> -    bootstrap_suffix=no-bootstrap
> -    BUILD_CONFIG=
> -    ;;
> -esac
> -
> -AC_MSG_CHECKING(for default BUILD_CONFIG)
> -
> -AC_ARG_WITH([build-config],
> -  [AS_HELP_STRING([--with-build-config='NAME NAME2...'],
> -		  [use config/NAME.mk build configuration])],
> -  [case $with_build_config in
> -   yes) with_build_config= ;;
> -   no) with_build_config= BUILD_CONFIG= ;;
> -   esac])
> -
> -if test "x${with_build_config}" != x; then
> -  BUILD_CONFIG=$with_build_config
> -else
> -  case $BUILD_CONFIG in
> -  bootstrap-debug)
> -    if echo "int f (void) { return 0; }" > conftest.c &&
> -       ${CC} -c conftest.c &&
> -       mv conftest.o conftest.o.g0 &&
> -       ${CC} -c -g conftest.c &&
> -       mv conftest.o conftest.o.g &&
> -       ${srcdir}/contrib/compare-debug conftest.o.g0 conftest.o.g > /dev/null 2>&1; then
> -      :
> -    else
> -      BUILD_CONFIG=
> -    fi
> -    rm -f conftest.c conftest.o conftest.o.g0 conftest.o.g
> -    ;;
> -  esac
> -fi
> -AC_MSG_RESULT($BUILD_CONFIG)
> -AC_SUBST(BUILD_CONFIG)
> -
>  extrasub_build=
>  for module in ${build_configdirs} ; do
>    if test -z "${no_recursion}" \
> --- configure.jj	2014-03-03 08:24:36.000000000 +0100
> +++ configure	2014-03-20 09:47:56.351808880 +0100
> @@ -783,6 +783,7 @@ enable_objc_gc
>  with_build_sysroot
>  with_debug_prefix_map
>  with_build_config
> +enable_vtable_verify
>  enable_serial_configure
>  with_build_time_tools
>  enable_maintainer_mode
> @@ -1481,6 +1482,7 @@ Optional Features:
>                            Mostly useful for compiler development
>    --enable-objc-gc        enable use of Boehm's garbage collector with the GNU
>                            Objective-C runtime
> +  --enable-vtable-verify    Enable vtable verification feature
>    --enable-serial-[{host,target,build}-]configure
>                            force sequential configuration of sub-packages for
>                            the host, target or build machine, or all
> @@ -7092,6 +7094,71 @@ else
>    GCC_SHLIB_SUBDIR=
>  fi
>  
> +# Adjust the toplevel makefile according to whether bootstrap was selected.
> +case $enable_bootstrap in
> +  yes)
> +    bootstrap_suffix=bootstrap
> +    BUILD_CONFIG=bootstrap-debug
> +    ;;
> +  no)
> +    bootstrap_suffix=no-bootstrap
> +    BUILD_CONFIG=
> +    ;;
> +esac
> +
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default BUILD_CONFIG" >&5
> +$as_echo_n "checking for default BUILD_CONFIG... " >&6; }
> +
> +
> +# Check whether --with-build-config was given.
> +if test "${with_build_config+set}" = set; then :
> +  withval=$with_build_config; case $with_build_config in
> +   yes) with_build_config= ;;
> +   no) with_build_config= BUILD_CONFIG= ;;
> +   esac
> +fi
> +
> +
> +if test "x${with_build_config}" != x; then
> +  BUILD_CONFIG=$with_build_config
> +else
> +  case $BUILD_CONFIG in
> +  bootstrap-debug)
> +    if echo "int f (void) { return 0; }" > conftest.c &&
> +       ${CC} -c conftest.c &&
> +       mv conftest.o conftest.o.g0 &&
> +       ${CC} -c -g conftest.c &&
> +       mv conftest.o conftest.o.g &&
> +       ${srcdir}/contrib/compare-debug conftest.o.g0 conftest.o.g > /dev/null 2>&1; then
> +      :
> +    else
> +      BUILD_CONFIG=
> +    fi
> +    rm -f conftest.c conftest.o conftest.o.g0 conftest.o.g
> +    ;;
> +  esac
> +fi
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CONFIG" >&5
> +$as_echo "$BUILD_CONFIG" >&6; }
> +
> +
> +# Use same top-level configure hooks in libgcc/libstdc++/libvtv.
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-vtable-verify" >&5
> +$as_echo_n "checking for --enable-vtable-verify... " >&6; }
> +# Check whether --enable-vtable-verify was given.
> +if test "${enable_vtable_verify+set}" = set; then :
> +  enableval=$enable_vtable_verify; case "$enableval" in
> + yes) enable_vtable_verify=yes ;;
> + no)  enable_vtable_verify=no ;;
> + *)   enable_vtable_verify=no;;
> + esac
> +else
> +  enable_vtable_verify=no
> +fi
> +
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_vtable_verify" >&5
> +$as_echo "$enable_vtable_verify" >&6; }
> +
>  # Record target_configdirs and the configure arguments for target and
>  # build configuration in Makefile.
>  target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
> @@ -7102,13 +7169,19 @@ if echo " ${target_configdirs} " | grep
>    bootstrap_target_libs=${bootstrap_target_libs}target-libgomp,
>  fi
>  
> -# If we are building libsanitizer, bootstrap it.
> -if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1 ; then
> -  bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
> +# If we are building libsanitizer and $BUILD_CONFIG contains bootstrap-asan
> +# or bootstrap-ubsan, bootstrap it.
> +if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then
> +  case "$BUILD_CONFIG" in
> +    *bootstrap-asan* | *bootstrap-ubsan* )
> +      bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
> +      ;;
> +  esac
>  fi
>  
> -# If we are building libvtv, bootstrap it.
> -if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 ; then
> +# If we are building libvtv and --enable-vtable-verify, bootstrap it.
> +if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 &&
> +   test "$enable_vtable_verify" != no; then
>    bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
>  fi
>  
> @@ -7161,54 +7234,6 @@ case "$enable_bootstrap:$ENABLE_GOLD: $c
>      ;;
>  esac
>  
> -# Adjust the toplevel makefile according to whether bootstrap was selected.
> -case $enable_bootstrap in
> -  yes)
> -    bootstrap_suffix=bootstrap
> -    BUILD_CONFIG=bootstrap-debug
> -    ;;
> -  no)
> -    bootstrap_suffix=no-bootstrap
> -    BUILD_CONFIG=
> -    ;;
> -esac
> -
> -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default BUILD_CONFIG" >&5
> -$as_echo_n "checking for default BUILD_CONFIG... " >&6; }
> -
> -
> -# Check whether --with-build-config was given.
> -if test "${with_build_config+set}" = set; then :
> -  withval=$with_build_config; case $with_build_config in
> -   yes) with_build_config= ;;
> -   no) with_build_config= BUILD_CONFIG= ;;
> -   esac
> -fi
> -
> -
> -if test "x${with_build_config}" != x; then
> -  BUILD_CONFIG=$with_build_config
> -else
> -  case $BUILD_CONFIG in
> -  bootstrap-debug)
> -    if echo "int f (void) { return 0; }" > conftest.c &&
> -       ${CC} -c conftest.c &&
> -       mv conftest.o conftest.o.g0 &&
> -       ${CC} -c -g conftest.c &&
> -       mv conftest.o conftest.o.g &&
> -       ${srcdir}/contrib/compare-debug conftest.o.g0 conftest.o.g > /dev/null 2>&1; then
> -      :
> -    else
> -      BUILD_CONFIG=
> -    fi
> -    rm -f conftest.c conftest.o conftest.o.g0 conftest.o.g
> -    ;;
> -  esac
> -fi
> -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CONFIG" >&5
> -$as_echo "$BUILD_CONFIG" >&6; }
> -
> -
>  extrasub_build=
>  for module in ${build_configdirs} ; do
>    if test -z "${no_recursion}" \
> 
> 	Jakub
> 
>
Paolo Bonzini March 25, 2014, 4:36 p.m. UTC | #2
Il 20/03/2014 13:24, Jakub Jelinek ha scritto:
> Hi!
>
> We currently bootstrap both libsanitizer and libvtv, the former
> just in case somebody decides to --with-build-config=bootstrap-asan
> (or --with-build-config=bootstrap-ubsan), the latter if somebody decides
> to --enable-vtable-verify.
>
> This patch changes it so that we only bootstrap libsanitizer if
> bootstrap-asan or bootstrap-ubsan is in BOOT_CONFIG, and only bootstrap
> libvtv if --enable-vtable-verify.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, on x86_64 it
> saved a few minutes of build time, neither libsanitizer nor libvtv
> has been bootstrapped, only built in stage3.
> Currently also bootstrapping on i686-linux with
> --enable-vtable-verify --with-build-config=bootstrap-asan
> but already got into stage2 and verified that both libsanitizer and libvtv
> are being bootstrapped in that case.
>
> Ok for trunk?
>
> 2014-03-20  Jakub Jelinek  <jakub@redhat.com>
>
> 	* configure.ac: Move BUILD_CONFIG set up earlier.  Add
> 	--enable-vtable-verify option parsing.  Don't add
> 	target-libsanitizer to bootstrap_target_libs unless
> 	--with-build-config=bootstrap-asan or
> 	--with-build-config=bootstrap-ubsan.  Don't add target-libvtv
> 	to bootstrap_target_libs unless --enable-vtable-verify.
> 	* configure: Regenerated.

Is the extra complication really worth saving a few minutes of compile time?

Paolo
Jakub Jelinek March 25, 2014, 4:38 p.m. UTC | #3
On Tue, Mar 25, 2014 at 05:36:54PM +0100, Paolo Bonzini wrote:
> Il 20/03/2014 13:24, Jakub Jelinek ha scritto:
> >We currently bootstrap both libsanitizer and libvtv, the former
> >just in case somebody decides to --with-build-config=bootstrap-asan
> >(or --with-build-config=bootstrap-ubsan), the latter if somebody decides
> >to --enable-vtable-verify.
> >
> >This patch changes it so that we only bootstrap libsanitizer if
> >bootstrap-asan or bootstrap-ubsan is in BOOT_CONFIG, and only bootstrap
> >libvtv if --enable-vtable-verify.
> >
> >Bootstrapped/regtested on x86_64-linux and i686-linux, on x86_64 it
> >saved a few minutes of build time, neither libsanitizer nor libvtv
> >has been bootstrapped, only built in stage3.
> >Currently also bootstrapping on i686-linux with
> >--enable-vtable-verify --with-build-config=bootstrap-asan
> >but already got into stage2 and verified that both libsanitizer and libvtv
> >are being bootstrapped in that case.
> >
> >Ok for trunk?
> >
> >2014-03-20  Jakub Jelinek  <jakub@redhat.com>
> >
> >	* configure.ac: Move BUILD_CONFIG set up earlier.  Add
> >	--enable-vtable-verify option parsing.  Don't add
> >	target-libsanitizer to bootstrap_target_libs unless
> >	--with-build-config=bootstrap-asan or
> >	--with-build-config=bootstrap-ubsan.  Don't add target-libvtv
> >	to bootstrap_target_libs unless --enable-vtable-verify.
> >	* configure: Regenerated.
> 
> Is the extra complication really worth saving a few minutes of compile time?

IMHO yes, saving around 5-10 minutes of x86_64 bootstraps that you perform
several times a day is worth it.

	Jakub
diff mbox

Patch

--- configure.ac.jj	2014-03-03 08:24:36.000000000 +0100
+++ configure.ac	2014-03-20 09:47:17.676017039 +0100
@@ -2472,6 +2472,62 @@  else
   GCC_SHLIB_SUBDIR=
 fi
 
+# Adjust the toplevel makefile according to whether bootstrap was selected.
+case $enable_bootstrap in
+  yes)
+    bootstrap_suffix=bootstrap
+    BUILD_CONFIG=bootstrap-debug
+    ;;
+  no)
+    bootstrap_suffix=no-bootstrap
+    BUILD_CONFIG=
+    ;;
+esac
+
+AC_MSG_CHECKING(for default BUILD_CONFIG)
+
+AC_ARG_WITH([build-config],
+  [AS_HELP_STRING([--with-build-config='NAME NAME2...'],
+		  [use config/NAME.mk build configuration])],
+  [case $with_build_config in
+   yes) with_build_config= ;;
+   no) with_build_config= BUILD_CONFIG= ;;
+   esac])
+
+if test "x${with_build_config}" != x; then
+  BUILD_CONFIG=$with_build_config
+else
+  case $BUILD_CONFIG in
+  bootstrap-debug)
+    if echo "int f (void) { return 0; }" > conftest.c &&
+       ${CC} -c conftest.c &&
+       mv conftest.o conftest.o.g0 &&
+       ${CC} -c -g conftest.c &&
+       mv conftest.o conftest.o.g &&
+       ${srcdir}/contrib/compare-debug conftest.o.g0 conftest.o.g > /dev/null 2>&1; then
+      :
+    else
+      BUILD_CONFIG=
+    fi
+    rm -f conftest.c conftest.o conftest.o.g0 conftest.o.g
+    ;;
+  esac
+fi
+AC_MSG_RESULT($BUILD_CONFIG)
+AC_SUBST(BUILD_CONFIG)
+
+# Use same top-level configure hooks in libgcc/libstdc++/libvtv.
+AC_MSG_CHECKING([for --enable-vtable-verify])
+AC_ARG_ENABLE(vtable-verify,
+[  --enable-vtable-verify    Enable vtable verification feature ],
+[case "$enableval" in
+ yes) enable_vtable_verify=yes ;;
+ no)  enable_vtable_verify=no ;;
+ *)   enable_vtable_verify=no;;
+ esac],
+[enable_vtable_verify=no])
+AC_MSG_RESULT($enable_vtable_verify)
+
 # Record target_configdirs and the configure arguments for target and
 # build configuration in Makefile.
 target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
@@ -2482,13 +2538,19 @@  if echo " ${target_configdirs} " | grep
   bootstrap_target_libs=${bootstrap_target_libs}target-libgomp,
 fi
 
-# If we are building libsanitizer, bootstrap it.
-if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1 ; then
-  bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
+# If we are building libsanitizer and $BUILD_CONFIG contains bootstrap-asan
+# or bootstrap-ubsan, bootstrap it.
+if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then
+  case "$BUILD_CONFIG" in
+    *bootstrap-asan* | *bootstrap-ubsan* )
+      bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
+      ;;
+  esac
 fi
 
-# If we are building libvtv, bootstrap it.
-if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 ; then
+# If we are building libvtv and --enable-vtable-verify, bootstrap it.
+if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 &&
+   test "$enable_vtable_verify" != no; then
   bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
 fi
 
@@ -2541,50 +2603,6 @@  case "$enable_bootstrap:$ENABLE_GOLD: $c
     ;;
 esac
 
-# Adjust the toplevel makefile according to whether bootstrap was selected.
-case $enable_bootstrap in
-  yes)
-    bootstrap_suffix=bootstrap
-    BUILD_CONFIG=bootstrap-debug
-    ;;
-  no)
-    bootstrap_suffix=no-bootstrap
-    BUILD_CONFIG=
-    ;;
-esac
-
-AC_MSG_CHECKING(for default BUILD_CONFIG)
-
-AC_ARG_WITH([build-config],
-  [AS_HELP_STRING([--with-build-config='NAME NAME2...'],
-		  [use config/NAME.mk build configuration])],
-  [case $with_build_config in
-   yes) with_build_config= ;;
-   no) with_build_config= BUILD_CONFIG= ;;
-   esac])
-
-if test "x${with_build_config}" != x; then
-  BUILD_CONFIG=$with_build_config
-else
-  case $BUILD_CONFIG in
-  bootstrap-debug)
-    if echo "int f (void) { return 0; }" > conftest.c &&
-       ${CC} -c conftest.c &&
-       mv conftest.o conftest.o.g0 &&
-       ${CC} -c -g conftest.c &&
-       mv conftest.o conftest.o.g &&
-       ${srcdir}/contrib/compare-debug conftest.o.g0 conftest.o.g > /dev/null 2>&1; then
-      :
-    else
-      BUILD_CONFIG=
-    fi
-    rm -f conftest.c conftest.o conftest.o.g0 conftest.o.g
-    ;;
-  esac
-fi
-AC_MSG_RESULT($BUILD_CONFIG)
-AC_SUBST(BUILD_CONFIG)
-
 extrasub_build=
 for module in ${build_configdirs} ; do
   if test -z "${no_recursion}" \
--- configure.jj	2014-03-03 08:24:36.000000000 +0100
+++ configure	2014-03-20 09:47:56.351808880 +0100
@@ -783,6 +783,7 @@  enable_objc_gc
 with_build_sysroot
 with_debug_prefix_map
 with_build_config
+enable_vtable_verify
 enable_serial_configure
 with_build_time_tools
 enable_maintainer_mode
@@ -1481,6 +1482,7 @@  Optional Features:
                           Mostly useful for compiler development
   --enable-objc-gc        enable use of Boehm's garbage collector with the GNU
                           Objective-C runtime
+  --enable-vtable-verify    Enable vtable verification feature
   --enable-serial-[{host,target,build}-]configure
                           force sequential configuration of sub-packages for
                           the host, target or build machine, or all
@@ -7092,6 +7094,71 @@  else
   GCC_SHLIB_SUBDIR=
 fi
 
+# Adjust the toplevel makefile according to whether bootstrap was selected.
+case $enable_bootstrap in
+  yes)
+    bootstrap_suffix=bootstrap
+    BUILD_CONFIG=bootstrap-debug
+    ;;
+  no)
+    bootstrap_suffix=no-bootstrap
+    BUILD_CONFIG=
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default BUILD_CONFIG" >&5
+$as_echo_n "checking for default BUILD_CONFIG... " >&6; }
+
+
+# Check whether --with-build-config was given.
+if test "${with_build_config+set}" = set; then :
+  withval=$with_build_config; case $with_build_config in
+   yes) with_build_config= ;;
+   no) with_build_config= BUILD_CONFIG= ;;
+   esac
+fi
+
+
+if test "x${with_build_config}" != x; then
+  BUILD_CONFIG=$with_build_config
+else
+  case $BUILD_CONFIG in
+  bootstrap-debug)
+    if echo "int f (void) { return 0; }" > conftest.c &&
+       ${CC} -c conftest.c &&
+       mv conftest.o conftest.o.g0 &&
+       ${CC} -c -g conftest.c &&
+       mv conftest.o conftest.o.g &&
+       ${srcdir}/contrib/compare-debug conftest.o.g0 conftest.o.g > /dev/null 2>&1; then
+      :
+    else
+      BUILD_CONFIG=
+    fi
+    rm -f conftest.c conftest.o conftest.o.g0 conftest.o.g
+    ;;
+  esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CONFIG" >&5
+$as_echo "$BUILD_CONFIG" >&6; }
+
+
+# Use same top-level configure hooks in libgcc/libstdc++/libvtv.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-vtable-verify" >&5
+$as_echo_n "checking for --enable-vtable-verify... " >&6; }
+# Check whether --enable-vtable-verify was given.
+if test "${enable_vtable_verify+set}" = set; then :
+  enableval=$enable_vtable_verify; case "$enableval" in
+ yes) enable_vtable_verify=yes ;;
+ no)  enable_vtable_verify=no ;;
+ *)   enable_vtable_verify=no;;
+ esac
+else
+  enable_vtable_verify=no
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_vtable_verify" >&5
+$as_echo "$enable_vtable_verify" >&6; }
+
 # Record target_configdirs and the configure arguments for target and
 # build configuration in Makefile.
 target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'`
@@ -7102,13 +7169,19 @@  if echo " ${target_configdirs} " | grep
   bootstrap_target_libs=${bootstrap_target_libs}target-libgomp,
 fi
 
-# If we are building libsanitizer, bootstrap it.
-if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1 ; then
-  bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
+# If we are building libsanitizer and $BUILD_CONFIG contains bootstrap-asan
+# or bootstrap-ubsan, bootstrap it.
+if echo " ${target_configdirs} " | grep " libsanitizer " > /dev/null 2>&1; then
+  case "$BUILD_CONFIG" in
+    *bootstrap-asan* | *bootstrap-ubsan* )
+      bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer,
+      ;;
+  esac
 fi
 
-# If we are building libvtv, bootstrap it.
-if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 ; then
+# If we are building libvtv and --enable-vtable-verify, bootstrap it.
+if echo " ${target_configdirs} " | grep " libvtv " > /dev/null 2>&1 &&
+   test "$enable_vtable_verify" != no; then
   bootstrap_target_libs=${bootstrap_target_libs}target-libvtv,
 fi
 
@@ -7161,54 +7234,6 @@  case "$enable_bootstrap:$ENABLE_GOLD: $c
     ;;
 esac
 
-# Adjust the toplevel makefile according to whether bootstrap was selected.
-case $enable_bootstrap in
-  yes)
-    bootstrap_suffix=bootstrap
-    BUILD_CONFIG=bootstrap-debug
-    ;;
-  no)
-    bootstrap_suffix=no-bootstrap
-    BUILD_CONFIG=
-    ;;
-esac
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default BUILD_CONFIG" >&5
-$as_echo_n "checking for default BUILD_CONFIG... " >&6; }
-
-
-# Check whether --with-build-config was given.
-if test "${with_build_config+set}" = set; then :
-  withval=$with_build_config; case $with_build_config in
-   yes) with_build_config= ;;
-   no) with_build_config= BUILD_CONFIG= ;;
-   esac
-fi
-
-
-if test "x${with_build_config}" != x; then
-  BUILD_CONFIG=$with_build_config
-else
-  case $BUILD_CONFIG in
-  bootstrap-debug)
-    if echo "int f (void) { return 0; }" > conftest.c &&
-       ${CC} -c conftest.c &&
-       mv conftest.o conftest.o.g0 &&
-       ${CC} -c -g conftest.c &&
-       mv conftest.o conftest.o.g &&
-       ${srcdir}/contrib/compare-debug conftest.o.g0 conftest.o.g > /dev/null 2>&1; then
-      :
-    else
-      BUILD_CONFIG=
-    fi
-    rm -f conftest.c conftest.o conftest.o.g0 conftest.o.g
-    ;;
-  esac
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CONFIG" >&5
-$as_echo "$BUILD_CONFIG" >&6; }
-
-
 extrasub_build=
 for module in ${build_configdirs} ; do
   if test -z "${no_recursion}" \