* elf32-xtensa.c (analyze_relocations): Zero src_count if not relaxing.
(find_relaxable_sections): Do not increment src_count for unknown opcodes. Decode only once instead of calling is_l32r_relocation. (compute_text_actions): Remove unused no_insn_move flag. Assert that src_next matches src_count in relax_info.
This commit is contained in:
parent
558e5d2178
commit
25c6282a07
|
@ -1,3 +1,11 @@
|
||||||
|
2007-03-01 Bob Wilson <bob.wilson@acm.org>
|
||||||
|
|
||||||
|
* elf32-xtensa.c (analyze_relocations): Zero src_count if not relaxing.
|
||||||
|
(find_relaxable_sections): Do not increment src_count for unknown
|
||||||
|
opcodes. Decode only once instead of calling is_l32r_relocation.
|
||||||
|
(compute_text_actions): Remove unused no_insn_move flag. Assert that
|
||||||
|
src_next matches src_count in relax_info.
|
||||||
|
|
||||||
2007-03-01 Joseph Myers <joseph@codesourcery.com>
|
2007-03-01 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* Makefile.am (bfdver.h): Use "." not " " between version number
|
* Makefile.am (bfdver.h): Use "." not " " between version number
|
||||||
|
|
|
@ -5913,6 +5913,8 @@ analyze_relocations (struct bfd_link_info *link_info)
|
||||||
relax_info->src_relocs = (source_reloc *)
|
relax_info->src_relocs = (source_reloc *)
|
||||||
bfd_malloc (relax_info->src_count * sizeof (source_reloc));
|
bfd_malloc (relax_info->src_count * sizeof (source_reloc));
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
relax_info->src_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Collect info on relocations against each relaxable section. */
|
/* Collect info on relocations against each relaxable section. */
|
||||||
|
@ -5956,6 +5958,7 @@ find_relaxable_sections (bfd *abfd,
|
||||||
bfd_boolean ok = TRUE;
|
bfd_boolean ok = TRUE;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
xtensa_relax_info *source_relax_info;
|
xtensa_relax_info *source_relax_info;
|
||||||
|
bfd_boolean is_l32r_reloc;
|
||||||
|
|
||||||
internal_relocs = retrieve_internal_relocs (abfd, sec,
|
internal_relocs = retrieve_internal_relocs (abfd, sec,
|
||||||
link_info->keep_memory);
|
link_info->keep_memory);
|
||||||
|
@ -6006,13 +6009,21 @@ find_relaxable_sections (bfd *abfd,
|
||||||
/* Count PC-relative operand relocations against the target section.
|
/* Count PC-relative operand relocations against the target section.
|
||||||
Note: The conditions tested here must match the conditions under
|
Note: The conditions tested here must match the conditions under
|
||||||
which init_source_reloc is called in collect_source_relocs(). */
|
which init_source_reloc is called in collect_source_relocs(). */
|
||||||
if (is_operand_relocation (ELF32_R_TYPE (irel->r_info))
|
is_l32r_reloc = FALSE;
|
||||||
&& (!is_alt_relocation (ELF32_R_TYPE (irel->r_info))
|
if (is_operand_relocation (ELF32_R_TYPE (irel->r_info)))
|
||||||
|| is_l32r_relocation (abfd, sec, contents, irel)))
|
{
|
||||||
target_relax_info->src_count++;
|
xtensa_opcode opcode =
|
||||||
|
get_relocation_opcode (abfd, sec, contents, irel);
|
||||||
|
if (opcode != XTENSA_UNDEFINED)
|
||||||
|
{
|
||||||
|
is_l32r_reloc = (opcode == get_l32r_opcode ());
|
||||||
|
if (!is_alt_relocation (ELF32_R_TYPE (irel->r_info))
|
||||||
|
|| is_l32r_reloc)
|
||||||
|
target_relax_info->src_count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (is_l32r_relocation (abfd, sec, contents, irel)
|
if (is_l32r_reloc && r_reloc_is_defined (&r_rel))
|
||||||
&& r_reloc_is_defined (&r_rel))
|
|
||||||
{
|
{
|
||||||
/* Mark the target section as relaxable. */
|
/* Mark the target section as relaxable. */
|
||||||
target_relax_info->is_relaxable_literal_section = TRUE;
|
target_relax_info->is_relaxable_literal_section = TRUE;
|
||||||
|
@ -6333,14 +6344,12 @@ compute_text_actions (bfd *abfd,
|
||||||
property_table_entry *prop_table = 0;
|
property_table_entry *prop_table = 0;
|
||||||
int ptblsize = 0;
|
int ptblsize = 0;
|
||||||
bfd_size_type sec_size;
|
bfd_size_type sec_size;
|
||||||
static bfd_boolean no_insn_move = FALSE;
|
|
||||||
|
|
||||||
if (no_insn_move)
|
|
||||||
return ok;
|
|
||||||
|
|
||||||
/* Do nothing if the section contains no optimized longcalls. */
|
|
||||||
relax_info = get_xtensa_relax_info (sec);
|
relax_info = get_xtensa_relax_info (sec);
|
||||||
BFD_ASSERT (relax_info);
|
BFD_ASSERT (relax_info);
|
||||||
|
BFD_ASSERT (relax_info->src_next == relax_info->src_count);
|
||||||
|
|
||||||
|
/* Do nothing if the section contains no optimized longcalls. */
|
||||||
if (!relax_info->is_relaxable_asm_section)
|
if (!relax_info->is_relaxable_asm_section)
|
||||||
return ok;
|
return ok;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue