bfd/
2003-04-28 H.J. Lu <hjl@gnu.org> * elfxx-ia64.c (elfNN_ia64_relax_section): Relax ldxmov during the relax finalize pass. * section.c (struct sec): Add need_finalize_relax and remove flag11. (STD_SECTION): Update struct sec initializer. * bfd-in2.h: Regenerated. include/ 2003-04-28 H.J. Lu <hjl@gnu.org> * bfdlink.h (bfd_link_info): Add relax_finalizing. ld/ 2003-04-28 H.J. Lu <hjl@gnu.org> * ldlang.c (lang_process): Add the relax finalize pass. * ldmain.c (main): Initialize link_info.relax_finalizing to FALSE.
This commit is contained in:
parent
0ba6dca974
commit
c7996ad628
9 changed files with 56 additions and 6 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
2003-04-28 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
|
* elfxx-ia64.c (elfNN_ia64_relax_section): Relax ldxmov during
|
||||||
|
the relax finalize pass.
|
||||||
|
|
||||||
|
* section.c (struct sec): Add need_finalize_relax and remove
|
||||||
|
flag11.
|
||||||
|
(STD_SECTION): Update struct sec initializer.
|
||||||
|
* bfd-in2.h: Regenerated.
|
||||||
|
|
||||||
2003-04-28 H.J. Lu <hjl@gnu.org>
|
2003-04-28 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
* elflink.h (elf_merge_symbol): Call elf_backend_copy_indirect_symbol
|
* elflink.h (elf_merge_symbol): Call elf_backend_copy_indirect_symbol
|
||||||
|
|
|
@ -1291,8 +1291,10 @@ typedef struct sec
|
||||||
/* Bits used by various backends. */
|
/* Bits used by various backends. */
|
||||||
unsigned int has_tls_reloc:1;
|
unsigned int has_tls_reloc:1;
|
||||||
|
|
||||||
|
/* Nonzero if this section needs the relax finalize pass. */
|
||||||
|
unsigned int need_finalize_relax:1;
|
||||||
|
|
||||||
/* Usused bits. */
|
/* Usused bits. */
|
||||||
unsigned int flag11:1;
|
|
||||||
unsigned int flag12:1;
|
unsigned int flag12:1;
|
||||||
unsigned int flag13:1;
|
unsigned int flag13:1;
|
||||||
unsigned int flag14:1;
|
unsigned int flag14:1;
|
||||||
|
|
|
@ -704,9 +704,12 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
|
||||||
if (link_info->hash->creator->flavour != bfd_target_elf_flavour)
|
if (link_info->hash->creator->flavour != bfd_target_elf_flavour)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Nothing to do if there are no relocations. */
|
/* Nothing to do if there are no relocations or there is no need for
|
||||||
|
the relax finalize pass. */
|
||||||
if ((sec->flags & SEC_RELOC) == 0
|
if ((sec->flags & SEC_RELOC) == 0
|
||||||
|| sec->reloc_count == 0)
|
|| sec->reloc_count == 0
|
||||||
|
|| (link_info->relax_finalizing
|
||||||
|
&& sec->need_finalize_relax == 0))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* If this is the first time we have been called for this section,
|
/* If this is the first time we have been called for this section,
|
||||||
|
@ -756,11 +759,18 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
|
||||||
case R_IA64_PCREL21BI:
|
case R_IA64_PCREL21BI:
|
||||||
case R_IA64_PCREL21M:
|
case R_IA64_PCREL21M:
|
||||||
case R_IA64_PCREL21F:
|
case R_IA64_PCREL21F:
|
||||||
|
if (link_info->relax_finalizing)
|
||||||
|
continue;
|
||||||
is_branch = TRUE;
|
is_branch = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_IA64_LTOFF22X:
|
case R_IA64_LTOFF22X:
|
||||||
case R_IA64_LDXMOV:
|
case R_IA64_LDXMOV:
|
||||||
|
if (!link_info->relax_finalizing)
|
||||||
|
{
|
||||||
|
sec->need_finalize_relax = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
is_branch = FALSE;
|
is_branch = FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1047,6 +1057,9 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
|
||||||
/* ??? Resize .rela.got too. */
|
/* ??? Resize .rela.got too. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (link_info->relax_finalizing)
|
||||||
|
sec->need_finalize_relax = 0;
|
||||||
|
|
||||||
*again = changed_contents || changed_relocs;
|
*again = changed_contents || changed_relocs;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
|
|
@ -396,8 +396,10 @@ CODE_FRAGMENT
|
||||||
. {* Bits used by various backends. *}
|
. {* Bits used by various backends. *}
|
||||||
. unsigned int has_tls_reloc:1;
|
. unsigned int has_tls_reloc:1;
|
||||||
.
|
.
|
||||||
|
. {* Nonzero if this section needs the relax finalize pass. *}
|
||||||
|
. unsigned int need_finalize_relax:1;
|
||||||
|
.
|
||||||
. {* Usused bits. *}
|
. {* Usused bits. *}
|
||||||
. unsigned int flag11:1;
|
|
||||||
. unsigned int flag12:1;
|
. unsigned int flag12:1;
|
||||||
. unsigned int flag13:1;
|
. unsigned int flag13:1;
|
||||||
. unsigned int flag14:1;
|
. unsigned int flag14:1;
|
||||||
|
@ -615,8 +617,8 @@ static const asymbol global_syms[] =
|
||||||
/* linker_mark, linker_has_input, gc_mark, segment_mark, */ \
|
/* linker_mark, linker_has_input, gc_mark, segment_mark, */ \
|
||||||
0, 0, 1, 0, \
|
0, 0, 1, 0, \
|
||||||
\
|
\
|
||||||
/* sec_info_type, use_rela_p, has_tls_reloc, flag11, flag12, */ \
|
/* sec_info_type, use_rela_p, has_tls_reloc, need_finalize_relax, flag12, */ \
|
||||||
0, 0, 0, 0, 0, \
|
0, 0, 0, 0, 0, \
|
||||||
\
|
\
|
||||||
/* flag13, flag14, flag15, flag16, flag20, flag24, */ \
|
/* flag13, flag14, flag15, flag16, flag20, flag24, */ \
|
||||||
0, 0, 0, 0, 0, 0, \
|
0, 0, 0, 0, 0, 0, \
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2003-04-28 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
|
* bfdlink.h (bfd_link_info): Add relax_finalizing.
|
||||||
|
|
||||||
2003-04-23 H.J. Lu <hjl@gnu.org>
|
2003-04-23 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
* bfdlink.h (bfd_link_callbacks): Add error_handler.
|
* bfdlink.h (bfd_link_callbacks): Add error_handler.
|
||||||
|
|
|
@ -288,6 +288,9 @@ struct bfd_link_info
|
||||||
/* TRUE if global symbols in discarded sections should be stripped. */
|
/* TRUE if global symbols in discarded sections should be stripped. */
|
||||||
unsigned int strip_discarded: 1;
|
unsigned int strip_discarded: 1;
|
||||||
|
|
||||||
|
/* TRUE if relaxation is being finalized. */
|
||||||
|
unsigned int relax_finalizing: 1;
|
||||||
|
|
||||||
/* Which symbols to strip. */
|
/* Which symbols to strip. */
|
||||||
enum bfd_link_strip strip;
|
enum bfd_link_strip strip;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2003-04-28 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
|
* ldlang.c (lang_process): Add the relax finalize pass.
|
||||||
|
|
||||||
|
* ldmain.c (main): Initialize link_info.relax_finalizing to
|
||||||
|
FALSE.
|
||||||
|
|
||||||
2003-04-24 Roland McGrath <roland@redhat.com>
|
2003-04-24 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
* ldgram.y (phdr_type): Grok PT_TLS and PT_GNU_EH_FRAME names.
|
* ldgram.y (phdr_type): Grok PT_TLS and PT_GNU_EH_FRAME names.
|
||||||
|
|
|
@ -4393,6 +4393,14 @@ lang_process ()
|
||||||
abs_output_section,
|
abs_output_section,
|
||||||
&statement_list.head, 0, (bfd_vma) 0,
|
&statement_list.head, 0, (bfd_vma) 0,
|
||||||
&relax_again, FALSE);
|
&relax_again, FALSE);
|
||||||
|
|
||||||
|
/* If the normal relax is done and the relax finalize pass
|
||||||
|
is not performed yet, we perform another relax pass. */
|
||||||
|
if (!relax_again && !link_info.relax_finalizing)
|
||||||
|
{
|
||||||
|
link_info.relax_finalizing = TRUE;
|
||||||
|
relax_again = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
while (relax_again);
|
while (relax_again);
|
||||||
|
|
||||||
|
|
|
@ -329,6 +329,7 @@ main (argc, argv)
|
||||||
link_info.spare_dynamic_tags = 5;
|
link_info.spare_dynamic_tags = 5;
|
||||||
link_info.flags = (bfd_vma) 0;
|
link_info.flags = (bfd_vma) 0;
|
||||||
link_info.flags_1 = (bfd_vma) 0;
|
link_info.flags_1 = (bfd_vma) 0;
|
||||||
|
link_info.relax_finalizing = FALSE;
|
||||||
|
|
||||||
ldfile_add_arch ("");
|
ldfile_add_arch ("");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue