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
This commit is contained in:
Benjamin Kosnik 2002-10-15 04:22:11 +00:00 committed by Benjamin Kosnik
parent 51502ebc13
commit 8c536ae9dc
4 changed files with 46 additions and 26 deletions

View 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.

View 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

View 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;

View 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);
}