[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.