From: Jakub Jelinek Date: Tue, 18 Mar 2003 23:14:35 +0000 (+0000) Subject: * elfxx-ia64.c (elfNN_ia64_relax_section): Handle relaxation X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=665be68555c303f52ce9dd974b5e58fa398d9c56;p=pf3gnuchains%2Fpf3gnuchains3x.git * elfxx-ia64.c (elfNN_ia64_relax_section): Handle relaxation againt mergeable sections. Take r_addend into account when caching trampolines. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a8424cbf97..dfbdf92f1c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2003-03-18 Jakub Jelinek + + * elfxx-ia64.c (elfNN_ia64_relax_section): Handle relaxation + againt mergeable sections. Take r_addend into account when caching + trampolines. + 2003-03-18 Richard Henderson * elfxx-ia64.c (get_dyn_sym_info): Return NULL gracefully for diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index 6778f038f7..56c2819e15 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -819,6 +819,7 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) tsec = ia64_info->plt_sec; toff = dyn_i->plt2_offset; + BFD_ASSERT (irel->r_addend == 0); } /* Can't do anything else with dynamic symbols. */ @@ -837,10 +838,15 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) } } - symaddr = (tsec->output_section->vma - + tsec->output_offset - + toff - + irel->r_addend); + if (tsec->sec_info_type == ELF_INFO_TYPE_MERGE) + toff = _bfd_merged_section_offset (abfd, &tsec, + elf_section_data (tsec)->sec_info, + toff + irel->r_addend, + (bfd_vma) 0); + else + toff += irel->r_addend; + + symaddr = tsec->output_section->vma + tsec->output_offset + toff; roff = irel->r_offset;