https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106641
Bug ID: 106641
Summary: Endless Looping & Abnormal Memory Occupatio
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: demangler
Assignee: unassigned at gcc dot gnu.org
Reporter: chkunq at gmail dot com
Target Milestone: ---
Created attachment 53465
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53465&action=edit
The input object file of binutils/nm that trigger an endless looping in
rust-demangler
When I executed binutils/nm-new with the command `nm-new -C [file in
attachment]`, I found that nm-new could not be executed within 24h and was
taking up an unusually large amount of memory.
Using gdb and inserting printf statements, I traced the problem to
libiberty/rust-demangle.c.
When parsing the symbol _RYOFGFF1FFFFFF_array_start, demangle_binder()
internally enters a dead loop (line 657).
When I implanted the printf statement and recompiled, I found that the number
of loops was unusually large (line 653), with a value of 9096425505278371,
which is clearly not normal for looping so many times.
And during the loop, it takes up a lot of memory (>30G), which may cause a
memory overflow.
Here is the call stack (from gdb)
#4 0x0000555555644036 in demangle_binder (rdm=0x7fffffffd9b0)
at ./rust-demangle.c:662
#5 0x0000555555644f2c in demangle_type (rdm=0x7fffffffd9b0)
at ./rust-demangle.c:956
#6 0x0000555555644dc4 in demangle_type (rdm=0x7fffffffd9b0)
at ./rust-demangle.c:920
#7 0x00005555556445a6 in demangle_path (
rdm=rdm@entry=0x7fffffffd9b0, in_value=in_value@entry=1)
at ./rust-demangle.c:759
#8 0x00005555556456fd in demangle_path (in_value=1,
rdm=0x7fffffffd9b0) at ./rust-demangle.c:1482
#9 rust_demangle_callback (mangled=<optimized out>,
options=options@entry=259,
callback=callback@entry=0x555555645500 <str_buf_demangle_callback>,
opaque=opaque@entry=0x7fffffffda20) at ./rust-demangle.c:1482
#10 0x000055555564590d in rust_demangle (mangled=<optimized out>,
options=options@entry=259) at ./rust-demangle.c:1593
#11 0x000055555563226f in cplus_demangle (
mangled=mangled@entry=0x5555556a7cc5 "_RYOFGFF1FFFFFF_array_start",
options=259, options@entry=3) at ./cplus-dem.c:166
#12 0x000055555558cfa3 in bfd_demangle (abfd=<optimized out>,
name=0x5555556a7cc5 "_RYOFGFF1FFFFFF_array_start", options=3)
at bfd.c:2428
#13 0x00005555555827cb in print_symname (form=0x555555656c2c " %s",
info=0x7fffffffdb80,
name=0x5555556a7cc5 "_RYOFGFF1FFFFFF_array_start",