Remove support for old gnu v2 name mangling.
authorNick Clifton <nickc@redhat.com>
Tue, 8 Jan 2019 16:53:02 +0000 (16:53 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 8 Jan 2019 16:53:26 +0000 (16:53 +0000)
PR 24044
* cxxfilt.c (hp_symbol_characters): Delete.
(main): Remove depcreated demangling styles.
* stabs.c (parse_stab_argtypes): Remove support for old gnu v2
demangling opnames.
* testsuite/binutils-all/cxxfilt.exp: Use the
--no-strip-underscore option for targets that do prefix their
symbols with underscores.
Update tests to elimiate those that use gnu v2 encoding.

binutils/ChangeLog
binutils/cxxfilt.c
binutils/stabs.c
binutils/testsuite/binutils-all/cxxfilt.exp

index 2890532..995a6b3 100644 (file)
@@ -1,3 +1,15 @@
+2019-01-08  Nick Clifton  <nickc@redhat.com>
+
+       PR 24044
+       * cxxfilt.c (hp_symbol_characters): Delete.
+       (main): Remove depcreated demangling styles.
+       * stabs.c (parse_stab_argtypes): Remove support for old gnu v2
+       demangling opnames.
+       * testsuite/binutils-all/cxxfilt.exp: Use the
+       --no-strip-underscore option for targets that do prefix their
+       symbols with underscores.
+       Update tests to elimiate those that use gnu v2 encoding.
+
 2019-01-08  Tamar Christina  <tamar.christina@arm.com>
 
        PR 24065
index 0df99fc..7b8210e 100644 (file)
@@ -135,42 +135,6 @@ standard_symbol_characters (void)
   return "_$.";
 }
 
-/* Return the string of non-alnum characters that may occur
-   as a valid symbol name component in an HP object file.
-
-   Note that, since HP's compiler generates object code straight from
-   C++ source, without going through an assembler, its mangled
-   identifiers can use all sorts of characters that no assembler would
-   tolerate, so the alphabet this function creates is a little odd.
-   Here are some sample mangled identifiers offered by HP:
-
-       typeid*__XT24AddressIndExpClassMember_
-       [Vftptr]key:__dt__32OrdinaryCompareIndExpClassMemberFv
-       __ct__Q2_9Elf64_Dyn18{unnamed.union.#1}Fv
-
-   This still seems really weird to me, since nowhere else in this
-   file is there anything to recognize curly brackets, parens, etc.
-   I've talked with Srikanth <srikanth@cup.hp.com>, and he assures me
-   this is right, but I still strongly suspect that there's a
-   misunderstanding here.
-
-   If we decide it's better for c++filt to use HP's assembler syntax
-   to scrape identifiers out of its input, here's the definition of
-   the symbol name syntax from the HP assembler manual:
-
-       Symbols are composed of uppercase and lowercase letters, decimal
-       digits, dollar symbol, period (.), ampersand (&), pound sign(#) and
-       underscore (_). A symbol can begin with a letter, digit underscore or
-       dollar sign. If a symbol begins with a digit, it must contain a
-       non-digit character.
-
-   So have fun.  */
-static const char *
-hp_symbol_characters (void)
-{
-  return "_$.<>#,*&[]:(){}";
-}
-
 extern int main (int, char **);
 
 int
@@ -245,20 +209,13 @@ main (int argc, char **argv)
 
   switch (current_demangling_style)
     {
-    case gnu_demangling:
-    case lucid_demangling:
-    case arm_demangling:
+    case auto_demangling:
+    case gnu_v3_demangling:
     case java_demangling:
-    case edg_demangling:
     case gnat_demangling:
-    case gnu_v3_demangling:
     case dlang_demangling:
     case rust_demangling:
-    case auto_demangling:
-      valid_symbols = standard_symbol_characters ();
-      break;
-    case hp_demangling:
-      valid_symbols = hp_symbol_characters ();
+       valid_symbols = standard_symbol_characters ();
       break;
     default:
       /* Folks should explicitly indicate the appropriate alphabet for
index 18788b9..e84aa6f 100644 (file)
@@ -3037,27 +3037,15 @@ parse_stab_argtypes (void *dhandle, struct stab_handle *info,
          && fieldname[1] == 'p'
          && (fieldname[2] == '$' || fieldname[2] == '.'))
        {
-         const char *opname;
-
-         opname = cplus_mangle_opname (fieldname + 3, 0);
-         if (opname == NULL)
-           {
-             fprintf (stderr, _("No mangling for \"%s\"\n"), fieldname);
-             return DEBUG_TYPE_NULL;
-           }
-         mangled_name_len += strlen (opname);
-         physname = (char *) xmalloc (mangled_name_len);
-         strncpy (physname, fieldname, 3);
-         strcpy (physname + 3, opname);
+         /* Opname selection is no longer supported by libiberty's demangler.  */
+         return DEBUG_TYPE_NULL;
        }
+
+      physname = (char *) xmalloc (mangled_name_len);
+      if (is_constructor)
+       physname[0] = '\0';
       else
-       {
-         physname = (char *) xmalloc (mangled_name_len);
-         if (is_constructor)
-           physname[0] = '\0';
-         else
-           strcpy (physname, fieldname);
-       }
+       strcpy (physname, fieldname);
 
       physname_len = strlen (physname);
       strcat (physname, buf);
index 116caeb..d59c26a 100644 (file)
@@ -18,8 +18,33 @@ proc test_cxxfilt {options mangled_string demangled_string} {
     global CXXFILT
     global CXXFILTFLAGS
     
+    if {   [istarget "arm*-*-pe"] \
+        || [istarget "cris*-*-*"] \
+       || [istarget "cr16-*-*"] \
+       || [istarget "crx*-*-*"] \
+       || [istarget "epiphany-*-*"] \
+       || [istarget "ip2k-*-*"] \
+       || [istarget "metag-*-*"] \
+       || [istarget "mn10200-*-*"] \
+       || [istarget "mn10300-*-*"] \
+       || [istarget "ns32k-*-*"] \
+       || [istarget "pdp11-*-*"] \
+       || [istarget "rl78-*-*"] \
+       || [istarget "rx-*-*"] \
+       || [istarget "sh-*-*"] \
+       || [istarget "tic4*-*-*"] \
+       || [istarget "tic54*-*-*"] \
+       || [istarget "v850-*-*"] \
+       || [istarget "z8k-*-*"] \
+       || [istarget "*-*-cygwin"] \
+       || [istarget "*-*-mingw32"] } then {
+       set cxxfilt_strip_opt "--no-strip-underscore"
+    } else {
+       set cxxfilt_strip_opt ""
+    }
+
     set testname "cxxfilt: demangling $mangled_string"
-    set got [binutils_run $CXXFILT "$options $CXXFILTFLAGS $mangled_string"]
+    set got [binutils_run $CXXFILT "$cxxfilt_strip_opt $options $CXXFILTFLAGS $mangled_string"]
 
     if ![regexp $demangled_string $got] then {
        fail "$testname"
@@ -32,12 +57,12 @@ proc test_cxxfilt {options mangled_string demangled_string} {
 
 # Mangled and demangled strings stolen from libiberty/testsuite/demangle-expected.
 test_cxxfilt {} \
-    "AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue" \
-    "ivTSolver::AddAlignment(unsigned int, ivInteractor ., ivTGlue .)*"
+    "_Z1fIvJiELb0EEvPDOT1_EFT_DpT0_E" \
+    "void f.void, int, false.(void (.)(int) noexcept(false))*"
 
-test_cxxfilt {--format=lucid} \
-    "__ct__12strstreambufFPFl_PvPFPv_v" \
-    "strstreambuf..(strstreambuf|_ct)(void .(.)(long), void (.)(void .))*"
+test_cxxfilt {--format=gnu-v3} \
+    "_Z14int_if_addableI1YERiP1AIXszpldecvPT_Li0EdecvS4_Li0EEE" \
+    "int& int_if_addable.Y.(A.sizeof ((.((Y.)(0))).(.((Y.)(0))))..)*"
 
 test_cxxfilt {--no-recurse-limit} \
     "Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_" \