aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfxx-ia64.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2003-03-18 23:14:35 +0000
committerJakub Jelinek <jakub@redhat.com>2003-03-18 23:14:35 +0000
commit3fa1d9175dbca1db85a0f07f967c5b374a3437be (patch)
tree5dc9b571bc4c1aa586248b47049138a09203cd8b /bfd/elfxx-ia64.c
parent19a0fc411bdd4f376b687838ba33a1abace0e37c (diff)
downloadgdb-3fa1d9175dbca1db85a0f07f967c5b374a3437be.zip
gdb-3fa1d9175dbca1db85a0f07f967c5b374a3437be.tar.gz
gdb-3fa1d9175dbca1db85a0f07f967c5b374a3437be.tar.bz2
* elfxx-ia64.c (elfNN_ia64_relax_section): Handle relaxation
againt mergeable sections. Take r_addend into account when caching trampolines.
Diffstat (limited to 'bfd/elfxx-ia64.c')
-rw-r--r--bfd/elfxx-ia64.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c
index 6778f03..56c2819 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;