Tidy dwarf1 cached section contents
authorAlan Modra <amodra@gmail.com>
Fri, 24 Mar 2023 05:58:08 +0000 (16:28 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 24 Mar 2023 10:31:43 +0000 (21:01 +1030)
* dwarf1.c (_bfd_dwarf1_cleanup_debug_info): New function.
* libbfd-in.h (_bfd_dwarf1_cleanup_debug_info): Declare.
* elf.c (_bfd_elf_close_and_cleanup): Call it.
* elf-bfd.h (struct elf_obj_tdata): Make dwarf1_find_line_info
a void*.
* libbfd.h: Regenerate.

bfd/dwarf1.c
bfd/elf-bfd.h
bfd/elf.c
bfd/libbfd-in.h
bfd/libbfd.h

index a80d19db7def118610a733673b7314f7209677f1..d7c50eaa06866e8fd8b8b6b9ef1490dfb18c159d 100644 (file)
@@ -593,3 +593,15 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd,
 
   return false;
 }
+
+void
+_bfd_dwarf1_cleanup_debug_info (bfd *abfd ATTRIBUTE_UNUSED, void **pinfo)
+{
+  struct dwarf1_debug* stash = *pinfo;
+
+  if (stash == NULL)
+    return;
+
+  free (stash->debug_section);
+  free (stash->line_section);
+}
index dff198225474d6be28054914ad2d67ad76be954f..2a64a1e6a03277e780b9a3fc63707df29b833316 100644 (file)
@@ -2070,7 +2070,7 @@ struct elf_obj_tdata
   void *line_info;
 
   /* A place to stash dwarf1 info for this bfd.  */
-  struct dwarf1_debug *dwarf1_find_line_info;
+  void *dwarf1_find_line_info;
 
   /* A place to stash dwarf2 info for this bfd.  */
   void *dwarf2_find_line_info;
index c9abc2579e5479a4f64f6117c17680c2d39f8bc3..45e53640e8f817407ee43f04c9adb572a976b5d1 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -9592,6 +9592,7 @@ _bfd_elf_close_and_cleanup (bfd *abfd)
       if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL)
        _bfd_elf_strtab_free (elf_shstrtab (abfd));
       _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
+      _bfd_dwarf1_cleanup_debug_info (abfd, &tdata->dwarf1_find_line_info);
       _bfd_stab_cleanup (abfd, &tdata->line_info);
     }
 
index ff58421f28b83c426dfdc8fa8158349b5b6e7af9..1c9f34bb6d7498580d1c9697601d2f7f5f34c007 100644 (file)
@@ -573,6 +573,10 @@ extern bool _bfd_dwarf1_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
 
+/* Clean up the data used to handle DWARF 1 debugging information. */
+extern void _bfd_dwarf1_cleanup_debug_info
+  (bfd *, void **) ATTRIBUTE_HIDDEN;
+
 struct dwarf_debug_section
 {
   const char * uncompressed_name;
index fa6f2d71b60afefe0f17e22dc1abdfeea161a232..d1dc7b912a0a655f0e7e28395319a37851deebe5 100644 (file)
@@ -579,6 +579,10 @@ extern bool _bfd_dwarf1_find_nearest_line
   (bfd *, asymbol **, asection *, bfd_vma,
    const char **, const char **, unsigned int *) ATTRIBUTE_HIDDEN;
 
+/* Clean up the data used to handle DWARF 1 debugging information. */
+extern void _bfd_dwarf1_cleanup_debug_info
+  (bfd *, void **) ATTRIBUTE_HIDDEN;
+
 struct dwarf_debug_section
 {
   const char * uncompressed_name;