* elfxx-ia64.c (elfNN_ia64_relax_section): Handle relaxation
authorJakub Jelinek <jakub@redhat.com>
Tue, 18 Mar 2003 23:14:35 +0000 (23:14 +0000)
committerJakub Jelinek <jakub@redhat.com>
Tue, 18 Mar 2003 23:14:35 +0000 (23:14 +0000)
againt mergeable sections.  Take r_addend into account when caching
trampolines.

bfd/ChangeLog
bfd/elfxx-ia64.c

index a8424cbf97b066d07dd0e17a153c1bc68aa7801f..dfbdf92f1cd9455941a6ef0d0170ec0854a7470b 100644 (file)
@@ -1,3 +1,9 @@
+2003-03-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * 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  <rth@redhat.com>
 
         * elfxx-ia64.c (get_dyn_sym_info): Return NULL gracefully for
index 6778f038f7e9ac0a869071ddc5208efdefdf1cbf..56c2819e15e3a9625ac3410c5e508d2a31308084 100644 (file)
@@ -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;