diff options
author | Benjamin Kosnik <bkoz@redhat.com> | 2002-10-15 04:22:11 +0000 |
---|---|---|
committer | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2002-10-15 04:22:11 +0000 |
commit | 8c536ae9dc02b5a8bc34a64fadbeb558f2ac4065 (patch) | |
tree | 64dd2d748cd96f7165aaba10dd9f2d106654dacb | |
parent | 51502ebc130ebef2a7febc060784c42ac120b754 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/docs/html/abi.txt | 37 | ||||
-rw-r--r-- | libstdc++-v3/src/globals.cc | 26 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/abi_check.cc | 2 |
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); } |