From 1cf8832f71c54fb99c8b54fabb6eb91ee30d5b61 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 26 Aug 2005 09:47:49 +0000 Subject: [PATCH] Re-enable GAS for z8k-coff --- bfd/ChangeLog | 16 +++++++++++++ bfd/bfd-in2.h | 9 +++++++ bfd/coff-z8k.c | 71 ++++++++++++++++++++++++++++++++------------------------ bfd/configure | 2 +- bfd/configure.in | 2 +- bfd/libbfd.h | 3 +++ bfd/reloc.c | 17 +++++++++++++- 7 files changed, 87 insertions(+), 33 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 19402870f3..1ff27293c9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,19 @@ +2005-08-26 Christian Groessler + + * 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 * elf32-sh.c (sh_elf_get_flags_from_mach): Fix off-by-one error. diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 2014c548c8..9359cd4314 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -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 diff --git a/bfd/coff-z8k.c b/bfd/coff-z8k.c index 52ed81fa07..d2dc3815ad 100644 --- a/bfd/coff-z8k.c +++ b/bfd/coff-z8k.c @@ -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, . -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) diff --git a/bfd/configure b/bfd/configure index bffdfb0bcc..03f04777f9 100755 --- a/bfd/configure +++ b/bfd/configure @@ -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" ;; diff --git a/bfd/configure.in b/bfd/configure.in index 7876cd4c88..40da6d83eb 100644 --- a/bfd/configure.in +++ b/bfd/configure.in @@ -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" ;; diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 62173e0102..527b776e65 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -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 diff --git a/bfd/reloc.c b/bfd/reloc.c index 77b4feb4ef..f1280331df 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -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 -- 2.11.0