mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:54:41 +08:00
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:
parent
9c697157b8
commit
bc45bfd259
@ -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)
|
||||
{
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user