aout, ecoff and som free_cached_info

Message ID acTeMIk60uPs4tbW@squeak.grove.modra.org
State New
Headers
Series aout, ecoff and som free_cached_info |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 fail Patch failed to apply

Commit Message

Alan Modra March 26, 2026, 7:20 a.m. UTC
  By inspection the aout, som and ecoff object targets either do not
support _bfd_check_format[bfd_core], or they use different tdata to
the bfd_object support, eg. i386lynx.c and lynx-core.c.  Some use
entirely separate bfd_target vecs for bfd_object vs. bfd_core.  In any
of these cases we either should not or do not need to support bfd_core
in their free_cached_info functions.

This patch removes the bfd_core test from free_cached_info for these
targets.

	* aoutx.h (bfd_free_cached_info): Ignore bfd_core.  Move section
	handling out of tdata test.
	* pdp11.c (bfd_free_cached_info): Likewise.
	* som.c (som_bfd_free_cached_info): Likewise.
	* ecoff.c (_bfd_ecoff_bfd_free_cached_info): Ignore bfd_core.
  

Patch

diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index cb2d9270db9..a1b9a59e36f 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -2893,20 +2893,20 @@  NAME (aout, sizeof_headers) (bfd *abfd,
 bool
 NAME (aout, bfd_free_cached_info) (bfd *abfd)
 {
-  if ((bfd_get_format (abfd) == bfd_object
-       || bfd_get_format (abfd) == bfd_core)
+#define BFCI_FREE(x) do { free (x); x = NULL; } while (0)
+  if (bfd_get_format (abfd) == bfd_object
       && abfd->tdata.aout_data != NULL)
     {
-#define BFCI_FREE(x) do { free (x); x = NULL; } while (0)
       BFCI_FREE (adata (abfd).line_buf);
       BFCI_FREE (obj_aout_symbols (abfd));
       BFCI_FREE (obj_aout_external_syms (abfd));
       BFCI_FREE (obj_aout_external_strings (abfd));
-      for (asection *o = abfd->sections; o != NULL; o = o->next)
-	BFCI_FREE (o->relocation);
-#undef BFCI_FREE
     }
 
+  for (asection *o = abfd->sections; o != NULL; o = o->next)
+    BFCI_FREE (o->relocation);
+#undef BFCI_FREE
+
   return _bfd_generic_bfd_free_cached_info (abfd);
 }
 
diff --git a/bfd/ecoff.c b/bfd/ecoff.c
index 50e42afed18..cd56a46c460 100644
--- a/bfd/ecoff.c
+++ b/bfd/ecoff.c
@@ -114,8 +114,7 @@  _bfd_ecoff_bfd_free_cached_info (bfd *abfd)
 {
   struct ecoff_tdata *tdata;
 
-  if ((bfd_get_format (abfd) == bfd_object
-       || bfd_get_format (abfd) == bfd_core)
+  if (bfd_get_format (abfd) == bfd_object
       && (tdata = ecoff_data (abfd)) != NULL)
     {
       while (tdata->mips_refhi_list != NULL)
diff --git a/bfd/pdp11.c b/bfd/pdp11.c
index d1d761d9adb..d5b984268b0 100644
--- a/bfd/pdp11.c
+++ b/bfd/pdp11.c
@@ -2524,20 +2524,20 @@  NAME (aout, sizeof_headers) (bfd *abfd,
 bool
 NAME (aout, bfd_free_cached_info) (bfd *abfd)
 {
-  if ((bfd_get_format (abfd) == bfd_object
-       || bfd_get_format (abfd) == bfd_core)
+#define BFCI_FREE(x) do { free (x); x = NULL; } while (0)
+  if (bfd_get_format (abfd) == bfd_object
       && abfd->tdata.aout_data != NULL)
     {
-#define BFCI_FREE(x) do { free (x); x = NULL; } while (0)
       BFCI_FREE (adata (abfd).line_buf);
       BFCI_FREE (obj_aout_symbols (abfd));
       BFCI_FREE (obj_aout_external_syms (abfd));
       BFCI_FREE (obj_aout_external_strings (abfd));
-      for (asection *o = abfd->sections; o != NULL; o = o->next)
-	BFCI_FREE (o->relocation);
-#undef BFCI_FREE
     }
 
+  for (asection *o = abfd->sections; o != NULL; o = o->next)
+    BFCI_FREE (o->relocation);
+#undef BFCI_FREE
+
   return _bfd_generic_bfd_free_cached_info (abfd);
 }
 
diff --git a/bfd/som.c b/bfd/som.c
index a39c061762d..5db989938c8 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -6719,25 +6719,24 @@  som_write_armap (bfd *abfd,
 static bool
 som_bfd_free_cached_info (bfd *abfd)
 {
+#define FREE(x) do { free (x); x = NULL; } while (0)
   if (bfd_get_format (abfd) == bfd_object
-      || bfd_get_format (abfd) == bfd_core)
+      && abfd->tdata.som_data != NULL)
     {
-      asection *o;
-
-#define FREE(x) do { free (x); x = NULL; } while (0)
       /* Free the native string and symbol tables.  */
       FREE (obj_som_symtab (abfd));
       FREE (obj_som_stringtab (abfd));
-      for (o = abfd->sections; o != NULL; o = o->next)
-	{
-	  /* Free the native relocations.  */
-	  o->reloc_count = (unsigned) -1;
-	  FREE (som_section_data (o)->reloc_stream);
-	  /* Do not free the generic relocations as they are objalloc'ed.  */
-	}
-#undef FREE
     }
 
+  for (asection *o = abfd->sections; o != NULL; o = o->next)
+    {
+      /* Free the native relocations.  */
+      o->reloc_count = (unsigned) -1;
+      FREE (som_section_data (o)->reloc_stream);
+      /* Do not free the generic relocations as they are objalloc'ed.  */
+    }
+#undef FREE
+
   /* Do not call _bfd_generic_bfd_free_cached_info here.
      som_write_armap needs to access the bfd objalloc memory.  */
   return true;