Fix processing of RVA relocs
authorNick Clifton <nickc@redhat.com>
Thu, 18 Nov 1999 18:36:35 +0000 (18:36 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 18 Nov 1999 18:36:35 +0000 (18:36 +0000)
bfd/ChangeLog
bfd/coff-mcore.c

index af1173c147620c47c64ba9eba28d69034fc9e1e9..d26847ccca9a3e27e3a419f1e49c3b63e7379e40 100644 (file)
@@ -1,3 +1,10 @@
+1999-11-18  Nick Clifton  <nickc@cygnus.com>
+
+       * coff-mcore.c (coff_mcore_rtype_to_howto): Special case handling
+       for RVA relocs.
+       (coff_mcore_relocate_section): Initialise addend to 0.
+       Special case processing of RVA reloc.
+
 1999-11-17  Richard Henderson  <rth@cygnus.com>
 
        * elf-bfd.h (struct elf_backend_data): Reorder collect and
index 48f15259fc753a04e7cca0aeb4a2e4713579641a..a644db10c1ffb4802b3290b09e746e458000fdf6 100644 (file)
@@ -339,7 +339,7 @@ coff_mcore_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
   if (rel->r_type == IMAGE_REL_MCORE_RVA)
     * addendp -= pe_data (sec->output_section->owner)->pe_opthdr.ImageBase;
   
-  if (howto->pc_relative)
+  else if (howto->pc_relative)
     {
       * addendp = sec->vma - 2; /* XXX guess - is this right ? */
       
@@ -440,6 +440,8 @@ coff_mcore_relocate_section (output_bfd, info, input_bfd, input_section,
          sym = syms + symndx;
        }
 
+      addend = 0;
+      
       /* Get the howto and initialise the addend.  */
       howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h,
                                       sym, & addend);
@@ -527,8 +529,16 @@ coff_mcore_relocate_section (output_bfd, info, input_bfd, input_section,
        case IMAGE_REL_MCORE_PCREL_JSR_IMM11BY2:
        case IMAGE_REL_MCORE_ADDR32:
        case IMAGE_REL_MCORE_RVA:
+         /* XXX fixme - shouldn't this be like the code for the RVA reloc ? */
          rstat = _bfd_relocate_contents (howto, input_bfd, val, loc);
          break;
+         
+       case IMAGE_REL_MCORE_RVA:
+         rstat = _bfd_final_link_relocate
+           (howto, input_bfd,
+            input_section, contents, rel->r_vaddr - input_section->vma,
+            val, addend);
+         break;
        }
       
       if (info->base_file)