aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils/ChangeLog12
-rw-r--r--binutils/cxxfilt.c49
-rw-r--r--binutils/stabs.c26
-rw-r--r--binutils/testsuite/binutils-all/cxxfilt.exp37
4 files changed, 53 insertions, 71 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 2890532..995a6b3 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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
diff --git a/binutils/cxxfilt.c b/binutils/cxxfilt.c
index 0df99fc..7b8210e 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 <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
diff --git a/binutils/stabs.c b/binutils/stabs.c
index 18788b9..e84aa6f 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 116caeb..d59c26a 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_" \