aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@redhat.com>2002-10-15 04:22:11 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2002-10-15 04:22:11 +0000
commit8c536ae9dc02b5a8bc34a64fadbeb558f2ac4065 (patch)
tree64dd2d748cd96f7165aaba10dd9f2d106654dacb
parent51502ebc130ebef2a7febc060784c42ac120b754 (diff)
downloadgcc-8c536ae9dc02b5a8bc34a64fadbeb558f2ac4065.zip
gcc-8c536ae9dc02b5a8bc34a64fadbeb558f2ac4065.tar.gz
gcc-8c536ae9dc02b5a8bc34a64fadbeb558f2ac4065.tar.bz2
globals.cc (__gnu_cxx::c_locale_impl_compat): Add, alias to c_locale_impl.
2002-10-14 Benjamin Kosnik <bkoz@redhat.com> * src/globals.cc (__gnu_cxx::c_locale_impl_compat): Add, alias to c_locale_impl. * testsuite/abi_check.cc (line_to_symbol_info): Collect size info. * docs/html/abi.txt: Update. From-SVN: r58147
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/docs/html/abi.txt37
-rw-r--r--libstdc++-v3/src/globals.cc26
-rw-r--r--libstdc++-v3/testsuite/abi_check.cc2
4 files changed, 46 insertions, 26 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index b4bf770..e6c7b83 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,12 @@
2002-10-14 Benjamin Kosnik <bkoz@redhat.com>
+ * src/globals.cc (__gnu_cxx::c_locale_impl_compat): Add, alias to
+ c_locale_impl.
+ * testsuite/abi_check.cc (line_to_symbol_info): Collect size info.
+ * docs/html/abi.txt: Update.
+
+2002-10-14 Benjamin Kosnik <bkoz@redhat.com>
+
* testsuite/22_locale/static_members.cc (test02): Less provincial.
2002-10-14 Benjamin Kosnik <bkoz@redhat.com>
diff --git a/libstdc++-v3/docs/html/abi.txt b/libstdc++-v3/docs/html/abi.txt
index 770c3cf..73cb46c 100644
--- a/libstdc++-v3/docs/html/abi.txt
+++ b/libstdc++-v3/docs/html/abi.txt
@@ -1,12 +1,5 @@
-===========================
-
-See http://gcc.gnu.org/ml/libstdc++/2002-07/msg00054.html for why this
-document exists, why it's incomplete, and what needs to be done still.
-
-===========================
-
-2002-09-06 Benjamin Kosnik
+2002-10-14 Benjamin Kosnik
Description of the libstdc++ ABI.
@@ -244,7 +237,7 @@ II. Library ABI changes
The following will cause the library major version number to
increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.4.0.0".
-- any g++ compiler ABI changes
+- (anything) changing in the gcc/g++ compiler ABI
- (anything) changing size of an exported symbol
@@ -256,7 +249,14 @@ increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.4.0.0".
- (anything) deleting an exported symbol
-Note: adding an exported symbol, if it's in a new linker map name, is ok.
+- (anything) changing the size, alignment, or layout of types
+ specified in the C++ standard. These may not necessarily be
+ instantiated or otherwise exported in the library binary, and
+ include all the required locale facets, as well as things like
+ std::basic_streambuf, et al.
+
+Note: adding an exported symbol, if it's in a new and dependent
+interface name, is ok.
The following will cause the library revision version number to
increase, say from "libstdc++.so.5.0.0" to "libstdc++.so.5.0.1".
@@ -331,17 +331,20 @@ 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.
-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.
+This dataset is insufficient, yet a start. Also needed is a
+comprehensive check for all user-visible types part of the standard
+library for sizeof() and alignof() changes.
-It should be possible to use sizeof, alignof, and offset to compute
+Verifying compatible layouts of objects is not even attempted. It
+should be possible to use sizeof, alignof, and offsetof 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.
+another datafile. Then, compute this in a similar way for new
+binaries, and look for differences.
Another approach might be to use the -fdump-class-hierarchy flag to
-get information.
+get information. However, currently this approach gives insufficient
+data for use in library testing, as class data members, their offsets,
+and other detailed data is not displayed with this flag.
(See g++/7470 on how this was used to find bugs.)
Perhaps there are other C++ ABI checkers. If so, please notify
diff --git a/libstdc++-v3/src/globals.cc b/libstdc++-v3/src/globals.cc
index 7eb1a94..d85bf3a 100644
--- a/libstdc++-v3/src/globals.cc
+++ b/libstdc++-v3/src/globals.cc
@@ -48,6 +48,15 @@ namespace __gnu_cxx
{
using namespace std;
+ typedef char fake_facet_name[sizeof(char*)]
+ __attribute__ ((aligned(__alignof__(char*))));
+ fake_facet_name facet_name[6 + _GLIBCPP_NUM_CATEGORIES];
+
+ typedef char fake_locale_Impl[sizeof(locale::_Impl)]
+ __attribute__ ((aligned(__alignof__(locale::_Impl))));
+ fake_locale_Impl c_locale_impl;
+
+
// NB: The asm directives renames these non-exported, namespace
// __gnu_cxx symbols into the mistakenly exported, namespace std
// symbols in GLIBCPP_3.2.
@@ -61,19 +70,20 @@ namespace __gnu_cxx
fake_locale c_locale;
_GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8c_localeE, _ZSt8c_locale, GLIBCPP_3.2)
- typedef char fake_locale_Impl[sizeof(locale::_Impl)]
- __attribute__ ((aligned(__alignof__(locale::_Impl))));
- fake_locale_Impl c_locale_impl;
- _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13c_locale_implE, _ZSt13c_locale_impl, GLIBCPP_3.2)
+ // GLIBCXX_ABI > 5 will not need this symbol at all.
+ // It's here just as a placeholder, as the size of this exported
+ // object changed. The new symbol is not exported.
+ const int o = sizeof(locale::_Impl) - sizeof(char*[_GLIBCPP_NUM_CATEGORIES]);
+ typedef char fake_locale_Impl_compat[o]
+ __attribute__ ((aligned(__alignof__(o))));
+ fake_locale_Impl_compat c_locale_impl_compat;
+ _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx20c_locale_impl_compatE, _ZSt13c_locale_impl, GLIBCPP_3.2)
+
typedef char fake_facet_vec[sizeof(locale::facet*)]
__attribute__ ((aligned(__alignof__(locale::facet*))));
fake_facet_vec facet_vec[_GLIBCPP_NUM_FACETS];
_GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9facet_vecE, _ZSt9facet_vec, GLIBCPP_3.2)
- typedef char fake_facet_name[sizeof(char*)]
- __attribute__ ((aligned(__alignof__(char*))));
- fake_facet_name facet_name[6 + _GLIBCPP_NUM_CATEGORIES];
-
typedef char fake_ctype_c[sizeof(std::ctype<char>)]
__attribute__ ((aligned(__alignof__(std::ctype<char>))));
fake_ctype_c ctype_c;
diff --git a/libstdc++-v3/testsuite/abi_check.cc b/libstdc++-v3/testsuite/abi_check.cc
index 4018cd5..21ca619 100644
--- a/libstdc++-v3/testsuite/abi_check.cc
+++ b/libstdc++-v3/testsuite/abi_check.cc
@@ -191,7 +191,7 @@ line_to_symbol_info(std::string& input, symbol_info& output)
istringstream iss(size);
int x;
iss >> x;
- if (iss.good())
+ if (!iss.fail())
output.size = x;
input.erase(input.begin(), input.begin() + n + 1);
}