globals.cc (__gnu_cxx::c_locale_impl_compat): Add, alias to c_locale_impl.
authorBenjamin Kosnik <bkoz@redhat.com>
Tue, 15 Oct 2002 04:22:11 +0000 (04:22 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Tue, 15 Oct 2002 04:22:11 +0000 (04:22 +0000)
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

libstdc++-v3/ChangeLog
libstdc++-v3/docs/html/abi.txt
libstdc++-v3/src/globals.cc
libstdc++-v3/testsuite/abi_check.cc

index b4bf7700ae5651c76156e4e62bba4fc1cfc9a35a..e6c7b837b91a1fb9ee2d8fdfa3afb1c130ac3504 100644 (file)
@@ -1,3 +1,10 @@
+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.
index 770c3cf59740b9732f8ae04fa8e5caf3177adf42..73cb46c9c099dee1c276a9add90ac499538831f8 100644 (file)
@@ -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
index 7eb1a9477d1d9a7cb3540d0fb34b934615d6befe..d85bf3a63692ba582fcb5ef034985160cedcc18f 100644 (file)
@@ -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;
index 4018cd5377ee956c36aad2c7eed88662ca562b9e..21ca619ca83f278e4823ceeaffe614d514455652 100644 (file)
@@ -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);
        }