]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Remove broken std::allocator base classes [PR103340]
authorJonathan Wakely <jwakely@redhat.com>
Wed, 1 Dec 2021 16:30:30 +0000 (16:30 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 2 Dec 2021 16:46:28 +0000 (16:46 +0000)
The bitmap_allocator, __mt_alloc and __pool_alloc extensions are no
longer suitable for use as the base class of std::allocator, because
they have not been updated to meet the C++20 requirements.  There is a
patch attached to PR 103340 which addresses that, but more work would be
needed to solve the linking errors that occur when the library is
configured to use them.

Using --enable-libstdcxx-allocator=bitmap wouldn't even bootstrap for
the past few years, and I can't find any gcc-testresults reports using
any of these allocators. This patch removes the configure option to use
these as the std::allocator base class. The allocators are still in the
tree and can be used directly, you just can't configure the library to
use one of them as the base class of std::allocator.

libstdc++-v3/ChangeLog:

PR libstdc++/103340
PR libstdc++/103400
PR libstdc++/103381
* acinclude.m4 (GLIBCXX_ENABLE_ALLOCATOR): Remove mt, bitmap
and pool options.
* configure: Regenerate.
* config/allocator/bitmap_allocator_base.h: Removed.
* config/allocator/mt_allocator_base.h: Removed.
* config/allocator/pool_allocator_base.h: Removed.
* doc/xml/manual/allocator.xml: Update.
* doc/xml/manual/configure.xml: Update.
* doc/xml/manual/evolution.xml: Document removal.
* doc/xml/manual/mt_allocator.xml: Editorial tweaks.
* doc/html/manual/*: Regenerate.

13 files changed:
libstdc++-v3/acinclude.m4
libstdc++-v3/config/allocator/bitmap_allocator_base.h [deleted file]
libstdc++-v3/config/allocator/mt_allocator_base.h [deleted file]
libstdc++-v3/config/allocator/pool_allocator_base.h [deleted file]
libstdc++-v3/configure
libstdc++-v3/doc/html/manual/api.html
libstdc++-v3/doc/html/manual/configure.html
libstdc++-v3/doc/html/manual/memory.html
libstdc++-v3/doc/html/manual/mt_allocator.html
libstdc++-v3/doc/xml/manual/allocator.xml
libstdc++-v3/doc/xml/manual/configure.xml
libstdc++-v3/doc/xml/manual/evolution.xml
libstdc++-v3/doc/xml/manual/mt_allocator.xml

index 71321055de72f1f193b6a4d453b9d65b5dc7f88f..6d9a8875e3186380075ad6a0f302ee8df5f8c833 100644 (file)
@@ -2599,7 +2599,7 @@ AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
   AC_MSG_CHECKING([for std::allocator base class])
   GLIBCXX_ENABLE(libstdcxx-allocator,auto,[[[=KIND]]],
     [use KIND for target std::allocator base],
-    [permit new|malloc|mt|bitmap|pool|yes|no|auto])
+    [permit new|malloc|yes|no|auto])
 
   # If they didn't use this option switch, or if they specified --enable
   # with no specific model, we'll have to look for one.  If they
@@ -2631,26 +2631,14 @@ AC_DEFUN([GLIBCXX_ENABLE_ALLOCATOR], [
 
   # Set configure bits for specified locale package
   case ${enable_libstdcxx_allocator_flag} in
-    bitmap)
-      ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
-      ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
-      ;;
     malloc)
       ALLOCATOR_H=config/allocator/malloc_allocator_base.h
       ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
       ;;
-    mt)
-      ALLOCATOR_H=config/allocator/mt_allocator_base.h
-      ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
-      ;;
     new)
       ALLOCATOR_H=config/allocator/new_allocator_base.h
       ALLOCATOR_NAME=__gnu_cxx::new_allocator
       ;;
-    pool)
-      ALLOCATOR_H=config/allocator/pool_allocator_base.h
-      ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
-      ;;
   esac
 
   GLIBCXX_CONDITIONAL(ENABLE_ALLOCATOR_NEW,
diff --git a/libstdc++-v3/config/allocator/bitmap_allocator_base.h b/libstdc++-v3/config/allocator/bitmap_allocator_base.h
deleted file mode 100644 (file)
index 40ccbf0..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Base to std::allocator -*- C++ -*-
-
-// Copyright (C) 2004-2021 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/c++allocator.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{memory}
- */
-
-#ifndef _GLIBCXX_CXX_ALLOCATOR_H
-#define _GLIBCXX_CXX_ALLOCATOR_H 1
-
-#include <ext/bitmap_allocator.h>
-
-#if __cplusplus >= 201103L
-namespace std
-{
-  /**
-   *  @brief  An alias to the base class for std::allocator.
-   *  @ingroup allocators
-   *
-   *  Used to set the std::allocator base class to
-   *  __gnu_cxx::bitmap_allocator.
-   *
-   *  @tparam  _Tp  Type of allocated object.
-    */
-  template<typename _Tp>
-    using __allocator_base = __gnu_cxx::bitmap_allocator<_Tp>;
-}
-#else
-// Define bitmap_allocator as the base class to std::allocator.
-# define __allocator_base  __gnu_cxx::bitmap_allocator
-#endif
-
-#endif
diff --git a/libstdc++-v3/config/allocator/mt_allocator_base.h b/libstdc++-v3/config/allocator/mt_allocator_base.h
deleted file mode 100644 (file)
index eb45b8d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Base to std::allocator -*- C++ -*-
-
-// Copyright (C) 2004-2021 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/c++allocator.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{memory}
- */
-
-#ifndef _GLIBCXX_CXX_ALLOCATOR_H
-#define _GLIBCXX_CXX_ALLOCATOR_H 1
-
-#include <ext/mt_allocator.h>
-
-#if __cplusplus >= 201103L
-namespace std
-{
-  /**
-   *  @brief  An alias to the base class for std::allocator.
-   *  @ingroup allocators
-   *
-   *  Used to set the std::allocator base class to
-   *  __gnu_cxx::__mt_alloc.
-   *
-   *  @tparam  _Tp  Type of allocated object.
-    */
-  template<typename _Tp>
-    using __allocator_base = __gnu_cxx::__mt_alloc<_Tp>;
-}
-#else
-// Define __mt_alloc as the base class to std::allocator.
-# define __allocator_base  __gnu_cxx::__mt_alloc
-#endif
-
-#endif
diff --git a/libstdc++-v3/config/allocator/pool_allocator_base.h b/libstdc++-v3/config/allocator/pool_allocator_base.h
deleted file mode 100644 (file)
index c3ec8ec..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Base to std::allocator -*- C++ -*-
-
-// Copyright (C) 2004-2021 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library.  This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-
-// Under Section 7 of GPL version 3, you are granted additional
-// permissions described in the GCC Runtime Library Exception, version
-// 3.1, as published by the Free Software Foundation.
-
-// You should have received a copy of the GNU General Public License and
-// a copy of the GCC Runtime Library Exception along with this program;
-// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-// <http://www.gnu.org/licenses/>.
-
-/** @file bits/c++allocator.h
- *  This is an internal header file, included by other library headers.
- *  Do not attempt to use it directly. @headername{memory}
- */
-
-#ifndef _GLIBCXX_CXX_ALLOCATOR_H
-#define _GLIBCXX_CXX_ALLOCATOR_H 1
-
-#include <ext/pool_allocator.h>
-
-#if __cplusplus >= 201103L
-namespace std
-{
-  /**
-   *  @brief  An alias to the base class for std::allocator.
-   *  @ingroup allocators
-   *
-   *  Used to set the std::allocator base class to
-   *  __gnu_cxx::__pool_alloc.
-   *
-   *  @tparam  _Tp  Type of allocated object.
-    */
-  template<typename _Tp>
-    using __allocator_base = __gnu_cxx::__pool_alloc<_Tp>;
-}
-#else
-// Define __pool_alloc as the base class to std::allocator.
-# define __allocator_base  __gnu_cxx::__pool_alloc
-#endif
-
-#endif
index 9049e4b9864bb963e424925ba9301f8db3ac6dca..61a14a2cb3b9f5ff8e3b73d49c7173e070c477a1 100755 (executable)
@@ -16848,7 +16848,7 @@ $as_echo_n "checking for std::allocator base class... " >&6; }
 if test "${enable_libstdcxx_allocator+set}" = set; then :
   enableval=$enable_libstdcxx_allocator;
       case "$enableval" in
-       new|malloc|mt|bitmap|pool|yes|no|auto) ;;
+       new|malloc|yes|no|auto) ;;
        *) as_fn_error $? "Unknown argument to enable/disable libstdcxx-allocator" "$LINENO" 5 ;;
                        esac
 
@@ -16889,26 +16889,14 @@ $as_echo "$enable_libstdcxx_allocator_flag" >&6; }
 
   # Set configure bits for specified locale package
   case ${enable_libstdcxx_allocator_flag} in
-    bitmap)
-      ALLOCATOR_H=config/allocator/bitmap_allocator_base.h
-      ALLOCATOR_NAME=__gnu_cxx::bitmap_allocator
-      ;;
     malloc)
       ALLOCATOR_H=config/allocator/malloc_allocator_base.h
       ALLOCATOR_NAME=__gnu_cxx::malloc_allocator
       ;;
-    mt)
-      ALLOCATOR_H=config/allocator/mt_allocator_base.h
-      ALLOCATOR_NAME=__gnu_cxx::__mt_alloc
-      ;;
     new)
       ALLOCATOR_H=config/allocator/new_allocator_base.h
       ALLOCATOR_NAME=__gnu_cxx::new_allocator
       ;;
-    pool)
-      ALLOCATOR_H=config/allocator/pool_allocator_base.h
-      ALLOCATOR_NAME=__gnu_cxx::__pool_alloc
-      ;;
   esac
 
 
index 32810788bf22012b25a1f1e057e88cb74972b199..2cc44aed4e36aa504b9e9d1aaf0b5f25f4bd2532 100644 (file)
@@ -444,4 +444,7 @@ can be used instead.
 The <code class="function">std::unexpected</code> function and related typedef and
 accessors for the unexpected handler are deprecated for C++11 and later.
 Dynamic exception specifications should be replaced with <code class="code">noexcept</code>.
+</p><p>
+The <code class="literal">bitmap</code>, <code class="literal">mt</code>, and <code class="literal">pool</code>
+options for <code class="option">--enable-libstdcxx-allocator</code> were removed.
 </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
\ No newline at end of file
index 9e2e9dcb18ec9fa272a01445068639f0b134fc3b..31c4da8a5e3a1ca8697a0719152dc1e752f007e3 100644 (file)
        <code class="code">'--enable-libstdcxx-allocator=auto'</code> (described
        next).
      </p></dd><dt><span class="term"><code class="code">--enable-libstdcxx-allocator=OPTION  </code></span></dt><dd><p>Select a target-specific underlying std::allocator.  The
-       choices are 'new' to specify a wrapper for new, 'malloc' to
-       specify a wrapper for malloc, 'mt' for a fixed power of two allocator,
-       'pool' for the SGI pooled allocator or 'bitmap' for a bitmap allocator.
-       See this page for more information on allocator
-       <a class="link" href="memory.html#allocator.ext" title="Extension Allocators">extensions</a>. This option
-       can change the library ABI.
+       choices are 'new' to specify a wrapper for new, and 'malloc' to
+       specify a wrapper for malloc.
+       See <a class="xref" href="memory.html#allocator.ext" title="Extension Allocators">the section called “Extension Allocators”</a> for more information.
+       This option can change the library ABI.
      </p></dd><dt><span class="term"><code class="code">--enable-cheaders=OPTION</code></span></dt><dd><p>This allows the user to define the approach taken for C header
        compatibility with C++. Options are c, c_std, and c_global.
        These correspond to the source directory's include/c,
index 5b28a5a9763702010f4864bea99a866eb424a2d9..1681d9853b0fb042f9c0e3e059f8d3ddc35d9085 100644 (file)
    high-speed extension allocators, covered below. Thus, all
    allocation and deallocation depends on the base class.
    </p><p>
-     The base class that <code class="classname">allocator</code> is derived from
-     may not be user-configurable.
+     The choice of base class that <code class="classname">allocator</code>
+     is derived from is fixed at the time when GCC is built,
+     and the different choices are not ABI compatible.
 </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="allocator.default"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
      It's difficult to pick an allocation strategy that will provide
    maximum utility, without excessively penalizing some behavior. In
      Probably the best place to start would be to copy one of the
    extension allocators: say a simple one like
    <code class="classname">new_allocator</code>.
+   </p><p>
+     Since C++11 the minimal interface require for an allocator is
+     much smaller, as <code class="classname">std::allocator_traits</code>
+     can provide default for much of the interface.
    </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"></a>Extension Allocators</h4></div></div></div><p>
     Several other allocators are provided as part of this
     implementation.  The location of the extension allocators and their
        </p></li><li class="listitem"><p>
        <code class="classname">debug_allocator</code>
        </p><p>
-        A wrapper around an arbitrary allocator A.  It passes on
-        slightly increased size requests to A, and uses the extra
-        memory to store size information.  When a pointer is passed
+        A wrapper around an arbitrary allocator <code class="classname">A</code>.
+        It passes on slightly increased size requests to <code class="classname">A</code>,
+        and uses the extra memory to store size information.
+        When a pointer is passed
         to <code class="function">deallocate()</code>, the stored size is
         checked, and <code class="function">assert()</code> is used to
         guarantee they match.
         request is passed to <code class="function">::operator new</code>
         directly.
        </p><p>
-        Older versions of this class take a boolean template
-        parameter, called <code class="varname">thr</code>, and an integer template
-        parameter, called <code class="varname">inst</code>.
+        For thread-enabled configurations, the pool is locked with a
+        single big lock. In some situations, this implementation detail
+        may result in severe performance degradation.
        </p><p>
-        The <code class="varname">inst</code> number is used to track additional memory
-      pools.  The point of the number is to allow multiple
-      instantiations of the classes without changing the semantics at
-      all.  All three of
-       </p><pre class="programlisting">
-    typedef  __pool_alloc&lt;true,0&gt;    normal;
-    typedef  __pool_alloc&lt;true,1&gt;    private;
-    typedef  __pool_alloc&lt;true,42&gt;   also_private;
-   </pre><p>
-     behave exactly the same way.  However, the memory pool for each type
-      (and remember that different instantiations result in different types)
-      remains separate.
-   </p><p>
-     The library uses <span class="emphasis"><em>0</em></span> in all its instantiations.  If you
-      wish to keep separate free lists for a particular purpose, use a
-      different number.
-   </p><p>The <code class="varname">thr</code> boolean determines whether the
-   pool should be manipulated atomically or not.  When
-   <code class="varname">thr</code> = <code class="constant">true</code>, the allocator
-   is thread-safe, while <code class="varname">thr</code> =
-   <code class="constant">false</code>, is slightly faster but unsafe for
-   multiple threads.
-   </p><p>
-     For thread-enabled configurations, the pool is locked with a
-     single big lock. In some situations, this implementation detail
-     may result in severe performance degradation.
-   </p><p>
-     (Note that the GCC thread abstraction layer allows us to provide
-     safe zero-overhead stubs for the threading routines, if threads
-     were disabled at configuration time.)
-   </p></li><li class="listitem"><p>
+        (Note that the GCC thread abstraction layer allows us to provide
+        safe zero-overhead stubs for the threading routines, if threads
+        were disabled at configuration time.)
+       </p></li><li class="listitem"><p>
        <code class="classname">__mt_alloc</code>
        </p><p>
         A high-performance fixed-size allocator with
index c7786f02844502d3340fee056e063ea43943b7a4..68e7dccde78e37aefcbdf7e7bf8709278e126edd 100644 (file)
@@ -6,12 +6,12 @@
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p>
   The mt allocator [hereinafter referred to simply as "the allocator"]
   is a fixed size (power of two) allocator that was initially
-  developed specifically to suit the needs of multi threaded
+  developed specifically to suit the needs of multi-threaded
   applications [hereinafter referred to as an MT application]. Over
   time the allocator has evolved and been improved in many ways, in
-  particular it now also does a good job in single threaded
-  applications [hereinafter referred to as a ST application]. (Note:
-  In this document, when referring to single threaded applications
+  particular it now also does a good job in single-threaded
+  applications [hereinafter referred to as an ST application]. (Note:
+  In this document, when referring to single-threaded applications
   this also includes applications that are compiled with gcc without
   thread support enabled. This is accomplished using ifdef's on
   __GTHREADS). This allocator is tunable, very flexible, and capable
index 1f429410eb0e20e369941e14655db9a296b62aeb..aaab4e29aa75deb07e38090a9755af7d6e9fbb6f 100644 (file)
    </para>
 
    <para>
-     The base class that <classname>allocator</classname> is derived from
-     may not be user-configurable.
+     The choice of base class that <classname>allocator</classname>
+     is derived from is fixed at the time when GCC is built,
+     and the different choices are not ABI compatible.
 </para>
 
   </section>
    <classname>new_allocator</classname>.
    </para>
 
+   <para>
+     Since C++11 the minimal interface require for an allocator is
+     much smaller, as <classname>std::allocator_traits</classname>
+     can provide default for much of the interface.
+   </para>
+
+
 </section>
 
 <section xml:id="allocator.ext"><info><title>Extension Allocators</title></info>
        <classname>debug_allocator</classname>
        </para>
        <para>
-        A wrapper around an arbitrary allocator A.  It passes on
-        slightly increased size requests to A, and uses the extra
-        memory to store size information.  When a pointer is passed
+        A wrapper around an arbitrary allocator <classname>A</classname>.
+        It passes on slightly increased size requests to <classname>A</classname>,
+        and uses the extra memory to store size information.
+        When a pointer is passed
         to <function>deallocate()</function>, the stored size is
         checked, and <function>assert()</function> is used to
         guarantee they match.
        </para>
 
        <para>
-        Older versions of this class take a boolean template
-        parameter, called <varname>thr</varname>, and an integer template
-        parameter, called <varname>inst</varname>.
+        For thread-enabled configurations, the pool is locked with a
+        single big lock. In some situations, this implementation detail
+        may result in severe performance degradation.
        </para>
 
        <para>
-        The <varname>inst</varname> number is used to track additional memory
-      pools.  The point of the number is to allow multiple
-      instantiations of the classes without changing the semantics at
-      all.  All three of
+        (Note that the GCC thread abstraction layer allows us to provide
+        safe zero-overhead stubs for the threading routines, if threads
+        were disabled at configuration time.)
        </para>
-
-   <programlisting>
-    typedef  __pool_alloc&lt;true,0&gt;    normal;
-    typedef  __pool_alloc&lt;true,1&gt;    private;
-    typedef  __pool_alloc&lt;true,42&gt;   also_private;
-   </programlisting>
-   <para>
-     behave exactly the same way.  However, the memory pool for each type
-      (and remember that different instantiations result in different types)
-      remains separate.
-   </para>
-   <para>
-     The library uses <emphasis>0</emphasis> in all its instantiations.  If you
-      wish to keep separate free lists for a particular purpose, use a
-      different number.
-   </para>
-   <para>The <varname>thr</varname> boolean determines whether the
-   pool should be manipulated atomically or not.  When
-   <varname>thr</varname> = <constant>true</constant>, the allocator
-   is thread-safe, while <varname>thr</varname> =
-   <constant>false</constant>, is slightly faster but unsafe for
-   multiple threads.
-   </para>
-
-   <para>
-     For thread-enabled configurations, the pool is locked with a
-     single big lock. In some situations, this implementation detail
-     may result in severe performance degradation.
-   </para>
-
-   <para>
-     (Note that the GCC thread abstraction layer allows us to provide
-     safe zero-overhead stubs for the threading routines, if threads
-     were disabled at configuration time.)
-   </para>
      </listitem>
 
      <listitem>
index cc9c8554c6cdef0b6cd9d5093dfe17ed11bdffc2..8c26acc95a798db7d98e50c2238713e6ecf14447 100644 (file)
 
  <varlistentry><term><code>--enable-libstdcxx-allocator=OPTION  </code></term>
  <listitem><para>Select a target-specific underlying std::allocator.  The
-       choices are 'new' to specify a wrapper for new, 'malloc' to
-       specify a wrapper for malloc, 'mt' for a fixed power of two allocator,
-       'pool' for the SGI pooled allocator or 'bitmap' for a bitmap allocator.
-       See this page for more information on allocator
-       <link linkend="allocator.ext">extensions</link>. This option
-       can change the library ABI.
+       choices are 'new' to specify a wrapper for new, and 'malloc' to
+       specify a wrapper for malloc.
+       See <xref linkend="allocator.ext"/> for more information.
+       This option can change the library ABI.
      </para>
  </listitem></varlistentry>
 
index 9aef84a09334a1812bcdff562531ac1be043fcf8..271d2225c3a2cfa9385eb127e981373fee648c00 100644 (file)
@@ -1033,6 +1033,11 @@ accessors for the unexpected handler are deprecated for C++11 and later.
 Dynamic exception specifications should be replaced with <code>noexcept</code>.
 </para>
 
+<para>
+The <literal>bitmap</literal>, <literal>mt</literal>, and <literal>pool</literal>
+options for <option>--enable-libstdcxx-allocator</option> were removed.
+</para>
+
 </section>
 
 </section>
index 93504a7d711ae8696363df50a00c1e8f1e85423d..f1c09b3bd8f730bd8747b675ecbf67348a3d1c90 100644 (file)
 <para>
   The mt allocator [hereinafter referred to simply as "the allocator"]
   is a fixed size (power of two) allocator that was initially
-  developed specifically to suit the needs of multi threaded
+  developed specifically to suit the needs of multi-threaded
   applications [hereinafter referred to as an MT application]. Over
   time the allocator has evolved and been improved in many ways, in
-  particular it now also does a good job in single threaded
-  applications [hereinafter referred to as a ST application]. (Note:
-  In this document, when referring to single threaded applications
+  particular it now also does a good job in single-threaded
+  applications [hereinafter referred to as an ST application]. (Note:
+  In this document, when referring to single-threaded applications
   this also includes applications that are compiled with gcc without
   thread support enabled. This is accomplished using ifdef's on
   __GTHREADS). This allocator is tunable, very flexible, and capable