From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id CE6B93858C54; Tue, 12 Apr 2022 14:50:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CE6B93858C54 From: "redi at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug libbacktrace/105240] backtrace_pcinfo leaks memory Date: Tue, 12 Apr 2022 14:50:55 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: libbacktrace X-Bugzilla-Version: 12.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: redi at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cf_reconfirmed_on bug_status everconfirmed Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2022 14:50:55 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D105240 Jonathan Wakely changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2022-04-12 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #1 from Jonathan Wakely --- This simple C++ program: #include int cb_pcinfo(void*, uintptr_t, const char*, int, const char* function) { return function !=3D nullptr; } int cb(void* p, uintptr_t pc) { *static_cast(p) =3D pc; return = 1; } int main() { auto state =3D backtrace_create_state(nullptr, 1, nullptr, nullptr); uintptr_t pc; backtrace_simple(state, 0, cb, nullptr, &pc); backtrace_pcinfo(state, pc, cb_pcinfo, nullptr, nullptr); } Built with: g++ bt.cc build/libbacktrace/.libs/libbacktrace.a -I ~/src/gcc/gcc/libbacktrace/ -g When run under valgrind shows: valgrind --leak-check=3Dfull ./a.out =3D=3D410984=3D=3D Memcheck, a memory error detector =3D=3D410984=3D=3D Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward= et al. =3D=3D410984=3D=3D Using Valgrind-3.18.1 and LibVEX; rerun with -h for copy= right info =3D=3D410984=3D=3D Command: ./a.out =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D HEAP SUMMARY: =3D=3D410984=3D=3D in use at exit: 112,638,104 bytes in 729,676 blocks =3D=3D410984=3D=3D total heap usage: 729,861 allocs, 185 frees, 115,412,5= 93 bytes allocated =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 84 bytes in 3 blocks are definitely lost in loss record = 5 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x409283: read_lnct (dwarf.c:2543) =3D=3D410984=3D=3D by 0x409283: read_line_header_format_entries (dwarf.c= :2618) =3D=3D410984=3D=3D by 0x40B08A: read_line_header (dwarf.c:2712) =3D=3D410984=3D=3D by 0x40B08A: read_line_info (dwarf.c:2965) =3D=3D410984=3D=3D by 0x40B08A: dwarf_lookup_pc (dwarf.c:3747) =3D=3D410984=3D=3D by 0x40C1BE: dwarf_fileline (dwarf.c:3935) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 13,920 bytes in 1 blocks are definitely lost in loss rec= ord 25 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x406ED6: backtrace_get_view (read.c:68) =3D=3D410984=3D=3D by 0x40568A: elf_get_view (elf.c:426) =3D=3D410984=3D=3D by 0x40568A: elf_add (elf.c:4329) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 31,248 bytes in 1 blocks are possibly lost in loss recor= d 28 of 43 =3D=3D410984=3D=3D at 0x48456AF: realloc (vg_replace_malloc.c:1437) =3D=3D410984=3D=3D by 0x407115: backtrace_vector_release (alloc.c:159) =3D=3D410984=3D=3D by 0x40CDCD: build_dwarf_data (dwarf.c:3976) =3D=3D410984=3D=3D by 0x40CDCD: backtrace_dwarf_add (dwarf.c:4022) =3D=3D410984=3D=3D by 0x406475: elf_add (elf.c:4749) =3D=3D410984=3D=3D by 0x4060E9: elf_add (elf.c:4434) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 69,736 bytes in 2 blocks are possibly lost in loss recor= d 30 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x406ED6: backtrace_get_view (read.c:68) =3D=3D410984=3D=3D by 0x40568A: elf_get_view (elf.c:426) =3D=3D410984=3D=3D by 0x40568A: elf_add (elf.c:4329) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 164,768 bytes in 1 blocks are possibly lost in loss reco= rd 31 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x406ED6: backtrace_get_view (read.c:68) =3D=3D410984=3D=3D by 0x405C50: elf_add (elf.c:4591) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 174,888 bytes in 3 blocks are possibly lost in loss reco= rd 32 of 43 =3D=3D410984=3D=3D at 0x48456AF: realloc (vg_replace_malloc.c:1437) =3D=3D410984=3D=3D by 0x407115: backtrace_vector_release (alloc.c:159) =3D=3D410984=3D=3D by 0x40CDAA: build_dwarf_data (dwarf.c:3974) =3D=3D410984=3D=3D by 0x40CDAA: backtrace_dwarf_add (dwarf.c:4022) =3D=3D410984=3D=3D by 0x406475: elf_add (elf.c:4749) =3D=3D410984=3D=3D by 0x4060E9: elf_add (elf.c:4434) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 231,094 bytes in 1 blocks are possibly lost in loss reco= rd 33 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x406ED6: backtrace_get_view (read.c:68) =3D=3D410984=3D=3D by 0x405C50: elf_add (elf.c:4591) =3D=3D410984=3D=3D by 0x406D83: backtrace_initialize (elf.c:4877) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 308,808 bytes in 3 blocks are possibly lost in loss reco= rd 35 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x4067B5: elf_initialize_syminfo (elf.c:661) =3D=3D410984=3D=3D by 0x4067B5: elf_add (elf.c:4392) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 438,981 bytes in 4 blocks are possibly lost in loss reco= rd 36 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x406ED6: backtrace_get_view (read.c:68) =3D=3D410984=3D=3D by 0x40667B: elf_add (elf.c:4381) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 767,840 bytes in 4,799 blocks are possibly lost in loss = record 37 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x40C54F: build_address_map (dwarf.c:2183) =3D=3D410984=3D=3D by 0x40C54F: build_dwarf_data (dwarf.c:3969) =3D=3D410984=3D=3D by 0x40C54F: backtrace_dwarf_add (dwarf.c:4022) =3D=3D410984=3D=3D by 0x406475: elf_add (elf.c:4749) =3D=3D410984=3D=3D by 0x4060E9: elf_add (elf.c:4434) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 16,608,019 (72 direct, 16,607,947 indirect) bytes in 1 b= locks are definitely lost in loss record 40 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x401773: backtrace_create_state (state.c:66) =3D=3D410984=3D=3D by 0x401308: main (bt.cc:10) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 18,629,920 bytes in 5,066 blocks are possibly lost in lo= ss record 41 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x40C747: read_abbrevs (dwarf.c:1409) =3D=3D410984=3D=3D by 0x40C747: build_address_map (dwarf.c:2197) =3D=3D410984=3D=3D by 0x40C747: build_dwarf_data (dwarf.c:3969) =3D=3D410984=3D=3D by 0x40C747: backtrace_dwarf_add (dwarf.c:4022) =3D=3D410984=3D=3D by 0x406475: elf_add (elf.c:4749) =3D=3D410984=3D=3D by 0x4060E9: elf_add (elf.c:4434) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 21,644,094 bytes in 5 blocks are possibly lost in loss r= ecord 42 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x406ED6: backtrace_get_view (read.c:68) =3D=3D410984=3D=3D by 0x405C50: elf_add (elf.c:4591) =3D=3D410984=3D=3D by 0x4060E9: elf_add (elf.c:4434) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D 53,554,704 bytes in 575,533 blocks are possibly lost in = loss record 43 of 43 =3D=3D410984=3D=3D at 0x484086F: malloc (vg_replace_malloc.c:381) =3D=3D410984=3D=3D by 0x406FF1: backtrace_alloc (alloc.c:57) =3D=3D410984=3D=3D by 0x40CB1E: read_abbrevs (dwarf.c:1457) =3D=3D410984=3D=3D by 0x40CB1E: build_address_map (dwarf.c:2197) =3D=3D410984=3D=3D by 0x40CB1E: build_dwarf_data (dwarf.c:3969) =3D=3D410984=3D=3D by 0x40CB1E: backtrace_dwarf_add (dwarf.c:4022) =3D=3D410984=3D=3D by 0x406475: elf_add (elf.c:4749) =3D=3D410984=3D=3D by 0x4060E9: elf_add (elf.c:4434) =3D=3D410984=3D=3D by 0x406BC8: phdr_callback (elf.c:4848) =3D=3D410984=3D=3D by 0x4D2A314: dl_iterate_phdr (dl-iteratephdr.c:75) =3D=3D410984=3D=3D by 0x406DDD: backtrace_initialize (elf.c:4892) =3D=3D410984=3D=3D by 0x4014B1: fileline_initialize (fileline.c:261) =3D=3D410984=3D=3D by 0x401581: backtrace_pcinfo (fileline.c:295) =3D=3D410984=3D=3D by 0x40134E: main (bt.cc:13) =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D LEAK SUMMARY: =3D=3D410984=3D=3D definitely lost: 14,076 bytes in 5 blocks =3D=3D410984=3D=3D indirectly lost: 16,607,947 bytes in 144,253 blocks =3D=3D410984=3D=3D possibly lost: 96,016,081 bytes in 585,418 blocks =3D=3D410984=3D=3D still reachable: 0 bytes in 0 blocks =3D=3D410984=3D=3D of which reachable via heuristic: =3D=3D410984=3D=3D newarray : 4,064 bytes= in 1 blocks =3D=3D410984=3D=3D suppressed: 0 bytes in 0 blocks =3D=3D410984=3D=3D=20 =3D=3D410984=3D=3D For lists of detected and suppressed errors, rerun with:= -s =3D=3D410984=3D=3D ERROR SUMMARY: 14 errors from 14 contexts (suppressed: 0= from 0)=