PR binutils/716
[deliverable/binutils-gdb.git] / bfd / coff-or32.c
index 6bec813e13f323cd42053233bee5edb2f592bbb5..6e02b90c8a5b93745419acfb727c14d64d337435 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for OpenRISC 1000 COFF binaries.
-   Copyright 2002 Free Software Foundation, Inc.
+   Copyright 2002, 2003 Free Software Foundation, Inc.
    Contributed by Ivan Guzvinec  <ivang@opencores.org>
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -148,23 +148,14 @@ or32_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
         signed_value = 0;
 
       signed_value += sym_value + reloc_entry->addend;
-#if 0
-      if ((signed_value & ~0x3ffff) == 0)
-        {                     /* Absolute jmp/call.  */
-          insn |= (1<<24);    /* Make it absolute.  */
-          /* FIXME: Should we change r_type to R_IABS.  */
-        }
-      else
-#endif
-        {
-          /* Relative jmp/call, so subtract from the value the
-             address of the place we're coming from.  */
-          signed_value -= (reloc_entry->address
-                           + input_section->output_section->vma
-                           + input_section->output_offset);
-          if (signed_value > 0x7ffffff || signed_value < -0x8000000)
-            return bfd_reloc_overflow;
-        }
+      /* Relative jmp/call, so subtract from the value the
+        address of the place we're coming from.  */
+      signed_value -= (reloc_entry->address
+                      + input_section->output_section->vma
+                      + input_section->output_offset);
+      if (signed_value > 0x7ffffff || signed_value < -0x8000000)
+       return bfd_reloc_overflow;
+
       signed_value >>= 2;
       insn = INSERT_JUMPTARG (insn, signed_value);
       bfd_put_32 (abfd, insn, hit_data);
@@ -360,10 +351,10 @@ coff_or32_relocate_section (output_bfd, info, input_bfd, input_section,
   bfd_boolean hihalf;
   bfd_vma hihalf_val;
 
-  /* If we are performing a relocateable link, we don't need to do a
+  /* If we are performing a relocatable link, we don't need to do a
      thing.  The caller will take care of adjusting the reloc
      addresses and symbol indices.  */
-  if (info->relocateable)
+  if (info->relocatable)
     return TRUE;
 
   hihalf = FALSE;
@@ -465,25 +456,15 @@ coff_or32_relocate_section (output_bfd, info, input_bfd, input_section,
           /* Determine the destination of the jump.  */
           signed_value += val;
 
-#if 0
-          if ((signed_value & ~0x3ffff) == 0)
-            {
-              /* We can use an absolute jump.  */
-              insn |= (1 << 24);
-            }
-          else
-#endif
-            {
-              /* Make the destination PC relative.  */
-              signed_value -= (input_section->output_section->vma
-                               + input_section->output_offset
-                               + (rel->r_vaddr - input_section->vma));
-              if (signed_value > 0x7ffffff || signed_value < - 0x8000000)
-                {
-                  overflow = TRUE;
-                  signed_value = 0;
-                }
-            }
+         /* Make the destination PC relative.  */
+         signed_value -= (input_section->output_section->vma
+                          + input_section->output_offset
+                          + (rel->r_vaddr - input_section->vma));
+         if (signed_value > 0x7ffffff || signed_value < - 0x8000000)
+           {
+             overflow = TRUE;
+             signed_value = 0;
+           }
 
           /* Put the adjusted value back into the instruction.  */
           signed_value >>= 2;
@@ -545,7 +526,7 @@ coff_or32_relocate_section (output_bfd, info, input_bfd, input_section,
           if (symndx == -1)
             name = "*ABS*";
           else if (h != NULL)
-            name = h->root.root.string;
+            name = NULL;
           else if (sym == NULL)
             name = "*unknown*";
           else if (sym->_n._n_n._n_zeroes == 0
@@ -559,9 +540,9 @@ coff_or32_relocate_section (output_bfd, info, input_bfd, input_section,
             }
 
           if (! ((*info->callbacks->reloc_overflow)
-                 (info, name, howto_table[rel->r_type].name, (bfd_vma) 0,
-                  input_bfd, input_section,
-                  rel->r_vaddr - input_section->vma)))
+                 (info, (h ? &h->root : NULL), name,
+                 howto_table[rel->r_type].name, (bfd_vma) 0, input_bfd,
+                 input_section, rel->r_vaddr - input_section->vma)))
             return FALSE;
         }
     }
This page took 0.027513 seconds and 4 git commands to generate.