diff mbox

PR 43852: new configure option --disable-libstdcxx-verbose

Message ID CAH6eHdSZGveNb__sAv0BZ3=oMyahu=B+HZDGtVRurnr886uBKg@mail.gmail.com
State New
Headers show

Commit Message

Jonathan Wakely Sept. 9, 2012, 11:09 p.m. UTC
On 27 August 2012 18:15, Jonathan Wakely wrote:
> Unless anyone has objections I'm going to commit this to trunk,
> implementing Sebastian's idea to disable the verbose terminate handler
> and the "pure virtual function called" message, which write to stderr
> when a process terminates. This allows embedded systems to avoid
> pulling in the demangler and I/O code, reducing the footprint of
> libstdc++.
>
> 2012-08-27  Sebastian Huber  <sebastian.huber@embedded-brains.de>
>             Jonathan Wakely  <jwakely.gcc@gmail.com>
>
>         * acinclude.m4 (GLIBCXX_ENABLE_VERBOSE): Define.
>         * configure.ac (GLIBCXX_ENABLE_VERBOSE): Use it.
>         * config.h.in: Regenerate.
>         * configure: Likewise.
>         * libsupc++/eh_term_handler.cc (_GLIBCXX_VERBOSE): Check new macro.
>         * libsupc++/pure.cc (_GLIBCXX_VERBOSE): Likewise.
>         * doc/xml/manual/configure.xml (--disable-libstdcxx-verbose): Document.
>         * doc/html/manual/configure.html: Regenerate.
>
> Tested on x86_64-linux.

I've committed this to trunk now.
commit 80c2524507ac793cf601934345a6183baf63a5d6
Author: Jonathan Wakely <jwakely.gcc@gmail.com>
Date:   Sun Aug 26 15:45:08 2012 +0100

    2012-08-27  Sebastian Huber  <sebastian.huber@embedded-brains.de>
    	    Jonathan Wakely  <jwakely.gcc@gmail.com>
    
    	* acinclude.m4 (GLIBCXX_ENABLE_VERBOSE): Define.
    	* configure.ac (GLIBCXX_ENABLE_VERBOSE): Use it.
    	* config.h.in: Regenerate.
    	* configure: Likewise.
    	* libsupc++/eh_term_handler.cc (_GLIBCXX_VERBOSE): Check new macro.
    	* libsupc++/pure.cc (_GLIBCXX_VERBOSE): Likewise.
    	* doc/xml/manual/configure.xml (--disable-libstdcxx-verbose): Document.
    	* doc/html/manual/configure.html: Regenerate.
diff mbox

Patch

diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 1179407..48d932c 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -2317,6 +2317,31 @@  AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
 
 
 dnl
+dnl Check if the user wants a non-verbose library implementation.
+dnl
+dnl --disable-libstdcxx-verbose will turn off descriptive messages to
+dnl standard error on termination.
+dnl
+dnl Defines:
+dnl  _GLIBCXX_VERBOSE (always defined, either to 1 or 0)
+dnl
+AC_DEFUN([GLIBCXX_ENABLE_VERBOSE], [
+  AC_ARG_ENABLE([libstdcxx-verbose],
+    AC_HELP_STRING([--disable-libstdcxx-verbose],
+		   [disable termination messages to standard error]),,
+		   [enable_libstdcxx_verbose=yes])
+  if test x"$enable_libstdcxx_verbose" = xyes; then
+    verbose_define=1
+  else
+    AC_MSG_NOTICE([verbose termination messages are disabled])
+    verbose_define=0
+  fi
+  AC_DEFINE_UNQUOTED(_GLIBCXX_VERBOSE, $verbose_define,
+    [Define to 1 if a verbose library is built, or 0 otherwise.])
+])
+
+
+dnl
 dnl Check for template specializations for the 'long long' type.
 dnl The result determines only whether 'long long' I/O is enabled; things
 dnl like numeric_limits<> specializations are always available.
diff --git a/libstdc++-v3/libsupc++/eh_term_handler.cc b/libstdc++-v3/libsupc++/eh_term_handler.cc
index 52a0745..f4bf2a3 100644
--- a/libstdc++-v3/libsupc++/eh_term_handler.cc
+++ b/libstdc++-v3/libsupc++/eh_term_handler.cc
@@ -1,5 +1,5 @@ 
 // -*- C++ -*- std::terminate handler
-// Copyright (C) 2002, 2003, 2009 Free Software Foundation
+// Copyright (C) 2002-2012 Free Software Foundation
 //
 // This file is part of GCC.
 //
@@ -28,19 +28,17 @@ 
 /* We default to the talkative, informative handler in a normal hosted
    library.  This pulls in the demangler, the dyn-string utilities, and
    elements of the I/O library.  For a low-memory environment, you can return
-   to the earlier "silent death" handler by including <cstdlib>, initializing
-   to "std::abort", and rebuilding the library.  In a freestanding mode, we
-   default to this latter approach.  */
-
-#if ! _GLIBCXX_HOSTED
-# include <cstdlib>
-#endif
+   to the earlier "silent death" handler by configuring GCC with
+   --disable-libstdcxx-verbose and rebuilding the library.
+   In a freestanding environment, we default to this latter approach.  */
 
+#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
 /* The current installed user handler.  */
 std::terminate_handler __cxxabiv1::__terminate_handler =
-#if _GLIBCXX_HOSTED
 	__gnu_cxx::__verbose_terminate_handler;
 #else
-	std::abort;
+# include <cstdlib>
+/* The current installed user handler.  */
+std::terminate_handler __cxxabiv1::__terminate_handler = std::abort;
 #endif
 
diff --git a/libstdc++-v3/libsupc++/pure.cc b/libstdc++-v3/libsupc++/pure.cc
index 4879e59..a774597 100644
--- a/libstdc++-v3/libsupc++/pure.cc
+++ b/libstdc++-v3/libsupc++/pure.cc
@@ -1,5 +1,5 @@ 
 // -*- C++ -*- 
-// Copyright (C) 2000, 2001, 2009, 2011 Free Software Foundation
+// Copyright (C) 2000-2012 Free Software Foundation
 //
 // This file is part of GCC.
 //
@@ -26,7 +26,7 @@ 
 #include <cxxabi.h>
 #include "unwind-cxx.h"
 
-#if _GLIBCXX_HOSTED
+#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE
 #ifdef _GLIBCXX_HAVE_UNISTD_H
 # include <unistd.h>
 # define writestr(str)	write(2, str, sizeof(str) - 1)
diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml
index 83443ef..bc98d7a 100644
--- a/libstdc++-v3/doc/xml/manual/configure.xml
+++ b/libstdc++-v3/doc/xml/manual/configure.xml
@@ -370,6 +370,19 @@ 
      </para>
  </listitem></varlistentry>
 
+<varlistentry><term><code>--disable-libstdcxx-verbose</code></term>
+ <listitem>
+   <para>
+     By default, the library is configured to write descriptive messages
+     to standard error for certain events such as calling a pure virtual
+     function or the invocation of the standard terminate handler.  Those
+     messages cause the library to depend on the demangler and standard I/O
+     facilites, which might be undesirable in a low-memory environment or
+     when standard error is not available.  This option disables those
+     messages.  This option does not change the library ABI.
+   </para>
+ </listitem></varlistentry>
+
 </variablelist>
 
 </section>