* elfcode.h (write_relocs): For rela relocations, adjust the
authorJeff Law <law@redhat.com>
Sun, 10 Apr 1994 08:12:33 +0000 (08:12 +0000)
committerJeff Law <law@redhat.com>
Sun, 10 Apr 1994 08:12:33 +0000 (08:12 +0000)
        addend for relocations involving section symbols to account
        for the lossage of 1:1 mapping from input section symbols to
        output section symbols.

bfd/ChangeLog
bfd/elfcode.h

index 8c19a1081bb0ddf703097b6c46c5689997acbf6e..29dcd293087d04d66425ddbf8aafc9cb98d54ae1 100644 (file)
@@ -1,3 +1,10 @@
+Sun Apr 10 01:02:24 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)
+
+       * elfcode.h (write_relocs): For rela relocations, adjust the
+       addend for relocations involving section symbols to account
+       for the lossage of 1:1 mapping from input section symbols to
+       output section symbols.
+
 Fri Apr  8 12:22:02 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
        * aoutx.h (NAME(aout,make_sections)): New function.
index 5fd42992092377f7b8df20927b16087df260adaa..50878fc17bdc790ac34a40f254e0d1ed874a44b7 100644 (file)
@@ -1171,6 +1171,17 @@ write_relocs (abfd, sec, xxx)
            dst_rela.r_offset = ptr->address;
 
          sym = *ptr->sym_ptr_ptr;
+
+         /* If SYM is a section symbol for an input section, which
+            has been combined with other similar input sections (ld -r),
+            then adjust the addend by the output_offset of sym->section.
+
+            Apparently elf_symbol_from_bfd_symbol doesn't provide a 1:1
+            mapping from bfd symbol to elf symbols in this case.  */
+         if ((sym->flags & BSF_SECTION_SYM)
+             && sym->section)
+           ptr->addend += sym->section->output_offset;
+
          if (sym == last_sym)
            n = last_sym_idx;
          else