Commit e78d8df4 by Benjamin Kosnik Committed by Benjamin Kosnik

abi_check.cc (check_version): Update known versions.


2003-05-01  Benjamin Kosnik  <bkoz@redhat.com>

	* testsuite/abi_check.cc (check_version): Update known versions.
	Check added symbols for version_name != base version. Add missing
	symbols to incompatible list.

From-SVN: r66352
parent 06b021af
2003-05-01 Benjamin Kosnik <bkoz@redhat.com> 2003-05-01 Benjamin Kosnik <bkoz@redhat.com>
* testsuite/abi_check.cc (check_version): Update known versions.
Check added symbols for version_name != base version. Add missing
symbols to incompatible list.
2003-05-01 Benjamin Kosnik <bkoz@redhat.com>
* acinclude.m4 (GLIBCPP_EXPORT_FLAGS): Remove -Winline. * acinclude.m4 (GLIBCPP_EXPORT_FLAGS): Remove -Winline.
* aclocal.m4: Regenerated. * aclocal.m4: Regenerated.
* configure: Regenerated. * configure: Regenerated.
......
...@@ -77,34 +77,39 @@ typedef __gnu_cxx::hash_map<std::string, symbol_info> symbol_infos; ...@@ -77,34 +77,39 @@ typedef __gnu_cxx::hash_map<std::string, symbol_info> symbol_infos;
bool bool
check_version(const symbol_info& test) check_version(const symbol_info& test, bool added = false)
{ {
bool ret = true;
typedef std::vector<std::string> compat_list; typedef std::vector<std::string> compat_list;
static compat_list known; static compat_list known_versions;
if (known.empty()) if (known_versions.empty())
{ {
known.push_back("GLIBCPP_3.2"); known_versions.push_back("GLIBCPP_3.2"); // base version
known.push_back("GLIBCPP_3.2.1"); known_versions.push_back("GLIBCPP_3.2.1");
known.push_back("GLIBCPP_3.2.2"); known_versions.push_back("GLIBCPP_3.2.2");
known.push_back("GLIBCPP_3.4"); known_versions.push_back("GLIBCPP_3.2.3"); // gcc-3.3.0
known.push_back("CXXABI_1.2"); known_versions.push_back("GLIBCPP_3.4");
known.push_back("CXXABI_1.2.1"); known_versions.push_back("CXXABI_1.2");
known.push_back("CXXABI_1.3"); known_versions.push_back("CXXABI_1.2.1");
known_versions.push_back("CXXABI_1.3");
} }
compat_list::iterator begin = known_versions.begin();
compat_list::iterator end = known.end(); compat_list::iterator end = known_versions.end();
// Check version names for compatibility... // Check version names for compatibility...
compat_list::iterator it1 = find(known.begin(), end, test.version_name); compat_list::iterator it1 = find(begin, end, test.version_name);
// Check for weak label. // Check for weak label.
compat_list::iterator it2 = find(known.begin(), end, test.name); compat_list::iterator it2 = find(begin, end, test.name);
if (it1 != end || it2 != end)
ret = true;
return ret; // Check that added symbols aren't added in the base version.
bool compat = true;
if (added && test.version_name == known_versions[0])
compat = false;
if (it1 == end && it2 == end)
compat = false;
return compat;
} }
bool bool
...@@ -380,9 +385,16 @@ main(int argc, char** argv) ...@@ -380,9 +385,16 @@ main(int argc, char** argv)
missing_names.push_back(what); missing_names.push_back(what);
} }
// Check shared names for compatibility. // Check missing names for compatibility.
typedef pair<symbol_info, symbol_info> symbol_pair; typedef pair<symbol_info, symbol_info> symbol_pair;
vector<symbol_pair> incompatible; vector<symbol_pair> incompatible;
for (size_t i = 0; i < missing_names.size(); ++i)
{
symbol_info base = baseline_symbols[missing_names[i]];
incompatible.push_back(symbol_pair(base, base));
}
// Check shared names for compatibility.
for (size_t i = 0; i < shared_names.size(); ++i) for (size_t i = 0; i < shared_names.size(); ++i)
{ {
symbol_info base = baseline_symbols[shared_names[i]]; symbol_info base = baseline_symbols[shared_names[i]];
...@@ -395,11 +407,8 @@ main(int argc, char** argv) ...@@ -395,11 +407,8 @@ main(int argc, char** argv)
for (size_t i = 0; i < added_names.size(); ++i) for (size_t i = 0; i < added_names.size(); ++i)
{ {
symbol_info test = test_symbols[added_names[i]]; symbol_info test = test_symbols[added_names[i]];
if (!check_version(test)) if (!check_version(test, true))
{
incompatible.push_back(symbol_pair(test, test)); incompatible.push_back(symbol_pair(test, test));
cout << test.version_name << endl;
}
} }
// Report results. // Report results.
......
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