* elf64-mips.c (mips_elf64_be_swap_reloca_out): Handle type2 and type3.
[deliverable/binutils-gdb.git] / bfd / aout-ns32k.c
index e431339870b0128fbdcdf9e86e491b7418e2d9b6..8456e80d8598a89c55ad745f4cfcc6161b586820 100644 (file)
@@ -1,23 +1,23 @@
 /* BFD back-end for ns32k a.out-ish binaries.
-   Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1998, 2000, 2001
+   Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002
    Free Software Foundation, Inc.
    Contributed by Ian Dall (idall@eleceng.adelaide.edu.au).
 
-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #define BYTES_IN_WORD 4
 
@@ -25,7 +25,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "aout/aout64.h"
 #include "ns32k.h"
 
-#define MYNS(OP) CAT(ns32kaout_,OP)
+/* Do not "beautify" the CONCAT* macro args.  Traditional C will not
+   remove whitespace added here, and thus will fail to concatenate
+   the tokens.  */
+#define MYNS(OP) CONCAT2 (ns32kaout_,OP)
+
 reloc_howto_type *
 MYNS(bfd_reloc_type_lookup)
   PARAMS((bfd *abfd AND
@@ -37,7 +41,7 @@ MYNS(write_object_contents)
 
 /* Avoid multiple definitions from aoutx if supporting
    standard a.out format(s) as well as this one.  */
-#define NAME(x,y) CAT3(ns32kaout,_32_,y)
+#define NAME(x,y) CONCAT3 (ns32kaout,_32_,y)
 
 void bfd_ns32k_arch PARAMS ((void));
 
@@ -45,21 +49,21 @@ void bfd_ns32k_arch PARAMS ((void));
 
 #define MY(OP) MYNS(OP)
 
-#define MY_swap_std_reloc_in MY(swap_std_reloc_in)
+#define MY_swap_std_reloc_in  MY(swap_std_reloc_in)
 #define MY_swap_std_reloc_out MY(swap_std_reloc_out)
 
 static void
-MY_swap_std_reloc_in PARAMS ((bfd *abfd, struct reloc_std_external *bytes,
-                             arelent *cache_ptr, asymbol **symbols,
-                             bfd_size_type symcount));
+MY_swap_std_reloc_in PARAMS ((bfd *, struct reloc_std_external *,
+                             arelent *, asymbol **,
+                             bfd_size_type));
 static void
-MY_swap_std_reloc_out PARAMS ((bfd *abfd, arelent *g,
-                              struct reloc_std_external *natptr));
+MY_swap_std_reloc_out PARAMS ((bfd *, arelent *,
+                              struct reloc_std_external *));
 reloc_howto_type *
 MY(reloc_howto) PARAMS ((bfd *, struct reloc_std_external *,
                         int *, int *, int *));
 void
-MY(put_reloc) PARAMS ((bfd *, int, int, long, reloc_howto_type *,
+MY(put_reloc) PARAMS ((bfd *, int, int, bfd_vma, reloc_howto_type *,
                       struct reloc_std_external *));
 
 /* The ns32k series is ah, unusual, when it comes to relocation.
@@ -78,59 +82,60 @@ MY(put_reloc) PARAMS ((bfd *, int, int, long, reloc_howto_type *,
    pointer, the static base register and general purpose register etc.
 
    For example:
-   
+
    sym1: .long .        # pc relative 2's complement
    sym1: .long foo      # 2's complement not pc relative
+
    self:  movd @self, r0 # pc relative displacement
           movd foo, r0   # non pc relative displacement
 
    self:  movd self, r0  # pc relative immediate
           movd foo, r0   # non pc relative immediate
+
    In addition, for historical reasons the encoding of the relocation types
    in the a.out format relocation entries is such that even the relocation
-   methods which are standard are not encoded the standard way. */
+   methods which are standard are not encoded the standard way.  */
 
 reloc_howto_type MY(howto_table)[] =
   {
+    /* type           rs   size bsz  pcrel bitpos ovrf                  sf name          part_inpl readmask setmask pcdone */
     /* ns32k immediate operands.  */
-    HOWTO (BFD_RELOC_NS32K_IMM_8, 0, 0, 8, false, 0, true,
+    HOWTO (BFD_RELOC_NS32K_IMM_8, 0, 0, 8, false, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_imm, "NS32K_IMM_8",
           true, 0x000000ff,0x000000ff, false),
-    HOWTO (BFD_RELOC_NS32K_IMM_16, 0, 1, 16, false, 0, true,
+    HOWTO (BFD_RELOC_NS32K_IMM_16, 0, 1, 16, false, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_imm,  "NS32K_IMM_16",
           true, 0x0000ffff,0x0000ffff, false),
-    HOWTO (BFD_RELOC_NS32K_IMM_32, 0, 2, 32, false, 0, true,
+    HOWTO (BFD_RELOC_NS32K_IMM_32, 0, 2, 32, false, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_imm, "NS32K_IMM_32",
           true, 0xffffffff,0xffffffff, false),
-    HOWTO (BFD_RELOC_NS32K_IMM_8_PCREL, 0, 0, 8, true, 0, false,
+    HOWTO (BFD_RELOC_NS32K_IMM_8_PCREL, 0, 0, 8, true, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_8",
           true, 0x000000ff, 0x000000ff, false),
-    HOWTO (BFD_RELOC_NS32K_IMM_16_PCREL, 0, 1, 16, true, 0, false,
+    HOWTO (BFD_RELOC_NS32K_IMM_16_PCREL, 0, 1, 16, true, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_16",
           true, 0x0000ffff,0x0000ffff, false),
-    HOWTO (BFD_RELOC_NS32K_IMM_32_PCREL, 0, 2, 32, true, 0, false,
+    HOWTO (BFD_RELOC_NS32K_IMM_32_PCREL, 0, 2, 32, true, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_32",
           true, 0xffffffff,0xffffffff, false),
 
     /* ns32k displacements.  */
-    HOWTO (BFD_RELOC_NS32K_DISP_8, 0, 0, 8, false, 0, true,
+    HOWTO (BFD_RELOC_NS32K_DISP_8, 0, 0, 7, false, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_disp, "NS32K_DISP_8",
           true, 0x000000ff,0x000000ff, false),
-    HOWTO (BFD_RELOC_NS32K_DISP_16, 0, 1, 16, false, 0, true,
+    HOWTO (BFD_RELOC_NS32K_DISP_16, 0, 1, 14, false, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_disp, "NS32K_DISP_16",
           true, 0x0000ffff, 0x0000ffff, false),
-    HOWTO (BFD_RELOC_NS32K_DISP_32, 0, 2, 32, false, 0, true,
+    HOWTO (BFD_RELOC_NS32K_DISP_32, 0, 2, 30, false, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_disp, "NS32K_DISP_32",
           true, 0xffffffff, 0xffffffff, false),
-    HOWTO (BFD_RELOC_NS32K_DISP_8_PCREL, 0, 0, 8, true, 0, false,
+    HOWTO (BFD_RELOC_NS32K_DISP_8_PCREL, 0, 0, 7, true, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_8",
           true, 0x000000ff,0x000000ff, false),
-    HOWTO (BFD_RELOC_NS32K_DISP_16_PCREL, 0, 1, 16, true, 0, false,
+    HOWTO (BFD_RELOC_NS32K_DISP_16_PCREL, 0, 1, 14, true, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_16",
           true, 0x0000ffff,0x0000ffff, false),
-    HOWTO (BFD_RELOC_NS32K_DISP_32_PCREL, 0, 2, 32, true, 0, false,
+    HOWTO (BFD_RELOC_NS32K_DISP_32_PCREL, 0, 2, 30, true, 0, complain_overflow_signed,
           _bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_32",
           true, 0xffffffff,0xffffffff, false),
 
@@ -180,14 +185,15 @@ MY(reloc_howto) (abfd, rel, r_index, r_extern, r_pcrel)
   return (MY(howto_table) + r_length + 3 * (*r_pcrel) + 6 * r_ns32k_type);
 }
 
-#define MY_reloc_howto(BFD,REL,IN,EX,PC) MY(reloc_howto) (BFD, REL, &IN, &EX, &PC)
+#define MY_reloc_howto(BFD, REL, IN, EX, PC) \
+  MY(reloc_howto) (BFD, REL, &IN, &EX, &PC)
 
 void
 MY(put_reloc) (abfd, r_extern, r_index, value, howto, reloc)
      bfd *abfd;
      int r_extern;
      int r_index;
-     long value;
+     bfd_vma value;
      reloc_howto_type *howto;
      struct reloc_std_external *reloc;
 {
@@ -219,7 +225,7 @@ MY(put_reloc) (abfd, r_extern, r_index, value, howto, reloc)
 #define MY_final_link_relocate _bfd_ns32k_final_link_relocate
 #define MY_relocate_contents _bfd_ns32k_relocate_contents
 
-#include <aoutx.h>
+#include "aoutx.h"
 
 reloc_howto_type *
 MY(bfd_reloc_type_lookup) (abfd,code)
@@ -280,7 +286,7 @@ MY_swap_std_reloc_in (abfd, bytes, cache_ptr, symbols, symcount)
   int r_pcrel;
   struct aoutdata  *su = &(abfd->tdata.aout_data->a);
 
-  cache_ptr->address = bfd_h_get_32 (abfd, bytes->r_address);
+  cache_ptr->address = H_GET_32 (abfd, bytes->r_address);
 
   /* Now the fun stuff.  */
   cache_ptr->howto = MY_reloc_howto(abfd, bytes, r_index, r_extern, r_pcrel);
@@ -349,8 +355,8 @@ _bfd_ns32k_relocate_contents (howto, input_bfd, relocation, location)
      bfd_byte *location;
 {
   int r_ns32k_type = (howto - MY(howto_table)) / 6;
-  long (*get_data) PARAMS ((bfd_byte *, long, long));
-  int (*put_data) PARAMS ((long, bfd_byte *, long, long));
+  bfd_vma (*get_data) PARAMS ((bfd_byte *, int));
+  void (*put_data) PARAMS ((bfd_vma, bfd_byte *, int));
 
   switch (r_ns32k_type)
     {
This page took 0.026601 seconds and 4 git commands to generate.