Bug 15801 - some C++11 symbols can't be demangled
Summary: some C++11 symbols can't be demangled
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: c++ (show other bugs)
Version: unknown
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-07-30 01:06 UTC by Ben Longbons
Modified: 2022-12-23 19:20 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
my original program, trimmed as much as possible without breaking types very much (885 bytes, text/plain)
2013-07-30 05:57 UTC, Ben Longbons
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ben Longbons 2013-07-30 01:06:19 UTC
When debugging my program, I noticed that several symbols in a recursive template failed. The simplest one is:
_Z7extractILc9ELi0EEbN7strings7XStringE6RecordIXT_EXT0_EJEE

I noticed a similar case in libiberty test data: _Z1gIJidEEDTclL_Z1fEspplfp_Li1EEEDpT_

Talking directly to libiberty, my symbol also demangles. I have not observed any difference between my symbol and that one.

The test entry specifies gnu-v3 (I haven't found any documentation on how that is different than gnu - older or newer?), but (gdb) set demangle-style gnu-v3 does not make maintenance demangle accept it.

I have not observed any difference between gdb 7.6 and gdb trunk.

Note: the c++filt program, which is part of binutils, learned to understand the symbol sometime between 2.22 and 2.23

Incidentally, this bug is an *excellent* argument for why static libraries (and/or copylibs) need to die.
Comment 1 Keith Seitz 2013-07-30 01:46:32 UTC
The two examples given demangle for me using 7.6.50.20130729-cvs, and they both demangle identically to the Fedora 18 system c++filt (version 2.23.51.0.1-6.fc18 20120806):

$ ./gdb -nx -q
(gdb) set lang c++
(gdb) maint demangle _Z7extractILc9ELi0EEbN7strings7XStringE6RecordIXT_EXT0_EJEE
bool extract<(char)9, 0>(strings::XString, Record<(char)9, 0>)
(gdb) maint demangle _Z1gIJidEEDTclL_Z1fEspplfp_Li1EEEDpT_
decltype (f(({parm#1}+(1))...)) g<int, double>(int, double)

In fact, I tried the 7.6 branch, and that, too, works the same way. So there is something unique to your situation that is causing you problems. Do you have a test case that you can share?
Comment 2 Ben Longbons 2013-07-30 05:04:42 UTC
I didn't realize you had to (gdb) set lang c++
I recommend a warning; I did not expect this from (gdb) help maint demangle

There *is*, however, still the bug that originally lead me on this hunt:

A previous version of gcc (4.6) mangled symbols wrong (I instead of J for packs; I did read the mangling ABI spec), so (for bugward ABI compatibility) recent versions of gcc (4.7, 4.8) emit two symbols pointing to the same address.

I don't know if there actually remains enough information to consistently pick the right one, unless you do a hacky heuristic like "if there is more than one symbol for an address, prefer the one with more Js and less Is".

Oddly, however, c++filt 2.23 sometimes manages to demangle even the incorrect mangling. But gdb sometimes gives up and sometimes produces a totally bogus demangling (c++filt does not do this).

The exact details of this problem are hard to investigate because of bug 12707 ... it sometimes makes a difference whether debug symbols are on or off. I'll make an attachment with some further commentary.
Comment 3 Ben Longbons 2013-07-30 05:57:20 UTC
Created attachment 7127 [details]
my original program, trimmed as much as possible without breaking types very much

Some observations:
gcc 4.6 is best to test with, since it *only* emits the wrong symbols. With gcc 4.7 and gcc 4.8, this might be a heisenbug. clang only emits the right symbols (but clang is still useless for compiling programs to be debugged).

puts() is there just to set a nice breakpoint.

The need to explicitly call 'set lang c++' before 'maint demangle' is *really* annoying when using 'up' or 'frame' after a call to a C library.

Hm ... cosmetic issue, but perhaps gdb should not print the () if it successfully demangles a name and it's not printing arguments

backtrace for gcc 4.6, attempting demangling:
(gdb) bt
#0  _IO_puts (str=0x4015ec "hello") at ioputs.c:34
#1  0x00000000004014ed in bool extract<(char)32, global_reg>(strings::XString, VRecord<(char)32, global_reg>) ()
#2  0x0000000000401493 in bool extract<(char)9, 1, VRecord<(char)32, global_reg>>(strings::XString, Record<(char)9, 1, VRecord<(char)32, global_reg>>) ()
#3  0x0000000000401422 in extract<(char)9, 2, TimeT<VRecord<(char)32, global_reg> >*> ()
#4  0x0000000000401391 in bool extract<(char)9, 3, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 3, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#5  0x00000000004012e7 in extract<(char)9, 4, IP_String<strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >*> ()
#6  0x0000000000401228 in extract<(char)9, 5, TimeT<IP_String*, strings::VString<(unsigned char)254>*, IP_String, VRecord<(char)32, global_reg> >*> ()
#7  0x000000000040115c in extract<(char)9, 6, timestamp_seconds_buffer<TimeT*, IP_String*, strings::VString<(unsigned char)254>*, IP_String, VRecord<(char)32, global_reg> >*> ()
#8  0x0000000000401083 in extract<(char)9, 7, AccountEmail<timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, IP_String, VRecord<(char)32, global_reg> >*> ()
#9  0x0000000000400fa7 in bool extract<(char)9, 8, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 8, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#10 0x0000000000400eb8 in bool extract<(char)9, 9, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 9, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#11 0x0000000000400da8 in bool extract<(char)9, 10, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 10, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#12 0x0000000000400c86 in _Z7extractILc9ELi11EP29timestamp_milliseconds_bufferIPN7strings7VStringILh1EEEPiS6_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS3_ILh254EEESC_7VRecordILc32E10global_regEEEbNS2_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#13 0x0000000000400b52 in _Z7extractILc9ELi12EP12AccountCryptIP29timestamp_milliseconds_bufferPN7strings7VStringILh1EEEPiS8_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS5_ILh254EEESE_7VRecordILc32E10global_regEEEbNS4_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#14 0x0000000000400a0d in _Z7extractILc9ELi13EP11AccountNameIP12AccountCryptP29timestamp_milliseconds_bufferPN7strings7VStringILh1EEEPiSA_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS7_ILh254EEESG_7VRecordILc32E10global_regEEEbNS6_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#15 0x00000000004008ac in bool extract<(char)9, 14, int*, AccountName*, AccountCrypt*, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 14, int*, AccountName*, AccountCrypt*, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#16 0x00000000004006fc in extract(strings::XString, AuthData*) ()
#17 0x000000000040073d in mmo_auth_init(strings::XString) ()
#18 0x0000000000400752 in main ()

backtrace for gcc 4.6, no demangling:
(gdb) bt
#0  _IO_puts (str=0x4015ec "hello") at ioputs.c:34
#1  0x00000000004014ed in _Z7extractILc32E10global_regEbN7strings7XStringE7VRecordIXT_ET0_E ()
#2  0x0000000000401493 in _Z7extractILc9ELi1E7VRecordILc32E10global_regEIEEbN7strings7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#3  0x0000000000401422 in _Z7extractILc9ELi2EP5TimeTI7VRecordILc32E10global_regEEEbN7strings7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#4  0x0000000000401391 in _Z7extractILc9ELi3EPN7strings7VStringILh254EEEIP5TimeT7VRecordILc32E10global_regEEEbNS0_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#5  0x00000000004012e7 in _Z7extractILc9ELi4EP9IP_StringIPN7strings7VStringILh254EEEP5TimeT7VRecordILc32E10global_regEEEbNS2_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#6  0x0000000000401228 in _Z7extractILc9ELi5EP5TimeTIP9IP_StringPN7strings7VStringILh254EEES1_7VRecordILc32E10global_regEEEbNS4_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#7  0x000000000040115c in _Z7extractILc9ELi6EP24timestamp_seconds_bufferIP5TimeTP9IP_StringPN7strings7VStringILh254EEES3_7VRecordILc32E10global_regEEEbNS6_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#8  0x0000000000401083 in _Z7extractILc9ELi7EP12AccountEmailIP24timestamp_seconds_bufferP5TimeTP9IP_StringPN7strings7VStringILh254EEES5_7VRecordILc32E10global_regEEEbNS8_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#9  0x0000000000400fa7 in _Z7extractILc9ELi8EPiIP12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPN7strings7VStringILh254EEES6_7VRecordILc32E10global_regEEEbNS9_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#10 0x0000000000400eb8 in _Z7extractILc9ELi9EPiIS0_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPN7strings7VStringILh254EEES6_7VRecordILc32E10global_regEEEbNS9_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#11 0x0000000000400da8 in _Z7extractILc9ELi10EPN7strings7VStringILh1EEEIPiS4_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS1_ILh254EEESA_7VRecordILc32E10global_regEEEbNS0_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#12 0x0000000000400c86 in _Z7extractILc9ELi11EP29timestamp_milliseconds_bufferIPN7strings7VStringILh1EEEPiS6_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS3_ILh254EEESC_7VRecordILc32E10global_regEEEbNS2_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#13 0x0000000000400b52 in _Z7extractILc9ELi12EP12AccountCryptIP29timestamp_milliseconds_bufferPN7strings7VStringILh1EEEPiS8_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS5_ILh254EEESE_7VRecordILc32E10global_regEEEbNS4_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#14 0x0000000000400a0d in _Z7extractILc9ELi13EP11AccountNameIP12AccountCryptP29timestamp_milliseconds_bufferPN7strings7VStringILh1EEEPiSA_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS7_ILh254EEESG_7VRecordILc32E10global_regEEEbNS6_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#15 0x00000000004008ac in _Z7extractILc9ELi14EPiIP11AccountNameP12AccountCryptP29timestamp_milliseconds_bufferPN7strings7VStringILh1EEES0_S0_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS8_ILh254EEESG_7VRecordILc32E10global_regEEEbNS7_7XStringE6RecordIXT_EXT0_EIT1_DpT2_EE ()
#16 0x00000000004006fc in _ZL7extractN7strings7XStringEP8AuthData ()
#17 0x000000000040073d in _Z13mmo_auth_initN7strings7XStringE ()
#18 0x0000000000400752 in main ()

backtrace for clang, with demangling:
#0  _IO_puts (str=0x40247c "hello") at ioputs.c:34
#1  0x000000000040239c in bool extract<(char)32, global_reg>(strings::XString, VRecord<(char)32, global_reg>) ()
#2  0x000000000040234d in bool extract<(char)9, 1, VRecord<(char)32, global_reg>>(strings::XString, Record<(char)9, 1, VRecord<(char)32, global_reg>>) ()
#3  0x0000000000402317 in bool extract<(char)9, 2, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 2, TimeT*, VRecord<(char)32, global_reg> >) ()
#4  0x0000000000402298 in bool extract<(char)9, 3, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 3, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#5  0x00000000004021f9 in bool extract<(char)9, 4, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 4, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#6  0x0000000000402140 in bool extract<(char)9, 5, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 5, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#7  0x0000000000402090 in bool extract<(char)9, 6, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 6, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#8  0x0000000000401fe8 in bool extract<(char)9, 7, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 7, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#9  0x0000000000401f58 in bool extract<(char)9, 8, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 8, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#10 0x0000000000401ec0 in bool extract<(char)9, 9, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 9, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#11 0x0000000000401e00 in bool extract<(char)9, 10, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 10, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#12 0x0000000000401d48 in bool extract<(char)9, 11, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 11, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#13 0x0000000000401c7b in bool extract<(char)9, 12, AccountCrypt*, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 12, AccountCrypt*, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#14 0x0000000000401ba9 in bool extract<(char)9, 13, AccountName*, AccountCrypt*, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 13, AccountName*, AccountCrypt*, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#15 0x000000000040094f in bool extract<(char)9, 14, int*, AccountName*, AccountCrypt*, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >(strings::XString, Record<(char)9, 14, int*, AccountName*, AccountCrypt*, timestamp_milliseconds_buffer*, strings::VString<(unsigned char)1>*, int*, int*, AccountEmail*, timestamp_seconds_buffer*, TimeT*, IP_String*, strings::VString<(unsigned char)254>*, TimeT*, VRecord<(char)32, global_reg> >) ()
#16 0x0000000000400879 in extract(strings::XString, AuthData*) ()
#17 0x0000000000400685 in mmo_auth_init(strings::XString) ()
#18 0x000000000040089d in main ()

backtrace for clang, no demangling:
(gdb) bt
#0  _IO_puts (str=0x40247c "hello") at ioputs.c:34
#1  0x000000000040239c in _Z7extractILc32E10global_regEbN7strings7XStringE7VRecordIXT_ET0_E ()
#2  0x000000000040234d in _Z7extractILc9ELi1E7VRecordILc32E10global_regEJEEbN7strings7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#3  0x0000000000402317 in _Z7extractILc9ELi2EP5TimeTJ7VRecordILc32E10global_regEEEbN7strings7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#4  0x0000000000402298 in _Z7extractILc9ELi3EPN7strings7VStringILh254EEEJP5TimeT7VRecordILc32E10global_regEEEbNS0_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#5  0x00000000004021f9 in _Z7extractILc9ELi4EP9IP_StringJPN7strings7VStringILh254EEEP5TimeT7VRecordILc32E10global_regEEEbNS2_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#6  0x0000000000402140 in _Z7extractILc9ELi5EP5TimeTJP9IP_StringPN7strings7VStringILh254EEES1_7VRecordILc32E10global_regEEEbNS4_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#7  0x0000000000402090 in _Z7extractILc9ELi6EP24timestamp_seconds_bufferJP5TimeTP9IP_StringPN7strings7VStringILh254EEES3_7VRecordILc32E10global_regEEEbNS6_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#8  0x0000000000401fe8 in _Z7extractILc9ELi7EP12AccountEmailJP24timestamp_seconds_bufferP5TimeTP9IP_StringPN7strings7VStringILh254EEES5_7VRecordILc32E10global_regEEEbNS8_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#9  0x0000000000401f58 in _Z7extractILc9ELi8EPiJP12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPN7strings7VStringILh254EEES6_7VRecordILc32E10global_regEEEbNS9_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#10 0x0000000000401ec0 in _Z7extractILc9ELi9EPiJS0_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPN7strings7VStringILh254EEES6_7VRecordILc32E10global_regEEEbNS9_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#11 0x0000000000401e00 in _Z7extractILc9ELi10EPN7strings7VStringILh1EEEJPiS4_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS1_ILh254EEESA_7VRecordILc32E10global_regEEEbNS0_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#12 0x0000000000401d48 in _Z7extractILc9ELi11EP29timestamp_milliseconds_bufferJPN7strings7VStringILh1EEEPiS6_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS3_ILh254EEESC_7VRecordILc32E10global_regEEEbNS2_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#13 0x0000000000401c7b in _Z7extractILc9ELi12EP12AccountCryptJP29timestamp_milliseconds_bufferPN7strings7VStringILh1EEEPiS8_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS5_ILh254EEESE_7VRecordILc32E10global_regEEEbNS4_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#14 0x0000000000401ba9 in _Z7extractILc9ELi13EP11AccountNameJP12AccountCryptP29timestamp_milliseconds_bufferPN7strings7VStringILh1EEEPiSA_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS7_ILh254EEESG_7VRecordILc32E10global_regEEEbNS6_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#15 0x000000000040094f in _Z7extractILc9ELi14EPiJP11AccountNameP12AccountCryptP29timestamp_milliseconds_bufferPN7strings7VStringILh1EEES0_S0_P12AccountEmailP24timestamp_seconds_bufferP5TimeTP9IP_StringPNS8_ILh254EEESG_7VRecordILc32E10global_regEEEbNS7_7XStringE6RecordIXT_EXT0_EJT1_DpT2_EE ()
#16 0x0000000000400879 in _ZL7extractN7strings7XStringEP8AuthData ()
#17 0x0000000000400685 in _Z13mmo_auth_initN7strings7XStringE ()
#18 0x000000000040089d in main ()
Comment 4 Ben Longbons 2013-08-01 05:53:06 UTC
For the interest of anyone else needing to work around this:

I found the original gcc bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51322

which fortunately gives a way to stop the wrong symbols from being emitted for compatibility (-fabi-version=6).
Comment 5 Tom Tromey 2018-05-12 14:31:28 UTC
Those symbols still don't demangle, but given that it was a mangling bug
in gcc, I am wondering if we should just close this bug -- I assume nobody
will be trying to patch the demangler to deal with invalid symbols.
Comment 6 Tom Tromey 2022-12-23 19:20:01 UTC
Re-reading this, I think it's fine to close it.
The demangler is canonically maintained in gcc anyhow.