[PATCH] bfd: release the PE COMDAT hash once all sections are made
Oleg Tolmatcev <[email protected]>
| Newsgroups | gmane.comp.gnu.binutils |
|---|---|
| Message-ID | <[email protected]> |
styp_to_sec_flags builds pe_data (abfd)->comdat_hash, one entry plus a strdup'd symbol name per input section. Nothing frees it during a link, so it survives to exit. Free it once the section table has been built. This is safe because styp_to_sec_flags recreates the hash whenever it finds it NULL. This significantly reduces peak memory usage. bfd/ * coffgen.c (coff_real_object_p): Free the COMDAT hash after the section table has been built. Signed-off-by: Oleg Tolmatcev <[email protected]> --- bfd/coffgen.c | 7 +++++++ 1 file changed, 7 insertions(+) In one of my tests this reduces peak memory usage by 12%: 773 MB out of 6532 MB. diff --git a/bfd/coffgen.c b/bfd/coffgen.c index f3060642a5d..92b867bd187 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -368,6 +368,13 @@ coff_real_object_p (bfd *abfd, } _bfd_coff_free_symbols (abfd); + + if (obj_pe (abfd) && pe_data (abfd)->comdat_hash != NULL) + { + htab_delete (pe_data (abfd)->comdat_hash); + pe_data (abfd)->comdat_hash = NULL; + } + return coff_object_cleanup; fail: -- 2.55.0.windows.3