diff options
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 8 | ||||
-rw-r--r-- | binutils/stabs.c | 26 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/cxxfilt.exp | 34 |
3 files changed, 24 insertions, 44 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 35fca3b..d7f1685 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,11 +1,3 @@ -2019-01-07 Nick Clifton <nickc@redhat.com> - - PR 24044 - * stabs.c (parse_stab_argtypes): Remove call to - cplus_mangle_opcode. - * testsuite/binutils-all/cxxfilt.exp: Replace tests of v2 encoding - with v3 encoding. Add escape for known failures. - 2018-12-25 Yoshinori Sato <ysato@users.sourceforge.jp> * readelf.c (get_machine_flags): Add RXv3 output. diff --git a/binutils/stabs.c b/binutils/stabs.c index e84aa6f..18788b9 100644 --- a/binutils/stabs.c +++ b/binutils/stabs.c @@ -3037,15 +3037,27 @@ parse_stab_argtypes (void *dhandle, struct stab_handle *info, && fieldname[1] == 'p' && (fieldname[2] == '$' || fieldname[2] == '.')) { - /* Opname selection is no longer supported by libiberty's demangler. */ - return DEBUG_TYPE_NULL; - } + const char *opname; - physname = (char *) xmalloc (mangled_name_len); - if (is_constructor) - physname[0] = '\0'; + 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); + } else - strcpy (physname, fieldname); + { + physname = (char *) xmalloc (mangled_name_len); + if (is_constructor) + physname[0] = '\0'; + else + 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 203a703..116caeb 100644 --- a/binutils/testsuite/binutils-all/cxxfilt.exp +++ b/binutils/testsuite/binutils-all/cxxfilt.exp @@ -14,30 +14,6 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. -# For some reason cxxfilt is not working on the following targets. -# FIXME: Investigate why. -if { [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 { - return -} - proc test_cxxfilt {options mangled_string demangled_string} { global CXXFILT global CXXFILTFLAGS @@ -56,12 +32,12 @@ proc test_cxxfilt {options mangled_string demangled_string} { # Mangled and demangled strings stolen from libiberty/testsuite/demangle-expected. test_cxxfilt {} \ - "_Z1fIvJiELb0EEvPDOT1_EFT_DpT0_E" \ - "void f.void, int, false.(void (.)(int) noexcept(false))*" + "AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue" \ + "ivTSolver::AddAlignment(unsigned int, ivInteractor ., ivTGlue .)*" -test_cxxfilt {--format=gnu-v3} \ - "_Z14int_if_addableI1YERiP1AIXszpldecvPT_Li0EdecvS4_Li0EEE" \ - "int& int_if_addable.Y.(A.sizeof ((.((Y.)(0))).(.((Y.)(0))))..)*" +test_cxxfilt {--format=lucid} \ + "__ct__12strstreambufFPFl_PvPFPv_v" \ + "strstreambuf..(strstreambuf|_ct)(void .(.)(long), void (.)(void .))*" test_cxxfilt {--no-recurse-limit} \ "Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_" \ |