Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / coff-z8k.c
index d2dc3815ad02d59e11ebe0188c96eebfbf3d58dc..25e63a4b671bd471933491a1c55cf6b94e943d2f 100644 (file)
@@ -1,6 +1,5 @@
 /* BFD back-end for Zilog Z800n COFF binaries.
 /* BFD back-end for Zilog Z800n COFF binaries.
-   Copyright 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1992-2015 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
    Written by Steve Chamberlain, <sac@cygnus.com>.
 
    Contributed by Cygnus Support.
    Written by Steve Chamberlain, <sac@cygnus.com>.
 
@@ -8,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 
-#include "bfd.h"
 #include "sysdep.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 #include "bfdlink.h"
 #include "coff/z8k.h"
 #include "libbfd.h"
 #include "bfdlink.h"
 #include "coff/z8k.h"
@@ -85,7 +85,7 @@ rtype2howto (arelent *internal, struct internal_reloc *dst)
   switch (dst->r_type)
     {
     default:
   switch (dst->r_type)
     {
     default:
-      abort ();
+      internal->howto = NULL;
       break;
     case R_IMM8:
       internal->howto = &r_imm8;
       break;
     case R_IMM8:
       internal->howto = &r_imm8;
@@ -135,6 +135,30 @@ coff_z8k_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
     }
 }
 
     }
 }
 
+static reloc_howto_type *
+coff_z8k_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+                           const char *r_name)
+{
+  if (strcasecmp (r_imm8.name, r_name) == 0)
+    return &r_imm8;
+  if (strcasecmp (r_da.name, r_name) == 0)
+    return &r_da;
+  if (strcasecmp (r_imm32.name, r_name) == 0)
+    return &r_imm32;
+  if (strcasecmp (r_jr.name, r_name) == 0)
+    return &r_jr;
+  if (strcasecmp (r_rel16.name, r_name) == 0)
+    return &r_rel16;
+  if (strcasecmp (r_disp7.name, r_name) == 0)
+    return &r_disp7;
+  if (strcasecmp (r_callr.name, r_name) == 0)
+    return &r_callr;
+  if (strcasecmp (r_imm4l.name, r_name) == 0)
+    return &r_imm4l;
+
+  return NULL;
+}
+
 /* Perform any necessary magic to the addend in a reloc entry.  */
 
 #define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
 /* Perform any necessary magic to the addend in a reloc entry.  */
 
 #define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
@@ -230,8 +254,8 @@ extra_case (bfd *in_abfd,
       {
        bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
                                                  input_section);
       {
        bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
                                                  input_section);
-       bfd_vma dot = (link_order->offset
-                      + *dst_ptr
+       bfd_vma dot = (*dst_ptr
+                      + input_section->output_offset
                       + input_section->output_section->vma);
        int gap = dst - dot - 1;  /* -1, since we're in the odd byte of the
                                      word and the pc's been incremented.  */
                       + input_section->output_section->vma);
        int gap = dst - dot - 1;  /* -1, since we're in the odd byte of the
                                      word and the pc's been incremented.  */
@@ -258,8 +282,8 @@ extra_case (bfd *in_abfd,
       {
        bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
                                                  input_section);
       {
        bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
                                                  input_section);
-       bfd_vma dot = (link_order->offset
-                      + *dst_ptr
+       bfd_vma dot = (*dst_ptr
+                      + input_section->output_offset
                       + input_section->output_section->vma);
        int gap = dst - dot - 1;  /* -1, since we're in the odd byte of the
                                      word and the pc's been incremented.  */
                       + input_section->output_section->vma);
        int gap = dst - dot - 1;  /* -1, since we're in the odd byte of the
                                      word and the pc's been incremented.  */
@@ -289,8 +313,8 @@ extra_case (bfd *in_abfd,
       {
        bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
                                                  input_section);
       {
        bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
                                                  input_section);
-       bfd_vma dot = (link_order->offset
-                      + *dst_ptr
+       bfd_vma dot = (*dst_ptr
+                      + input_section->output_offset
                       + input_section->output_section->vma);
        int gap = dst - dot - 2;
 
                       + input_section->output_section->vma);
        int gap = dst - dot - 2;
 
@@ -318,8 +342,8 @@ extra_case (bfd *in_abfd,
       {
        bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
                                                  input_section);
       {
        bfd_vma dst = bfd_coff_reloc16_get_value (reloc, link_info,
                                                  input_section);
-       bfd_vma dot = (link_order->offset
-                      + *dst_ptr
+       bfd_vma dot = (*dst_ptr
+                      + input_section->output_offset
                       + input_section->output_section->vma);
        int gap = dst - dot - 2;
 
                       + input_section->output_section->vma);
        int gap = dst - dot - 2;
 
@@ -345,6 +369,11 @@ extra_case (bfd *in_abfd,
 
 #define coff_reloc16_extra_cases    extra_case
 #define coff_bfd_reloc_type_lookup  coff_z8k_reloc_type_lookup
 
 #define coff_reloc16_extra_cases    extra_case
 #define coff_bfd_reloc_type_lookup  coff_z8k_reloc_type_lookup
+#define coff_bfd_reloc_name_lookup coff_z8k_reloc_name_lookup
+
+#ifndef bfd_pe_print_pdata
+#define bfd_pe_print_pdata     NULL
+#endif
 
 #include "coffcode.h"
 
 
 #include "coffcode.h"
 
@@ -355,4 +384,4 @@ extra_case (bfd *in_abfd,
 #undef  coff_bfd_relax_section
 #define coff_bfd_relax_section bfd_coff_reloc16_relax_section
 
 #undef  coff_bfd_relax_section
 #define coff_bfd_relax_section bfd_coff_reloc16_relax_section
 
-CREATE_BIG_COFF_TARGET_VEC (z8kcoff_vec, "coff-z8k", 0, 0, '_', NULL, COFF_SWAP_TABLE)
+CREATE_BIG_COFF_TARGET_VEC (z8k_coff_vec, "coff-z8k", 0, 0, '_', NULL, COFF_SWAP_TABLE)
This page took 0.026185 seconds and 4 git commands to generate.