bfd ChangeLog:
2003-10-14 Bob Wilson <bob.wilson@acm.org> * elf32-xtensa.c (get_is_linkonce_section): Delete. (xtensa_is_property_section, xtensa_is_littable_section): Use XTENSA_INSN_SEC_NAME and XTENSA_LIT_SEC_NAME macros. Do not recognize linkonce sections containing ".xt.insn" and ".xt.lit" substrings. (xtensa_get_property_section_name): Check section name instead of calling get_is_linkonce_section. Remove unused bfd parameter. Use XTENSA_INSN_SEC_NAME and XTENSA_LIT_SEC_NAME macros. Never generate linkonce section names by appending ".xt.insn" or ".xt.lit". (xtensa_read_table_entries): Remove bfd argument in call to xtensa_get_property_section_name. Free section name when done. (elf_xtensa_combine_prop_entries): Free leaking table. gas ChangeLog: 2003-10-14 Bob Wilson <bob.wilson@acm.org> * config/tc-xtensa.c (xtensa_create_property_segments): Remove bfd argument in call to xtensa_get_property_section_name. Formatting. include ChangeLog: 2003-10-14 Bob Wilson <bob.wilson@acm.org> * elf/xtensa.h: Formatting. Fix comments about property section names for linkonce sections.
This commit is contained in:
parent
2641f58d69
commit
b614a7028d
6 changed files with 81 additions and 97 deletions
|
@ -1,3 +1,17 @@
|
||||||
|
2003-10-14 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
|
* elf32-xtensa.c (get_is_linkonce_section): Delete.
|
||||||
|
(xtensa_is_property_section, xtensa_is_littable_section): Use
|
||||||
|
XTENSA_INSN_SEC_NAME and XTENSA_LIT_SEC_NAME macros. Do not recognize
|
||||||
|
linkonce sections containing ".xt.insn" and ".xt.lit" substrings.
|
||||||
|
(xtensa_get_property_section_name): Check section name instead of
|
||||||
|
calling get_is_linkonce_section. Remove unused bfd parameter. Use
|
||||||
|
XTENSA_INSN_SEC_NAME and XTENSA_LIT_SEC_NAME macros. Never generate
|
||||||
|
linkonce section names by appending ".xt.insn" or ".xt.lit".
|
||||||
|
(xtensa_read_table_entries): Remove bfd argument in call to
|
||||||
|
xtensa_get_property_section_name. Free section name when done.
|
||||||
|
(elf_xtensa_combine_prop_entries): Free leaking table.
|
||||||
|
|
||||||
2003-10-13 Richard Sandiford <rsandifo@redht.com>
|
2003-10-13 Richard Sandiford <rsandifo@redht.com>
|
||||||
|
|
||||||
* elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Don't add
|
* elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Don't add
|
||||||
|
|
|
@ -212,10 +212,8 @@ static bfd_boolean is_literal_section
|
||||||
PARAMS ((asection *));
|
PARAMS ((asection *));
|
||||||
static int internal_reloc_compare
|
static int internal_reloc_compare
|
||||||
PARAMS ((const PTR, const PTR));
|
PARAMS ((const PTR, const PTR));
|
||||||
static bfd_boolean get_is_linkonce_section
|
|
||||||
PARAMS ((bfd *, asection *));
|
|
||||||
extern char *xtensa_get_property_section_name
|
extern char *xtensa_get_property_section_name
|
||||||
PARAMS ((bfd *, asection *, const char *));
|
PARAMS ((asection *, const char *));
|
||||||
|
|
||||||
/* Other functions called directly by the linker. */
|
/* Other functions called directly by the linker. */
|
||||||
|
|
||||||
|
@ -504,8 +502,9 @@ xtensa_read_table_entries (abfd, section, table_p, sec_name)
|
||||||
Elf_Internal_Rela *internal_relocs;
|
Elf_Internal_Rela *internal_relocs;
|
||||||
|
|
||||||
table_section_name =
|
table_section_name =
|
||||||
xtensa_get_property_section_name (abfd, section, sec_name);
|
xtensa_get_property_section_name (section, sec_name);
|
||||||
table_section = bfd_get_section_by_name (abfd, table_section_name);
|
table_section = bfd_get_section_by_name (abfd, table_section_name);
|
||||||
|
free (table_section_name);
|
||||||
if (table_section != NULL)
|
if (table_section != NULL)
|
||||||
table_size = bfd_get_section_size_before_reloc (table_section);
|
table_size = bfd_get_section_size_before_reloc (table_section);
|
||||||
|
|
||||||
|
@ -2314,6 +2313,7 @@ elf_xtensa_combine_prop_entries (output_bfd, sxtlit, sgotloc)
|
||||||
memcpy (sgotloc->contents, contents, section_size);
|
memcpy (sgotloc->contents, contents, section_size);
|
||||||
|
|
||||||
free (contents);
|
free (contents);
|
||||||
|
free (table);
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5605,25 +5605,25 @@ pcrel_reloc_fits (opnd, self_address, dest_address)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int linkonce_len = sizeof (".gnu.linkonce.") - 1;
|
||||||
|
static int insn_sec_len = sizeof (XTENSA_INSN_SEC_NAME) - 1;
|
||||||
|
static int lit_sec_len = sizeof (XTENSA_LIT_SEC_NAME) - 1;
|
||||||
|
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
xtensa_is_property_section (sec)
|
xtensa_is_property_section (sec)
|
||||||
asection *sec;
|
asection *sec;
|
||||||
{
|
{
|
||||||
static int linkonce_len = sizeof (".gnu.linkonce.") - 1;
|
if (strncmp (XTENSA_INSN_SEC_NAME, sec->name, insn_sec_len) == 0
|
||||||
|
|| strncmp (XTENSA_LIT_SEC_NAME, sec->name, lit_sec_len) == 0)
|
||||||
if (strncmp (".xt.insn", sec->name, 8) == 0
|
|
||||||
|| strncmp (".xt.lit", sec->name, 7) == 0)
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
if (strncmp (".gnu.linkonce.", sec->name, linkonce_len) == 0)
|
if (strncmp (".gnu.linkonce.", sec->name, linkonce_len) == 0
|
||||||
{
|
&& (sec->name[linkonce_len] == 'x'
|
||||||
if (strncmp ("x.", sec->name + linkonce_len, 2) == 0
|
|| sec->name[linkonce_len] == 'p')
|
||||||
|| strncmp ("p.", sec->name + linkonce_len, 2) == 0)
|
&& sec->name[linkonce_len + 1] == '.')
|
||||||
return TRUE;
|
return TRUE;
|
||||||
if (strstr (sec->name + linkonce_len, ".xt.insn") != NULL
|
|
||||||
|| strstr (sec->name + linkonce_len, ".xt.lit") != NULL)
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5632,18 +5632,14 @@ static bfd_boolean
|
||||||
xtensa_is_littable_section (sec)
|
xtensa_is_littable_section (sec)
|
||||||
asection *sec;
|
asection *sec;
|
||||||
{
|
{
|
||||||
static int linkonce_len = sizeof (".gnu.linkonce.") - 1;
|
if (strncmp (XTENSA_LIT_SEC_NAME, sec->name, lit_sec_len) == 0)
|
||||||
|
|
||||||
if (strncmp (".xt.lit", sec->name, 7) == 0)
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
if (strncmp (".gnu.linkonce.", sec->name, linkonce_len) == 0)
|
if (strncmp (".gnu.linkonce.", sec->name, linkonce_len) == 0
|
||||||
{
|
&& sec->name[linkonce_len] == 'p'
|
||||||
if (strncmp ("p.", sec->name + linkonce_len, 2) == 0)
|
&& sec->name[linkonce_len + 1] == '.')
|
||||||
return TRUE;
|
return TRUE;
|
||||||
if (strstr (sec->name + linkonce_len, ".xt.lit") != NULL)
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5671,78 +5667,42 @@ internal_reloc_compare (ap, bp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bfd_boolean
|
|
||||||
get_is_linkonce_section (abfd, sec)
|
|
||||||
bfd *abfd ATTRIBUTE_UNUSED;
|
|
||||||
asection *sec;
|
|
||||||
{
|
|
||||||
flagword flags, link_once_flags;
|
|
||||||
bfd_boolean is_linkonce = FALSE;;
|
|
||||||
|
|
||||||
flags = bfd_get_section_flags (abfd, sec);
|
|
||||||
link_once_flags = (flags & SEC_LINK_ONCE);
|
|
||||||
if (link_once_flags != 0)
|
|
||||||
is_linkonce = TRUE;
|
|
||||||
|
|
||||||
/* In order for this to be useful to the assembler
|
|
||||||
before the linkonce flag is set we need to
|
|
||||||
check for the GNU extension name. */
|
|
||||||
if (!is_linkonce &&
|
|
||||||
strncmp (sec->name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0)
|
|
||||||
is_linkonce = TRUE;
|
|
||||||
|
|
||||||
return is_linkonce;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
xtensa_get_property_section_name (abfd, sec, base_name)
|
xtensa_get_property_section_name (sec, base_name)
|
||||||
bfd *abfd;
|
|
||||||
asection *sec;
|
asection *sec;
|
||||||
const char * base_name;
|
const char *base_name;
|
||||||
{
|
{
|
||||||
char *table_sec_name = NULL;
|
if (strncmp (sec->name, ".gnu.linkonce.", linkonce_len) == 0)
|
||||||
bfd_boolean is_linkonce;
|
|
||||||
|
|
||||||
is_linkonce = get_is_linkonce_section (abfd, sec);
|
|
||||||
|
|
||||||
if (!is_linkonce)
|
|
||||||
{
|
{
|
||||||
table_sec_name = strdup (base_name);
|
char *prop_sec_name;
|
||||||
}
|
const char *suffix;
|
||||||
|
char linkonce_kind = 0;
|
||||||
|
|
||||||
|
if (strcmp (base_name, XTENSA_INSN_SEC_NAME) == 0)
|
||||||
|
linkonce_kind = 'x';
|
||||||
|
else if (strcmp (base_name, XTENSA_LIT_SEC_NAME) == 0)
|
||||||
|
linkonce_kind = 'p';
|
||||||
else
|
else
|
||||||
{
|
abort ();
|
||||||
static size_t prefix_len = sizeof (".gnu.linkonce.t.") - 1;
|
|
||||||
size_t len = strlen (sec->name) + 1;
|
|
||||||
char repl_char = '\0';
|
|
||||||
const char *segname = sec->name;
|
|
||||||
|
|
||||||
if (strncmp (segname, ".gnu.linkonce.t.", prefix_len) == 0)
|
prop_sec_name = (char *) bfd_malloc (strlen (sec->name) + 1);
|
||||||
|
memcpy (prop_sec_name, ".gnu.linkonce.", linkonce_len);
|
||||||
|
prop_sec_name[linkonce_len] = linkonce_kind;
|
||||||
|
prop_sec_name[linkonce_len + 1] = '.';
|
||||||
|
|
||||||
|
suffix = sec->name + linkonce_len;
|
||||||
|
while (*suffix)
|
||||||
{
|
{
|
||||||
if (strcmp (base_name, ".xt.insn") == 0)
|
suffix += 1;
|
||||||
repl_char = 'x';
|
if (suffix[-1] == '.')
|
||||||
else if (strcmp (base_name, ".xt.lit") == 0)
|
break;
|
||||||
repl_char = 'p';
|
}
|
||||||
|
strcpy (prop_sec_name + linkonce_len + 2, suffix);
|
||||||
|
|
||||||
|
return prop_sec_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (repl_char != '\0')
|
return strdup (base_name);
|
||||||
{
|
|
||||||
char *name = (char *) bfd_malloc (len);
|
|
||||||
memcpy (name, sec->name, len);
|
|
||||||
name[prefix_len - 2] = repl_char;
|
|
||||||
table_sec_name = name;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
size_t base_len = strlen (base_name) + 1;
|
|
||||||
char *name = (char *) bfd_malloc (len + base_len);
|
|
||||||
memcpy (name, sec->name, len - 1);
|
|
||||||
memcpy (name + len - 1, base_name, base_len);
|
|
||||||
table_sec_name = name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return table_sec_name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2003-10-14 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
|
* config/tc-xtensa.c (xtensa_create_property_segments): Remove bfd
|
||||||
|
argument in call to xtensa_get_property_section_name. Formatting.
|
||||||
|
|
||||||
2003-10-11 Kaz Kojima <kkojima@rr.iij4u.or.jp>
|
2003-10-11 Kaz Kojima <kkojima@rr.iij4u.or.jp>
|
||||||
|
|
||||||
* config/tc-sh.h (sh_coff_reloc_mangle): Delete an extra
|
* config/tc-sh.h (sh_coff_reloc_mangle): Delete an extra
|
||||||
|
|
|
@ -677,7 +677,7 @@ static bfd_boolean get_frag_is_insn
|
||||||
|
|
||||||
/* Import from elf32-xtensa.c in BFD library. */
|
/* Import from elf32-xtensa.c in BFD library. */
|
||||||
extern char *xtensa_get_property_section_name
|
extern char *xtensa_get_property_section_name
|
||||||
PARAMS ((bfd *, asection *, const char *));
|
PARAMS ((asection *, const char *));
|
||||||
|
|
||||||
/* TInsn and IStack functions. */
|
/* TInsn and IStack functions. */
|
||||||
static bfd_boolean tinsn_has_symbolic_operands
|
static bfd_boolean tinsn_has_symbolic_operands
|
||||||
|
@ -7916,12 +7916,11 @@ xtensa_create_property_segments (property_function, section_name_base,
|
||||||
segT sec = *seclist;
|
segT sec = *seclist;
|
||||||
if (section_has_property (sec, property_function))
|
if (section_has_property (sec, property_function))
|
||||||
{
|
{
|
||||||
char * property_section_name =
|
char *property_section_name =
|
||||||
xtensa_get_property_section_name (stdoutput, sec,
|
xtensa_get_property_section_name (sec, section_name_base);
|
||||||
section_name_base);
|
|
||||||
segT insn_sec = retrieve_xtensa_section (property_section_name);
|
segT insn_sec = retrieve_xtensa_section (property_section_name);
|
||||||
segment_info_type *xt_seg_info = retrieve_segment_info (insn_sec);
|
segment_info_type *xt_seg_info = retrieve_segment_info (insn_sec);
|
||||||
xtensa_block_info ** xt_blocks =
|
xtensa_block_info **xt_blocks =
|
||||||
&xt_seg_info->tc_segment_info_data.blocks[sec_type];
|
&xt_seg_info->tc_segment_info_data.blocks[sec_type];
|
||||||
/* Walk over all of the frchains here and add new sections. */
|
/* Walk over all of the frchains here and add new sections. */
|
||||||
add_xt_block_frags (sec, insn_sec, xt_blocks, property_function);
|
add_xt_block_frags (sec, insn_sec, xt_blocks, property_function);
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2003-10-14 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
|
* elf/xtensa.h: Formatting. Fix comments about property section
|
||||||
|
names for linkonce sections.
|
||||||
|
|
||||||
2003-09-22 Andrew Cagney <cagney@redhat.com>
|
2003-09-22 Andrew Cagney <cagney@redhat.com>
|
||||||
|
|
||||||
* floatformat.h (struct floatformat): Add field "is_valid".
|
* floatformat.h (struct floatformat): Add field "is_valid".
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
USA. */
|
||||||
|
|
||||||
/* This file holds definitions specific to the Xtensa ELF ABI. */
|
/* This file holds definitions specific to the Xtensa ELF ABI. */
|
||||||
|
|
||||||
|
@ -68,8 +69,8 @@ END_RELOC_NUMBERS (R_XTENSA_max)
|
||||||
|
|
||||||
|
|
||||||
/* Definitions for instruction and literal property tables. The
|
/* Definitions for instruction and literal property tables. The
|
||||||
instruction tables for ".gnu.linkonce.t.*" sections are placed in
|
tables for ".gnu.linkonce.*" sections are placed in the following
|
||||||
the following sections:
|
sections:
|
||||||
|
|
||||||
instruction tables: .gnu.linkonce.x.*
|
instruction tables: .gnu.linkonce.x.*
|
||||||
literal tables: .gnu.linkonce.p.*
|
literal tables: .gnu.linkonce.p.*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue