https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87335

--- Comment #9 from Cheng Wen <wcventure at 126 dot com> ---
(In reply to Jonathan Wakely from comment #8)

Hi Jonathan,

I debugged with this POC again. I still think it's a problem. I will show you
the debug process as follow.

> $ gdb ./c++filt
> Reading symbols from ./c++filt...done.
> (gdb) set args -t < POC-t
> (gdb) b cp-demangle.c:2565
> Breakpoint 1 at 0x8d5227: file ./cp-demangle.c, line 2565.
> (gdb) start
> (gdb) c
> Continuing.
> Breakpoint 1, cplus_demangle_type (di=0x7fffffffd560) at ./cp-demangle.c:2565
> 2565  cplus_demangle_type (di), NULL);
> (gdb) c
> Continuing.
> Breakpoint 1, cplus_demangle_type (di=0x7fffffffd560) at ./cp-demangle.c:2565
> 2565  cplus_demangle_type (di), NULL);
> ...
> ...
> ...
> (gdb) c
> Continuing.
> Breakpoint 1, cplus_demangle_type (di=0x7fffffffd560) at ./cp-demangle.c:2565
> 2565  cplus_demangle_type (di), NULL);
> (gdb) bt
> #0  cplus_demangle_type (di=0x7fffffffd560) at ./cp-demangle.c:2565
> #1  0x00000000008d523d in cplus_demangle_type (di=0x7fffffffd560) at 
> ./cp-demangle.c:2565
> #2  0x00000000008d523d in cplus_demangle_type (di=0x7fffffffd560) at 
> ./cp-demangle.c:2565
> #3  0x00000000008d523d in cplus_demangle_type (di=0x7fffffffd560) at 
> ./cp-demangle.c:2565
> #4  0x00000000008d523d in cplus_demangle_type (di=0x7fffffffd560) at 
> ./cp-demangle.c:2565
> ...
> ...
> ...
> #456 0x00000000008d523d in cplus_demangle_type (di=0x7fffffffd560) at 
> ./cp-demangle.c:2565
> #457 0x00000000008d523d in cplus_demangle_type (di=0x7fffffffd560) at 
> ./cp-demangle.c:2565
> #458 0x00000000008dd318 in d_demangle_callback (mangled=0x18b2e40 
> <main.mbuffer> 'P' <repeats 200 times>..., options=283,
>   callback=0x8dc110 <d_growable_string_callback_adapter>, 
> opaque=0x7fffffffd860) at ./cp-demangle.c:6245
> #459 0x00000000008dc84f in d_demangle (mangled=0x18b2e40 <main.mbuffer> 'P' 
> <repeats 200 times>..., options=283,
>   palc=0x7fffffffd9e0) at ./cp-demangle.c:6299
> #460 0x00000000008dc696 in cplus_demangle_v3 (mangled=0x18b2e40 
> <main.mbuffer> 'P' <repeats 200 times>..., options=283)
>   at ./cp-demangle.c:6456
> #461 0x00000000008b1cf4 in cplus_demangle (mangled=0x18b2e40 <main.mbuffer> 
> 'P' <repeats 200 times>..., options=27)
>   at ./cplus-dem.c:880
> #462 0x0000000000517676 in demangle_it (mangled_name=0x18b2e40 <main.mbuffer> 
> 'P' <repeats 200 times>...) at cxxfilt.c:62
> #463 0x000000000051726a in main (argc=2, argv=0x7fffffffe008) at cxxfilt.c:276


Using gdb to debug it. I set a breakpoint in cp-demangle.c:2565. After reaching
this breakpoint for any time. You can see the stack backtrace.
This will consume a lot of stack memory.
(Caution: the command such as "gdb --args ./c++filt -t < $POC" is not valid.
Please use "gdb ./c++filt", then "set args -t < $POC")

Thanks
Cheng Wen

Reply via email to