aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@redhat.com>2002-09-06 19:52:38 +0000
committerBenjamin Kosnik <bkoz@redhat.com>2002-09-06 19:52:38 +0000
commit3e26e2cc74d41ed4240c8e381c427e7e92bb37c5 (patch)
treed08982bd7f5507408cffbca20c7517e0ad83c740 /libstdc++-v3
parent4134fb695b6b86271bdd2c5da42a0b7713976262 (diff)
2002-09-06 Benjamin Kosnik <bkoz@redhat.com>
* include/bits/localefwd.h: Tweak formatting. * docs/html/abi.txt: Add. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@56903 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog5
-rw-r--r--libstdc++-v3/docs/html/abi.txt59
-rw-r--r--libstdc++-v3/include/bits/localefwd.h4
3 files changed, 43 insertions, 25 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 693edc82834..ba71fddb9aa 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,8 @@
+2002-09-06 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/localefwd.h: Tweak formatting.
+ * docs/html/abi.txt: Add.
+
2002-09-06 Jakub Jelinek <jakub@redhat.com>
* configure.target: Use cpu_include_dir="config/cpu/sparc" for all
diff --git a/libstdc++-v3/docs/html/abi.txt b/libstdc++-v3/docs/html/abi.txt
index 216b1597121..957fbc0b3f5 100644
--- a/libstdc++-v3/docs/html/abi.txt
+++ b/libstdc++-v3/docs/html/abi.txt
@@ -6,7 +6,7 @@ document exists, why it's incomplete, and what needs to be done still.
===========================
-2002-07-30 Benjamin Kosnik
+2002-09-06 Benjamin Kosnik
Description of the libstdc++ ABI.
@@ -131,7 +131,7 @@ I. What is an ABI? What's covered? What's not?
gcc-3.0.4: 20020220
gcc-3.1.0: 20020514
gcc-3.1.1: 20020725
- gcc-3.2.0: (20020731)
+ gcc-3.2.0: 20020814
- Incremental bumping of a library pre-defined macro,
@@ -152,7 +152,7 @@ I. What is an ABI? What's covered? What's not?
gcc-3.0.4: "3.0.0" (Error, should be "3.0.4")
gcc-3.1.0: "3.1.0"
gcc-3.1.1: "3.1.1"
- gcc-3.2.0: ("3.2.0")
+ gcc-3.2.0: "3.2"
- Matching each specific C++ compiler release to a specific set of
@@ -281,40 +281,53 @@ III. Versioning
IV. Testing ABI changes
-Currently, there is no formal testing for changes in the libstdc++
-ABI. It would be in the best interest of GNU C++ users everywhere to
-have such a test, and work to develop this test is ongoing.
+Currently, there are formal tests for changes in the libstdc++ ABI,
+and in addition informal testing procedures. Work to develop these
+tests is ongoing.
There is a formal method for checking the compiler parts of the C++
ABI, donated by Intel. More information can be obtained
<a href="http://developer.intel.com/software/products/opensource/">here.</a>
-To test the library, the following two ideas have been suggested:
+Also, it seems as if some members of the open source community are
+working on C++ ABI testers for the compiler. It is yet unspecified if
+these tools will be freely available, and able to be included in a GNU
+project. Please contact Mark Mitchell (mark@codesoucery.com) for more
+details, and current status.
+
+
+To test the library, there are two methods:
One.
(Brendan Kehoe, Jeff Law suggestion to run 'make check-c++' two ways,
one with a new compiler and an old library, and the other with an old
compiler and a new library, and look for testsuite regressions)
+Details on how to set this kind of test up can be found here:
+http://gcc.gnu.org/ml/gcc/2002-08/msg00142.html
+
Two.
-Have the libstdc++ testsuite proactive check the library ABI. Probably
-a couple of items would be covered, although perhaps not all would
-need to be done at once for this to be useful. Compute the list of
-names exported in the shared version of libstdc++ binary. Then, save
-this list of names. Have this list of names re-computed for each new
-binary of the same version. Next, use sizeof, alignof, and offset to
-compute offsets for each structure and type in the standard library,
-saving to another datafile. Then, compute this for new binaries, and
-look for differences.
+Use the 'make check-abi' rule in the libstdc++-v3 Makefile.
+
+This is a proactive check the library ABI. Currently, exported symbol
+names are checked against a last known good baseline. Currently, this
+baseline is keyed off of 3.2.0 binaries, as this was the last time the
+.so number was incremented. In addition, all exported names are
+demangled, and the exported objects are checked to make sure they are
+the same size as the same object in the baseline.
-An example of a way to compute the list of names exported by the
-shared libstdc++ binary is:
+In the future, more tests should be added. In particular, vtable
+information, offsets of data members in class objects, and other
+layout information should be checked.
-nm --extern-only --portability libstdc++.so.5.0.0 | awk '{ print $1 $2}'
+It should be possible to use sizeof, alignof, and offset to compute
+offsets for each structure and type in the standard library, saving to
+another datafile. Then, compute this for new binaries, and look for
+differences.
-The thought is to choose one or both of these approaches, and to use a
-Makefile hook, perhaps 'make check-abi', to add this capability to the
-libstdc++ testsuite.
+Another approach might be to use the -fdump-class-hierarchy flag to
+get information.
+(See g++/7470 on how this was used to find bugs.)
Perhaps there are other Library ABI checkers. If so, please notify us.
@@ -327,7 +340,7 @@ V. Issues not directly addressed, and possible suggestions
--enable-version-specific-runtime-libs
- - Alexandre Oliva proposal to have extended name attributes, modify ld
+ - Alexandre Olva proposal to have extended name attributes, modify ld
- directory-level versioning
diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h
index 028c4126b85..b92560f0b52 100644
--- a/libstdc++-v3/include/bits/localefwd.h
+++ b/libstdc++-v3/include/bits/localefwd.h
@@ -387,12 +387,12 @@ namespace std
friend class locale;
friend class locale::_Impl;
- _Atomic_word _M_references;
+ _Atomic_word _M_references;
protected:
// Contains data from the underlying "C" library for default "C"
// or "POSIX" locale.
- static __c_locale _S_c_locale;
+ static __c_locale _S_c_locale;
explicit
facet(size_t __refs = 0) throw();