xtensa: move xtensa_make_property_section from bfd to gas

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.
This commit is contained in:
Alan Modra 2024-02-24 11:30:02 +10:30
parent 9c697157b8
commit bc45bfd259
3 changed files with 32 additions and 34 deletions

View File

@ -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)
{

View File

@ -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,

View File

@ -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,