elf_backend_can_make_multiple_eh_frame

Alan Modra amodra@gmail.com
Sun Jan 4 07:26:38 GMT 2026


This flag is never set for any target.  Delete it.  Also, I think it
is safe to unconditionally enable what it was supposed to control.

	* elf-bfd.h (struct elf_backend_data): Delete
	elf_backend_can_make_multiple_eh_frame.
	* elfxx-target.h (elf_backend_can_make_multiple_eh_frame): Don't
	define or use.
	* elflink.c (_bfd_elf_default_action_discarded): Move
	SHT_GNU_SFRAME check earlier.  Return 0 for ".eh_frame"
	and ".eh_frame.*".

diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 72f0c545029..b759d469326 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1515,9 +1515,6 @@ struct elf_backend_data
   bool (*elf_backend_can_make_lsda_relative_eh_frame)
      (bfd *, struct bfd_link_info *, asection *);
 
-  /* Tell linker to support multiple eh_frame sections.  */
-  bool elf_backend_can_make_multiple_eh_frame;
-
   /* This function returns an encoding after computing the encoded
      value (and storing it in ENCODED) for the given OFFSET into OSEC,
      to be stored in at LOC_OFFSET into the LOC_SEC input section.
diff --git a/bfd/elflink.c b/bfd/elflink.c
index d0b1ec5cb04..3807da017fa 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -11305,23 +11305,17 @@ elf_section_ignore_discarded_relocs (asection *sec)
 unsigned int
 _bfd_elf_default_action_discarded (asection *sec)
 {
-  const struct elf_backend_data *bed;
-  bed = get_elf_backend_data (sec->owner);
-
   if (sec->flags & SEC_DEBUGGING)
     return PRETEND;
 
-  if (strcmp (".eh_frame", sec->name) == 0)
-    return 0;
-
-  if (bed->elf_backend_can_make_multiple_eh_frame
-      && strncmp (sec->name, ".eh_frame.", 10) == 0)
+  if (elf_section_type (sec) == SHT_GNU_SFRAME)
     return 0;
 
-  if (elf_section_type (sec) == SHT_GNU_SFRAME)
+  if (strncmp (sec->name, ".eh_frame", 9) == 0
+      && (sec->name[9] == 0 || sec->name[9] == '.'))
     return 0;
 
-  if (strcmp (".gcc_except_table", sec->name) == 0)
+  if (strcmp (sec->name, ".gcc_except_table") == 0)
     return 0;
 
   return COMPLAIN | PRETEND;
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 479ba47785d..ffda07dfe61 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -652,9 +652,6 @@
 #ifndef elf_backend_can_make_lsda_relative_eh_frame
 #define elf_backend_can_make_lsda_relative_eh_frame	_bfd_elf_can_make_relative
 #endif
-#ifndef elf_backend_can_make_multiple_eh_frame
-#define elf_backend_can_make_multiple_eh_frame 0
-#endif
 #ifndef elf_backend_encode_eh_address
 #define elf_backend_encode_eh_address		_bfd_elf_encode_eh_address
 #endif
@@ -892,7 +889,6 @@ static const struct elf_backend_data elfNN_bed =
   elf_backend_eh_frame_address_size,
   elf_backend_can_make_relative_eh_frame,
   elf_backend_can_make_lsda_relative_eh_frame,
-  elf_backend_can_make_multiple_eh_frame,
   elf_backend_encode_eh_address,
   elf_backend_write_section,
   elf_backend_add_glibc_version_dependency,

-- 
Alan Modra


More information about the Binutils mailing list