xtensa: move xtensa_make_property_section from bfd to gas

Message ID ZdlwBYc6fQuoyYVK@squeak.grove.modra.org
State Accepted
Headers
Series xtensa: move xtensa_make_property_section from bfd to gas |

Checks

Context Check Description
snail/binutils-gdb-check success Github commit url

Commit Message

Alan Modra Feb. 24, 2024, 4:26 a.m. UTC
  This function is only used by gas, so move it there.  Necessary for
gas to keep track of group sections as they are created.

	PR 25333
bfd/
	* elf32-xtensa.c (xtensa_make_property_section): Delete.
	(xtensa_property_section_name): Make public.
include/
	* elf/xtensa.h (xtensa_make_property_section): Delete.
	(xtensa_property_section_name): Declare
gas/
	* config/tc-xtensa.c (xtensa_make_property_section): New,
	moved from elf32-xtensa.c.
  

Patch

diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
index 4061341d38f..e73f96a7dcc 100644
--- a/bfd/elf32-xtensa.c
+++ b/bfd/elf32-xtensa.c
@@ -11253,7 +11253,7 @@  xtensa_add_names (const char *base, const char *suffix)
 
 static int linkonce_len = sizeof (".gnu.linkonce.") - 1;
 
-static char *
+char *
 xtensa_property_section_name (asection *sec, const char *base_name,
 			      bool separate_sections)
 {
@@ -11335,38 +11335,6 @@  xtensa_get_property_section (asection *sec, const char *base_name)
 }
 
 
-asection *
-xtensa_make_property_section (asection *sec, const char *base_name)
-{
-  char *prop_sec_name;
-  asection *prop_sec;
-
-  /* Check if the section already exists.  */
-  prop_sec_name = xtensa_property_section_name (sec, base_name,
-						elf32xtensa_separate_props);
-  prop_sec = bfd_get_section_by_name_if (sec->owner, prop_sec_name,
-					 match_section_group,
-					 (void *) elf_group_name (sec));
-  /* If not, create it.  */
-  if (! prop_sec)
-    {
-      flagword flags = (SEC_RELOC | SEC_HAS_CONTENTS | SEC_READONLY);
-      flags |= (bfd_section_flags (sec)
-		& (SEC_LINK_ONCE | SEC_LINK_DUPLICATES));
-
-      prop_sec = bfd_make_section_anyway_with_flags
-	(sec->owner, strdup (prop_sec_name), flags);
-      if (! prop_sec)
-	return 0;
-
-      elf_group_name (prop_sec) = elf_group_name (sec);
-    }
-
-  free (prop_sec_name);
-  return prop_sec;
-}
-
-
 flagword
 xtensa_get_property_predef_flags (asection *sec)
 {
diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
index c6e6881ae68..188715d9619 100644
--- a/gas/config/tc-xtensa.c
+++ b/gas/config/tc-xtensa.c
@@ -11789,6 +11789,36 @@  get_frag_is_literal (const fragS *fragP)
   return fragP->tc_frag_data.is_literal;
 }
 
+static asection *
+xtensa_make_property_section (asection *sec, const char *base_name)
+{
+  char *prop_sec_name;
+  asection *prop_sec;
+
+  /* Check if the section already exists.  */
+  prop_sec_name = xtensa_property_section_name (sec, base_name,
+						elf32xtensa_separate_props);
+  prop_sec = bfd_get_section_by_name_if (sec->owner, prop_sec_name,
+					 match_section_group,
+					 (void *) elf_group_name (sec));
+  /* If not, create it.  */
+  if (! prop_sec)
+    {
+      flagword flags = (SEC_RELOC | SEC_HAS_CONTENTS | SEC_READONLY);
+      flags |= (bfd_section_flags (sec)
+		& (SEC_LINK_ONCE | SEC_LINK_DUPLICATES));
+
+      prop_sec = bfd_make_section_anyway_with_flags
+	(sec->owner, strdup (prop_sec_name), flags);
+      if (! prop_sec)
+	return 0;
+
+      elf_group_name (prop_sec) = elf_group_name (sec);
+    }
+
+  free (prop_sec_name);
+  return prop_sec;
+}
 
 static void
 xtensa_create_property_segments (frag_predicate property_function,
diff --git a/include/elf/xtensa.h b/include/elf/xtensa.h
index 402d9ad5465..523855e7e81 100644
--- a/include/elf/xtensa.h
+++ b/include/elf/xtensa.h
@@ -215,7 +215,7 @@  typedef struct property_table_entry_t
 
 #define XTENSA_PROP_INSN_ABSLIT        0x00020000
 
-extern asection *xtensa_make_property_section (asection *, const char *);
+extern char *xtensa_property_section_name (asection *, const char *, bool);
 extern int
 xtensa_read_table_entries (bfd *abfd,
 			   asection *section,