From 236f4ebe3ac7e8f94184fdcc39c70d74cc62b82a Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 8 Jan 2019 16:53:02 +0000 Subject: [PATCH] Remove support for old gnu v2 name mangling. 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 | 12 +++++ binutils/cxxfilt.c | 49 ++------------------- binutils/stabs.c | 26 +++-------- binutils/testsuite/binutils-all/cxxfilt.exp | 37 +++++++++++++--- 4 files changed, 53 insertions(+), 71 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 2890532c18..995a6b3f67 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,15 @@ +2019-01-08 Nick Clifton + + 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 PR 24065 diff --git a/binutils/cxxfilt.c b/binutils/cxxfilt.c index 0df99fc637..7b8210e6cc 100644 --- a/binutils/cxxfilt.c +++ b/binutils/cxxfilt.c @@ -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 , 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 diff --git a/binutils/stabs.c b/binutils/stabs.c index 18788b9b6d..e84aa6f1ac 100644 --- a/binutils/stabs.c +++ b/binutils/stabs.c @@ -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); diff --git a/binutils/testsuite/binutils-all/cxxfilt.exp b/binutils/testsuite/binutils-all/cxxfilt.exp index 116caebccf..d59c26ae91 100644 --- a/binutils/testsuite/binutils-all/cxxfilt.exp +++ b/binutils/testsuite/binutils-all/cxxfilt.exp @@ -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_" \ -- 2.34.1