diff options
Diffstat (limited to 'bfd/elfxx-ia64.c')
-rw-r--r-- | bfd/elfxx-ia64.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index bff78c8..946157f 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -704,9 +704,12 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) if (link_info->hash->creator->flavour != bfd_target_elf_flavour) 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 - || sec->reloc_count == 0) + || sec->reloc_count == 0 + || (link_info->relax_finalizing + && sec->need_finalize_relax == 0)) return TRUE; /* 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_PCREL21M: case R_IA64_PCREL21F: + if (link_info->relax_finalizing) + continue; is_branch = TRUE; break; case R_IA64_LTOFF22X: case R_IA64_LDXMOV: + if (!link_info->relax_finalizing) + { + sec->need_finalize_relax = 1; + continue; + } is_branch = FALSE; break; @@ -1047,6 +1057,9 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) /* ??? Resize .rela.got too. */ } + if (link_info->relax_finalizing) + sec->need_finalize_relax = 0; + *again = changed_contents || changed_relocs; return TRUE; |