OSDN Git Service

Re-enable GAS for z8k-coff
authorNick Clifton <nickc@redhat.com>
Fri, 26 Aug 2005 09:47:49 +0000 (09:47 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 26 Aug 2005 09:47:49 +0000 (09:47 +0000)
bfd/ChangeLog
bfd/bfd-in2.h
bfd/coff-z8k.c
bfd/configure
bfd/configure.in
bfd/libbfd.h
bfd/reloc.c

index 1940287..1ff2729 100644 (file)
@@ -1,3 +1,19 @@
+2005-08-26  Christian Groessler  <chris@groessler.org>
+
+       * coff-z8k.c: (r_jr, r_disp7, r_callr): Fix src_mask and dst_mask
+       of HOWTO.
+       (coff_z8k_select_reloc): Remove.
+       (SELECT_RELOC): Remove.
+       (coff_z8k_reloc_type_lookup): New function.
+       (coff_bfd_reloc_type_lookup): Define.
+       * configure.in: Add cofflink.lo to z8kcoff_vec.
+       * configure: Regenerate.
+       * reloc.c: (bfd_reloc_code_type): Add z8k relocations.
+       (bfd_install_relocation): Don't clear reloc_entry->addend for
+       coff-z8k target.
+       * bfd-in2.h: Regenerate.
+       * libbfd.h: Regenerate.
+
 2005-08-25  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
 
        * elf32-sh.c (sh_elf_get_flags_from_mach): Fix off-by-one error.
index 2014c54..9359cd4 100644 (file)
@@ -3950,6 +3950,15 @@ assembler-expanded instructions.  This is commonly used
 internally by the linker after analysis of a 
 BFD_RELOC_XTENSA_ASM_EXPAND.  */
   BFD_RELOC_XTENSA_ASM_SIMPLIFY,
+
+/* DJNZ offset.  */
+  BFD_RELOC_Z8K_DISP7,
+
+/* CALR offset.  */
+  BFD_RELOC_Z8K_CALLR,
+
+/* 4 bit value.  */
+  BFD_RELOC_Z8K_IMM4L,
   BFD_RELOC_UNUSED };
 typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
 reloc_howto_type *bfd_reloc_type_lookup
index 52ed81f..d2dc381 100644 (file)
@@ -1,24 +1,24 @@
 /* BFD back-end for Zilog Z800n COFF binaries.
    Copyright 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003,
-   2004 Free Software Foundation, Inc.
+   2004, 2005 Free Software Foundation, Inc.
    Contributed by Cygnus Support.
    Written by Steve Chamberlain, <sac@cygnus.com>.
 
-This file is part of BFD, the Binary File Descriptor library.
+   This file is part of BFD, the Binary File Descriptor library.
 
-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
-(at your option) any later version.
+   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
+   (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-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.  */
+   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.  */
 
 #include "bfd.h"
 #include "sysdep.h"
@@ -55,29 +55,19 @@ HOWTO (R_REL16, 0, 1, 16, FALSE, 0,
        TRUE);
 
 static reloc_howto_type r_jr =
-HOWTO (R_JR, 0, 0, 8, TRUE, 0, complain_overflow_signed, 0,
-       "r_jr", TRUE, 0, 0, TRUE);
+HOWTO (R_JR, 1, 0, 8, TRUE, 0, complain_overflow_signed, 0,
+       "r_jr", TRUE, 0xff, 0xff, TRUE);
 
 static reloc_howto_type r_disp7 =
 HOWTO (R_DISP7, 0, 0, 7, TRUE, 0, complain_overflow_bitfield, 0,
-       "r_disp7", TRUE, 0, 0, TRUE);
+       "r_disp7", TRUE, 0x7f, 0x7f, TRUE);
 
 static reloc_howto_type r_callr =
-HOWTO (R_CALLR, 0, 1, 12, TRUE, 0, complain_overflow_signed, 0,
+HOWTO (R_CALLR, 1, 1, 12, TRUE, 0, complain_overflow_signed, 0,
        "r_callr", TRUE, 0xfff, 0xfff, TRUE);
 
-/* Turn a howto into a reloc number */
-
-static int
-coff_z8k_select_reloc (reloc_howto_type *howto)
-{
-  return howto->type;
-}
-
-#define SELECT_RELOC(x,howto) x.r_type = coff_z8k_select_reloc(howto)
-
 #define BADMAG(x) Z8KBADMAG(x)
-#define Z8K 1                  /* Customize coffcode.h */
+#define Z8K 1                  /* Customize coffcode.h */
 #define __A_MAGIC_SET__
 
 /* Code to swap in the reloc.  */
@@ -126,6 +116,25 @@ rtype2howto (arelent *internal, struct internal_reloc *dst)
 
 #define RTYPE2HOWTO(internal, relocentry) rtype2howto (internal, relocentry)
 
+static reloc_howto_type *
+coff_z8k_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+                            bfd_reloc_code_real_type code)
+{
+  switch (code)
+    {
+    case BFD_RELOC_8:          return & r_imm8;
+    case BFD_RELOC_16:         return & r_da;
+    case BFD_RELOC_32:         return & r_imm32;
+    case BFD_RELOC_8_PCREL:     return & r_jr;
+    case BFD_RELOC_16_PCREL:    return & r_rel16;
+    case BFD_RELOC_Z8K_DISP7:   return & r_disp7;
+    case BFD_RELOC_Z8K_CALLR:   return & r_callr;
+    case BFD_RELOC_Z8K_IMM4L:   return & r_imm4l;
+    default:                   BFD_FAIL ();
+      return 0;
+    }
+}
+
 /* Perform any necessary magic to the addend in a reloc entry.  */
 
 #define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
@@ -334,14 +343,16 @@ extra_case (bfd *in_abfd,
     }
 }
 
-#define coff_reloc16_extra_cases extra_case
+#define coff_reloc16_extra_cases    extra_case
+#define coff_bfd_reloc_type_lookup  coff_z8k_reloc_type_lookup
 
 #include "coffcode.h"
 
 #undef  coff_bfd_get_relocated_section_contents
-#undef coff_bfd_relax_section
 #define coff_bfd_get_relocated_section_contents \
   bfd_coff_reloc16_get_relocated_section_contents
+
+#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)
index bffdfb0..03f0477 100755 (executable)
@@ -13189,7 +13189,7 @@ do
     vms_vax_vec)               tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo" ;;
     w65_vec)                   tb="$tb coff-w65.lo reloc16.lo" ;;
     we32kcoff_vec)             tb="$tb coff-we32k.lo" ;;
-    z8kcoff_vec)               tb="$tb coff-z8k.lo reloc16.lo" ;;
+    z8kcoff_vec)               tb="$tb coff-z8k.lo reloc16.lo cofflink.lo" ;;
 
     # These appear out of order in targets.c
     srec_vec)                  tb="$tb srec.lo" ;;
index 7876cd4..40da6d8 100644 (file)
@@ -810,7 +810,7 @@ do
     vms_vax_vec)               tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo" ;;
     w65_vec)                   tb="$tb coff-w65.lo reloc16.lo" ;;
     we32kcoff_vec)             tb="$tb coff-we32k.lo" ;;
-    z8kcoff_vec)               tb="$tb coff-z8k.lo reloc16.lo" ;;
+    z8kcoff_vec)               tb="$tb coff-z8k.lo reloc16.lo cofflink.lo" ;;
 
     # These appear out of order in targets.c
     srec_vec)                  tb="$tb srec.lo" ;;
index 62173e0..527b776 100644 (file)
@@ -1790,6 +1790,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_XTENSA_OP2",
   "BFD_RELOC_XTENSA_ASM_EXPAND",
   "BFD_RELOC_XTENSA_ASM_SIMPLIFY",
+  "BFD_RELOC_Z8K_DISP7",
+  "BFD_RELOC_Z8K_CALLR",
+  "BFD_RELOC_Z8K_IMM4L",
  "@@overflow: BFD_RELOC_UNUSED@@",
 };
 #endif
index 77b4feb..f128033 100644 (file)
@@ -1168,7 +1168,9 @@ space consuming.  For each target:
     7) if they are different you have to figure out which version is
        right.  */
          relocation -= reloc_entry->addend;
-         reloc_entry->addend = 0;
+         /* FIXME: There should be no target specific code here...  */
+         if (strcmp (abfd->xvec->name, "coff-z8k") != 0)
+           reloc_entry->addend = 0;
        }
       else
        {
@@ -4435,6 +4437,19 @@ ENUMDOC
   internally by the linker after analysis of a 
   BFD_RELOC_XTENSA_ASM_EXPAND.
 
+ENUM
+  BFD_RELOC_Z8K_DISP7
+ENUMDOC
+  DJNZ offset.
+ENUM
+  BFD_RELOC_Z8K_CALLR
+ENUMDOC
+  CALR offset.
+ENUM
+  BFD_RELOC_Z8K_IMM4L
+ENUMDOC
+  4 bit value.
+
 ENDSENUM
   BFD_RELOC_UNUSED
 CODE_FRAGMENT