mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 11:04:18 +08:00
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.
This commit is contained in:
parent
c8fcc36012
commit
236f4ebe3a
@ -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
|
||||
|
@ -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 java_demangling:
|
||||
case edg_demangling:
|
||||
case gnat_demangling:
|
||||
case auto_demangling:
|
||||
case gnu_v3_demangling:
|
||||
case java_demangling:
|
||||
case gnat_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
|
||||
|
@ -3037,27 +3037,15 @@ parse_stab_argtypes (void *dhandle, struct stab_handle *info,
|
||||
&& fieldname[1] == 'p'
|
||||
&& (fieldname[2] == '$' || fieldname[2] == '.'))
|
||||
{
|
||||
const char *opname;
|
||||
/* Opname selection is no longer supported by libiberty's demangler. */
|
||||
return DEBUG_TYPE_NULL;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
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);
|
||||
|
@ -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_" \
|
||||
|
Loading…
Reference in New Issue
Block a user