@@ -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.
@@ -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
@@ -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)
@@ -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>