Commit 8c536ae9 by Benjamin Kosnik Committed by Benjamin Kosnik

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
parent 51502ebc
2002-10-14 Benjamin Kosnik <bkoz@redhat.com> 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. * testsuite/22_locale/static_members.cc (test02): Less provincial.
2002-10-14 Benjamin Kosnik <bkoz@redhat.com> 2002-10-14 Benjamin Kosnik <bkoz@redhat.com>
......
=========================== 2002-10-14 Benjamin Kosnik
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
Description of the libstdc++ ABI. Description of the libstdc++ ABI.
...@@ -244,7 +237,7 @@ II. Library ABI changes ...@@ -244,7 +237,7 @@ II. Library ABI changes
The following will cause the library major version number to The following will cause the library major version number to
increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.4.0.0". 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 - (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". ...@@ -256,7 +249,14 @@ increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.4.0.0".
- (anything) deleting an exported symbol - (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 The following will cause the library revision version number to
increase, say from "libstdc++.so.5.0.0" to "libstdc++.so.5.0.1". 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 ...@@ -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 are checked to make sure they are the same size as the same object in
the baseline. the baseline.
In the future, more tests should be added. In particular, vtable This dataset is insufficient, yet a start. Also needed is a
information, offsets of data members in class objects, and other comprehensive check for all user-visible types part of the standard
layout information should be checked. 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 offsets for each structure and type in the standard library, saving to
another datafile. Then, compute this for new binaries, and look for another datafile. Then, compute this in a similar way for new
differences. binaries, and look for differences.
Another approach might be to use the -fdump-class-hierarchy flag to 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.) (See g++/7470 on how this was used to find bugs.)
Perhaps there are other C++ ABI checkers. If so, please notify Perhaps there are other C++ ABI checkers. If so, please notify
......
...@@ -48,6 +48,15 @@ namespace __gnu_cxx ...@@ -48,6 +48,15 @@ namespace __gnu_cxx
{ {
using namespace std; 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 // NB: The asm directives renames these non-exported, namespace
// __gnu_cxx symbols into the mistakenly exported, namespace std // __gnu_cxx symbols into the mistakenly exported, namespace std
// symbols in GLIBCPP_3.2. // symbols in GLIBCPP_3.2.
...@@ -61,19 +70,20 @@ namespace __gnu_cxx ...@@ -61,19 +70,20 @@ namespace __gnu_cxx
fake_locale c_locale; fake_locale c_locale;
_GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8c_localeE, _ZSt8c_locale, GLIBCPP_3.2) _GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx8c_localeE, _ZSt8c_locale, GLIBCPP_3.2)
typedef char fake_locale_Impl[sizeof(locale::_Impl)] // GLIBCXX_ABI > 5 will not need this symbol at all.
__attribute__ ((aligned(__alignof__(locale::_Impl)))); // It's here just as a placeholder, as the size of this exported
fake_locale_Impl c_locale_impl; // object changed. The new symbol is not exported.
_GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx13c_locale_implE, _ZSt13c_locale_impl, GLIBCPP_3.2) 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*)] typedef char fake_facet_vec[sizeof(locale::facet*)]
__attribute__ ((aligned(__alignof__(locale::facet*)))); __attribute__ ((aligned(__alignof__(locale::facet*))));
fake_facet_vec facet_vec[_GLIBCPP_NUM_FACETS]; fake_facet_vec facet_vec[_GLIBCPP_NUM_FACETS];
_GLIBCPP_ASM_SYMVER(_ZN9__gnu_cxx9facet_vecE, _ZSt9facet_vec, GLIBCPP_3.2) _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>)] typedef char fake_ctype_c[sizeof(std::ctype<char>)]
__attribute__ ((aligned(__alignof__(std::ctype<char>)))); __attribute__ ((aligned(__alignof__(std::ctype<char>))));
fake_ctype_c ctype_c; fake_ctype_c ctype_c;
......
...@@ -191,7 +191,7 @@ line_to_symbol_info(std::string& input, symbol_info& output) ...@@ -191,7 +191,7 @@ line_to_symbol_info(std::string& input, symbol_info& output)
istringstream iss(size); istringstream iss(size);
int x; int x;
iss >> x; iss >> x;
if (iss.good()) if (!iss.fail())
output.size = x; output.size = x;
input.erase(input.begin(), input.begin() + n + 1); input.erase(input.begin(), input.begin() + n + 1);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment