gas: detect DCTI couples in sparc
[deliverable/binutils-gdb.git] / bfd / cpu-ns32k.c
index 074eb70a62ccc09845c2524d844b3f67e66559c3..b11318c16c10b81668831e9b01806c2160a4317e 100644 (file)
@@ -1,6 +1,5 @@
 /* BFD support for the ns32k architecture.
 /* BFD support for the ns32k architecture.
-   Copyright 1990, 1991, 1994, 1995, 1998, 2000, 2001, 2002, 2003, 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1990-2016 Free Software Foundation, Inc.
    Almost totally rewritten by Ian Dall from initial work
    by Andrew Cagney.
 
    Almost totally rewritten by Ian Dall from initial work
    by Andrew Cagney.
 
@@ -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 "ns32k.h"
 
 #define N(machine, printable, d, next)  \
 #include "libbfd.h"
 #include "ns32k.h"
 
 #define N(machine, printable, d, next)  \
-{  32, 32, 8, bfd_arch_ns32k, machine, "ns32k",printable,3,d,bfd_default_compatible,bfd_default_scan, next, }
+{  32, 32, 8, bfd_arch_ns32k, machine, "ns32k",printable,3,d, \
+   bfd_default_compatible,bfd_default_scan,bfd_arch_default_fill,next, }
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
 
 static const bfd_arch_info_type arch_info_struct[] =
 {
@@ -36,16 +37,8 @@ static const bfd_arch_info_type arch_info_struct[] =
 const bfd_arch_info_type bfd_ns32k_arch =
   N(32032,"ns32k:32032",FALSE, &arch_info_struct[0]);
 
 const bfd_arch_info_type bfd_ns32k_arch =
   N(32032,"ns32k:32032",FALSE, &arch_info_struct[0]);
 
-static bfd_reloc_status_type do_ns32k_reloc
-  PARAMS ((bfd *, arelent *, struct bfd_symbol *, PTR, asection *,
-          bfd *, char **,
-          bfd_vma (*) (bfd_byte *, int),
-          void (*) (bfd_vma, bfd_byte *, int)));
-
 bfd_vma
 bfd_vma
-_bfd_ns32k_get_displacement (buffer, size)
-     bfd_byte *buffer;
-     int size;
+_bfd_ns32k_get_displacement (bfd_byte *buffer, int size)
 {
   bfd_signed_vma value;
 
 {
   bfd_signed_vma value;
 
@@ -76,10 +69,7 @@ _bfd_ns32k_get_displacement (buffer, size)
 }
 
 void
 }
 
 void
-_bfd_ns32k_put_displacement (value, buffer, size)
-     bfd_vma value;
-     bfd_byte *buffer;
-     int size;
+_bfd_ns32k_put_displacement (bfd_vma value, bfd_byte *buffer, int size)
 {
   switch (size)
     {
 {
   switch (size)
     {
@@ -107,9 +97,7 @@ _bfd_ns32k_put_displacement (value, buffer, size)
 }
 
 bfd_vma
 }
 
 bfd_vma
-_bfd_ns32k_get_immediate (buffer, size)
-     bfd_byte *buffer;
-     int size;
+_bfd_ns32k_get_immediate (bfd_byte *buffer, int size)
 {
   bfd_vma value = 0;
 
 {
   bfd_vma value = 0;
 
@@ -130,10 +118,7 @@ _bfd_ns32k_get_immediate (buffer, size)
 }
 
 void
 }
 
 void
-_bfd_ns32k_put_immediate (value, buffer, size)
-     bfd_vma value;
-     bfd_byte *buffer;
-     int size;
+_bfd_ns32k_put_immediate (bfd_vma value, bfd_byte *buffer, int size)
 {
   buffer += size - 1;
   switch (size)
 {
   buffer += size - 1;
   switch (size)
@@ -154,29 +139,26 @@ _bfd_ns32k_put_immediate (value, buffer, size)
    needs to be!  */
 
 static bfd_reloc_status_type
    needs to be!  */
 
 static bfd_reloc_status_type
-do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
-               error_message, get_data, put_data)
-     bfd *abfd;
-     arelent *reloc_entry;
-     struct bfd_symbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message ATTRIBUTE_UNUSED;
-     bfd_vma (*get_data) PARAMS ((bfd_byte *, int));
-     void (*put_data) PARAMS ((bfd_vma, bfd_byte *, int));
+do_ns32k_reloc (bfd *      abfd,
+               arelent *  reloc_entry,
+               struct bfd_symbol * symbol,
+               void *     data,
+               asection * input_section,
+               bfd *      output_bfd,
+               char **    error_message ATTRIBUTE_UNUSED,
+               bfd_vma (* get_data) (bfd_byte *, int),
+               void (*    put_data) (bfd_vma, bfd_byte *, int))
 {
   int overflow = 0;
   bfd_vma relocation;
   bfd_reloc_status_type flag = bfd_reloc_ok;
   bfd_size_type addr = reloc_entry->address;
 {
   int overflow = 0;
   bfd_vma relocation;
   bfd_reloc_status_type flag = bfd_reloc_ok;
   bfd_size_type addr = reloc_entry->address;
-  bfd_size_type sz;
   bfd_vma output_base = 0;
   reloc_howto_type *howto = reloc_entry->howto;
   asection *reloc_target_output_section;
   bfd_byte *location;
 
   bfd_vma output_base = 0;
   reloc_howto_type *howto = reloc_entry->howto;
   asection *reloc_target_output_section;
   bfd_byte *location;
 
-  if ((symbol->section == &bfd_abs_section)
+  if (bfd_is_abs_section (symbol->section)
       && output_bfd != (bfd *) NULL)
     {
       reloc_entry->address += input_section->output_offset;
       && output_bfd != (bfd *) NULL)
     {
       reloc_entry->address += input_section->output_offset;
@@ -186,14 +168,13 @@ do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
   /* If we are not producing relocatable output, return an error if
      the symbol is not defined.  An undefined weak symbol is
      considered to have a value of zero (SVR4 ABI, p. 4-27).  */
   /* If we are not producing relocatable output, return an error if
      the symbol is not defined.  An undefined weak symbol is
      considered to have a value of zero (SVR4 ABI, p. 4-27).  */
-  if (symbol->section == &bfd_und_section
+  if (bfd_is_und_section (symbol->section)
       && (symbol->flags & BSF_WEAK) == 0
       && output_bfd == (bfd *) NULL)
     flag = bfd_reloc_undefined;
 
   /* Is the address of the relocation really within the section?  */
       && (symbol->flags & BSF_WEAK) == 0
       && output_bfd == (bfd *) NULL)
     flag = bfd_reloc_undefined;
 
   /* Is the address of the relocation really within the section?  */
-  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
-  if (reloc_entry->address > sz)
+  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
     return bfd_reloc_outofrange;
 
   /* Work out which section the relocation is targeted at and the
     return bfd_reloc_outofrange;
 
   /* Work out which section the relocation is targeted at and the
@@ -281,7 +262,6 @@ do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
          /* WTF?? */
          if (abfd->xvec->flavour == bfd_target_coff_flavour)
            {
          /* WTF?? */
          if (abfd->xvec->flavour == bfd_target_coff_flavour)
            {
-#if 1
              /* For m68k-coff, the addend was being subtracted twice during
                 relocation with -r.  Removing the line below this comment
                 fixes that problem; see PR 2953.
              /* For m68k-coff, the addend was being subtracted twice during
                 relocation with -r.  Removing the line below this comment
                 fixes that problem; see PR 2953.
@@ -357,7 +337,6 @@ do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
                   7) if they are different you have to figure out which
                      version is right.  */
              relocation -= reloc_entry->addend;
                   7) if they are different you have to figure out which
                      version is right.  */
              relocation -= reloc_entry->addend;
-#endif
              reloc_entry->addend = 0;
            }
          else
              reloc_entry->addend = 0;
            }
          else
@@ -585,14 +564,12 @@ do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
 /* Relocate a given location using a given value and howto.  */
 
 bfd_reloc_status_type
 /* Relocate a given location using a given value and howto.  */
 
 bfd_reloc_status_type
-_bfd_do_ns32k_reloc_contents (howto, input_bfd, relocation, location,
-                             get_data, put_data)
-     reloc_howto_type *howto;
-     bfd *input_bfd ATTRIBUTE_UNUSED;
-     bfd_vma relocation;
-     bfd_byte *location;
-     bfd_vma (*get_data) PARAMS ((bfd_byte *, int));
-     void (*put_data) PARAMS ((bfd_vma, bfd_byte *, int));
+_bfd_do_ns32k_reloc_contents (reloc_howto_type *howto,
+                             bfd *input_bfd ATTRIBUTE_UNUSED,
+                             bfd_vma relocation,
+                             bfd_byte *location,
+                             bfd_vma (*get_data) (bfd_byte *, int),
+                             void (*put_data) (bfd_vma, bfd_byte *, int))
 {
   int size;
   bfd_vma x;
 {
   int size;
   bfd_vma x;
@@ -608,8 +585,9 @@ _bfd_do_ns32k_reloc_contents (howto, input_bfd, relocation, location,
   switch (size)
     {
     default:
   switch (size)
     {
     default:
-    case 0:
       abort ();
       abort ();
+    case 0:
+      return bfd_reloc_ok;
     case 1:
     case 2:
     case 4:
     case 1:
     case 2:
     case 4:
@@ -760,15 +738,13 @@ _bfd_do_ns32k_reloc_contents (howto, input_bfd, relocation, location,
 }
 
 bfd_reloc_status_type
 }
 
 bfd_reloc_status_type
-_bfd_ns32k_reloc_disp (abfd, reloc_entry, symbol, data, input_section,
-                      output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     struct bfd_symbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+_bfd_ns32k_reloc_disp (bfd *abfd,
+                      arelent *reloc_entry,
+                      struct bfd_symbol *symbol,
+                      void * data,
+                      asection *input_section,
+                      bfd *output_bfd,
+                      char **error_message)
 {
   return do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section,
                         output_bfd, error_message,
 {
   return do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section,
                         output_bfd, error_message,
@@ -777,15 +753,13 @@ _bfd_ns32k_reloc_disp (abfd, reloc_entry, symbol, data, input_section,
 }
 
 bfd_reloc_status_type
 }
 
 bfd_reloc_status_type
-_bfd_ns32k_reloc_imm (abfd, reloc_entry, symbol, data, input_section,
-                     output_bfd, error_message)
-     bfd *abfd;
-     arelent *reloc_entry;
-     struct bfd_symbol *symbol;
-     PTR data;
-     asection *input_section;
-     bfd *output_bfd;
-     char **error_message;
+_bfd_ns32k_reloc_imm (bfd *abfd,
+                     arelent *reloc_entry,
+                     struct bfd_symbol *symbol,
+                     void * data,
+                     asection *input_section,
+                     bfd *output_bfd,
+                     char **error_message)
 {
   return do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section,
                         output_bfd, error_message, _bfd_ns32k_get_immediate,
 {
   return do_ns32k_reloc (abfd, reloc_entry, symbol, data, input_section,
                         output_bfd, error_message, _bfd_ns32k_get_immediate,
@@ -793,22 +767,18 @@ _bfd_ns32k_reloc_imm (abfd, reloc_entry, symbol, data, input_section,
 }
 
 bfd_reloc_status_type
 }
 
 bfd_reloc_status_type
-_bfd_ns32k_final_link_relocate (howto, input_bfd, input_section, contents,
-                               address, value, addend)
-     reloc_howto_type *howto;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     bfd_vma address;
-     bfd_vma value;
-     bfd_vma addend;
+_bfd_ns32k_final_link_relocate (reloc_howto_type *howto,
+                               bfd *input_bfd,
+                               asection *input_section,
+                               bfd_byte *contents,
+                               bfd_vma address,
+                               bfd_vma value,
+                               bfd_vma addend)
 {
   bfd_vma relocation;
 {
   bfd_vma relocation;
-  bfd_size_type sz;
 
   /* Sanity check the address.  */
 
   /* Sanity check the address.  */
-  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
-  if (address > sz)
+  if (address > bfd_get_section_limit (input_bfd, input_section))
     return bfd_reloc_outofrange;
 
   /* This function assumes that we are dealing with a basic relocation
     return bfd_reloc_outofrange;
 
   /* This function assumes that we are dealing with a basic relocation
This page took 0.026905 seconds and 4 git commands to generate.