https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83893

            Bug ID: 83893
           Summary: gnu.ver linker script has overly loose wildcard
                    patterns
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

There is no reason to have patterns like these in the GLIBCXX_3.4 node in
config/abi/pre/gnu.ver

      std::[ABD-Z]*;
      std::a[a-c]*;
      std::ad[a-n]*;
      std::ad[p-z]*;
      std::a[e-z]*;

The only symbols that matches any of these are std::allocator specializations,
so having the other patterns just risks unintentionally matching new symbols
and giving them the wrong symbol version (e.g. see PR 83834).

Tightening the patterns was attempted in r211355 but reverted due to PR 61536.

We should revisit this in stage 1.

For a start:

--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -24,43 +24,25 @@ GLIBCXX_3.4 {
     # Names inside the 'extern' block are demangled names.
     extern "C++"
     {
-      std::[ABD-Z]*;
-      std::a[a-c]*;
-      std::ad[a-n]*;
-      std::ad[p-z]*;
-      std::a[e-z]*;
-#     std::ba[a-r]*;
-      std::basic_[a-e]*;
-      std::basic_f[a-h]*;
+#     std::adopt_lock;
+      std::allocator<char>::*;
+      std::allocator<wchar_t>::*;
+#     std::bad_*;
 #     std::basic_filebuf;
-      std::basic_f[j-r]*;
 #     std::basic_fstream;
-      std::basic_f[t-z]*;
-      std::basic_[g-h]*;
-      std::basic_i[a-e]*;
 #     std::basic_ifstream;
 #     std::basic_ios;
 #     std::basic_iostream;
-      std::basic_istr[a-d]*;
 #     std::basic_istream;
 #     std::basic_istringstream;
-      std::basic_i[t-z]*;
-      std::basic_[j-n]*;
-      std::basic_o[a-e]*;
 #     std::basic_ofstream;
-#     std::basic_o[g-z]*;
-      std::basic_o[g-r]*;
-      std::basic_ostr[a-d]*;
+#     std::basic_ostream;
 #     std::basic_ostringstream;
-      std::basic_[p-r]*;
 #     std::basic_streambuf
 #     std::basic_string
 #     std::basic_stringbuf
 #     std::basic_stringstream;
-      std::basic_[t-z]*;
-      std::ba[t-z]*;
-      std::b[b-z]*;
       std::cerr;
 #     std::char_traits;
 #     std::c[i-z]*;

Reply via email to