Update year range in copyright notice of binutils files
[deliverable/binutils-gdb.git] / bfd / elf32-i860.c
index f156bc51e1ab81511a5870b1be5bac985ad4a70d..e34965c040d6f34413829449546e4b499aae1996 100644 (file)
@@ -1,27 +1,27 @@
 /* Intel i860 specific support for 32-bit ELF.
-   Copyright 1993, 1995, 1999, 2000, 2001, 2002, 2003, 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 1993-2018 Free Software Foundation, Inc.
 
    Full i860 support contributed by Jason Eckhardt <jle@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 3 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., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
-#include "bfd.h"
 #include "sysdep.h"
+#include "bfd.h"
 #include "libbfd.h"
 #include "elf-bfd.h"
 #include "elf/i860.h"
@@ -29,12 +29,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* special_function for R_860_PC26 relocation.  */
 static bfd_reloc_status_type
 i860_howto_pc26_reloc (bfd *abfd ATTRIBUTE_UNUSED,
-                       arelent *reloc_entry,
-                       asymbol *symbol,
-                       void *data ATTRIBUTE_UNUSED,
-                       asection *input_section,
-                       bfd *output_bfd,
-                       char **error_message ATTRIBUTE_UNUSED)
+                      arelent *reloc_entry,
+                      asymbol *symbol,
+                      void *data ATTRIBUTE_UNUSED,
+                      asection *input_section,
+                      bfd *output_bfd,
+                      char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma insn;
   bfd_vma relocation;
@@ -63,18 +63,18 @@ i860_howto_pc26_reloc (bfd *abfd ATTRIBUTE_UNUSED,
   relocation += symbol->section->output_offset;
   relocation += reloc_entry->addend;
 
-  if (reloc_entry->address > input_section->_cooked_size)
+  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
     return bfd_reloc_outofrange;
 
   /* Adjust for PC-relative relocation.  */
   relocation -= (input_section->output_section->vma
-                 + input_section->output_offset
-                 + reloc_entry->address
-                 + 4);
+                + input_section->output_offset
+                + reloc_entry->address
+                + 4);
 
   /* Check for target out of range.  */
   if ((bfd_signed_vma)relocation > (0x3ffffff << 2)
-      || (bfd_signed_vma)relocation < (-0x4000000 << 2))
+      || (bfd_signed_vma)relocation < (-0x4000000 * 4))
     return bfd_reloc_outofrange;
 
   addr = (bfd_byte *) data + reloc_entry->address;
@@ -82,7 +82,7 @@ i860_howto_pc26_reloc (bfd *abfd ATTRIBUTE_UNUSED,
 
   relocation >>= reloc_entry->howto->rightshift;
   insn = (insn & ~reloc_entry->howto->dst_mask)
-         | (relocation & reloc_entry->howto->dst_mask);
+        | (relocation & reloc_entry->howto->dst_mask);
 
   bfd_put_32 (abfd, (bfd_vma) insn, addr);
 
@@ -92,12 +92,12 @@ i860_howto_pc26_reloc (bfd *abfd ATTRIBUTE_UNUSED,
 /* special_function for R_860_PC16 relocation.  */
 static bfd_reloc_status_type
 i860_howto_pc16_reloc (bfd *abfd,
-                       arelent *reloc_entry,
-                       asymbol *symbol,
-                       void *data,
-                       asection *input_section,
-                       bfd *output_bfd,
-                       char **error_message ATTRIBUTE_UNUSED)
+                      arelent *reloc_entry,
+                      asymbol *symbol,
+                      void *data,
+                      asection *input_section,
+                      bfd *output_bfd,
+                      char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma insn;
   bfd_vma relocation;
@@ -126,18 +126,18 @@ i860_howto_pc16_reloc (bfd *abfd,
   relocation += symbol->section->output_offset;
   relocation += reloc_entry->addend;
 
-  if (reloc_entry->address > input_section->_cooked_size)
+  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
     return bfd_reloc_outofrange;
 
   /* Adjust for PC-relative relocation.  */
   relocation -= (input_section->output_section->vma
-                 + input_section->output_offset
-                 + reloc_entry->address
-                 + 4);
+                + input_section->output_offset
+                + reloc_entry->address
+                + 4);
 
   /* Check for target out of range.  */
   if ((bfd_signed_vma)relocation > (0x7fff << 2)
-      || (bfd_signed_vma)relocation < (-0x8000 << 2))
+      || (bfd_signed_vma)relocation < (-0x8000 * 4))
     return bfd_reloc_outofrange;
 
   addr = (bfd_byte *) data + reloc_entry->address;
@@ -145,7 +145,7 @@ i860_howto_pc16_reloc (bfd *abfd,
 
   relocation >>= reloc_entry->howto->rightshift;
   relocation = (((relocation & 0xf800) << 5) | (relocation & 0x7ff))
-               & reloc_entry->howto->dst_mask;
+              & reloc_entry->howto->dst_mask;
   insn = (insn & ~reloc_entry->howto->dst_mask) | relocation;
 
   bfd_put_32 (abfd, (bfd_vma) insn, addr);
@@ -156,12 +156,12 @@ i860_howto_pc16_reloc (bfd *abfd,
 /* special_function for R_860_HIGHADJ relocation.  */
 static bfd_reloc_status_type
 i860_howto_highadj_reloc (bfd *abfd,
-                          arelent *reloc_entry,
-                          asymbol *symbol,
-                          void *data,
-                          asection *input_section,
-                          bfd *output_bfd,
-                          char **error_message ATTRIBUTE_UNUSED)
+                         arelent *reloc_entry,
+                         asymbol *symbol,
+                         void *data,
+                         asection *input_section,
+                         bfd *output_bfd,
+                         char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma insn;
   bfd_vma relocation;
@@ -191,7 +191,7 @@ i860_howto_highadj_reloc (bfd *abfd,
   relocation += reloc_entry->addend;
   relocation += 0x8000;
 
-  if (reloc_entry->address > input_section->_cooked_size)
+  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
     return bfd_reloc_outofrange;
 
   addr = (bfd_byte *) data + reloc_entry->address;
@@ -209,12 +209,12 @@ i860_howto_highadj_reloc (bfd *abfd,
 /* special_function for R_860_SPLITn relocations.  */
 static bfd_reloc_status_type
 i860_howto_splitn_reloc (bfd *abfd,
-                         arelent *reloc_entry,
-                         asymbol *symbol,
-                         void *data,
-                         asection *input_section,
-                         bfd *output_bfd,
-                         char **error_message ATTRIBUTE_UNUSED)
+                        arelent *reloc_entry,
+                        asymbol *symbol,
+                        void *data,
+                        asection *input_section,
+                        bfd *output_bfd,
+                        char **error_message ATTRIBUTE_UNUSED)
 {
   bfd_vma insn;
   bfd_vma relocation;
@@ -243,14 +243,14 @@ i860_howto_splitn_reloc (bfd *abfd,
   relocation += symbol->section->output_offset;
   relocation += reloc_entry->addend;
 
-  if (reloc_entry->address > input_section->_cooked_size)
+  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
     return bfd_reloc_outofrange;
 
   addr = (bfd_byte *) data + reloc_entry->address;
   insn = bfd_get_32 (abfd, addr);
 
   relocation = (((relocation & 0xf800) << 5) | (relocation & 0x7ff))
-               & reloc_entry->howto->dst_mask;
+              & reloc_entry->howto->dst_mask;
   insn = (insn & ~reloc_entry->howto->dst_mask) | relocation;
 
   bfd_put_32 (abfd, (bfd_vma) insn, addr);
@@ -264,11 +264,11 @@ static reloc_howto_type elf32_i860_howto_table [] =
   /* This relocation does nothing.  */
   HOWTO (R_860_NONE,           /* type */
         0,                     /* rightshift */
-        2,                     /* size (0 = byte, 1 = short, 2 = long) */
-        32,                    /* bitsize */
+        3,                     /* size (0 = byte, 1 = short, 2 = long) */
+        0,                     /* bitsize */
         FALSE,                 /* pc_relative */
         0,                     /* bitpos */
-        complain_overflow_bitfield, /* complain_on_overflow */
+        complain_overflow_dont, /* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_860_NONE",          /* name */
         FALSE,                 /* partial_inplace */
@@ -348,7 +348,7 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE),                /* pcrel_offset */
 
   /* A 26-bit PC-relative relocation.  */
-  HOWTO (R_860_PC26,           /* type */
+  HOWTO (R_860_PC26,           /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         26,                    /* bitsize */
@@ -360,9 +360,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0x3ffffff,             /* src_mask */
         0x3ffffff,             /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_PLT26,          /* type */
+  HOWTO (R_860_PLT26,          /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         26,                    /* bitsize */
@@ -374,10 +374,10 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
   /* A 16-bit PC-relative relocation.  */
-  HOWTO (R_860_PC16,           /* type */
+  HOWTO (R_860_PC16,           /* type */
         2,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -389,9 +389,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0x1f07ff,              /* src_mask */
         0x1f07ff,              /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_LOW0,           /* type */
+  HOWTO (R_860_LOW0,           /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -403,9 +403,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0xffff,                /* src_mask */
         0xffff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_SPLIT0,         /* type */
+  HOWTO (R_860_SPLIT0,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -417,9 +417,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0x1f07ff,              /* src_mask */
         0x1f07ff,              /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_LOW1,           /* type */
+  HOWTO (R_860_LOW1,           /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -431,9 +431,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0xfffe,                /* src_mask */
         0xfffe,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_SPLIT1,         /* type */
+  HOWTO (R_860_SPLIT1,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -445,9 +445,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0x1f07fe,              /* src_mask */
         0x1f07fe,              /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_LOW2,           /* type */
+  HOWTO (R_860_LOW2,           /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -459,9 +459,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0xfffc,                /* src_mask */
         0xfffc,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_SPLIT2,         /* type */
+  HOWTO (R_860_SPLIT2,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -473,9 +473,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0x1f07fc,              /* src_mask */
         0x1f07fc,              /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_LOW3,           /* type */
+  HOWTO (R_860_LOW3,           /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -487,9 +487,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0xfff8,                /* src_mask */
         0xfff8,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_LOGOT0,         /* type */
+  HOWTO (R_860_LOGOT0,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -501,9 +501,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_SPGOT0,         /* type */
+  HOWTO (R_860_SPGOT0,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -515,9 +515,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_LOGOT1,         /* type */
+  HOWTO (R_860_LOGOT1,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -529,9 +529,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_SPGOT1,         /* type */
+  HOWTO (R_860_SPGOT1,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -543,9 +543,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_LOGOTOFF0,        /* type */
+  HOWTO (R_860_LOGOTOFF0,       /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
@@ -557,9 +557,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_SPGOTOFF0,        /* type */
+  HOWTO (R_860_SPGOTOFF0,       /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
@@ -571,9 +571,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_LOGOTOFF1,        /* type */
+  HOWTO (R_860_LOGOTOFF1,       /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
@@ -585,7 +585,7 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
   HOWTO (R_860_SPGOTOFF1,       /* type */
         0,                     /* rightshift */
@@ -599,9 +599,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_LOGOTOFF2,        /* type */
+  HOWTO (R_860_LOGOTOFF2,       /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
@@ -613,9 +613,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_LOGOTOFF3,        /* type */
+  HOWTO (R_860_LOGOTOFF3,       /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
@@ -627,9 +627,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_LOPC,           /* type */
+  HOWTO (R_860_LOPC,           /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -641,9 +641,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0xffff,                /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_HIGHADJ,                /* type */
+  HOWTO (R_860_HIGHADJ,                /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -655,9 +655,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0xffff,                /* src_mask */
         0xffff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_HAGOT,          /* type */
+  HOWTO (R_860_HAGOT,          /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -669,9 +669,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_HAGOTOFF,        /* type */
+  HOWTO (R_860_HAGOTOFF,       /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
@@ -683,9 +683,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_HAPC,           /* type */
+  HOWTO (R_860_HAPC,           /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -697,9 +697,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0xffff,                /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_HIGH,           /* type */
+  HOWTO (R_860_HIGH,           /* type */
         16,                    /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -711,9 +711,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0xffff,                /* src_mask */
         0xffff,                /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 
-  HOWTO (R_860_HIGOT,          /* type */
+  HOWTO (R_860_HIGOT,          /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         16,                    /* bitsize */
@@ -725,9 +725,9 @@ static reloc_howto_type elf32_i860_howto_table [] =
         FALSE,                 /* partial_inplace */
         0,                     /* src_mask */
         0xffff,                /* dst_mask */
-        TRUE),                 /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
 
-  HOWTO (R_860_HIGOTOFF,        /* type */
+  HOWTO (R_860_HIGOTOFF,       /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         32,                    /* bitsize */
@@ -739,7 +739,7 @@ static reloc_howto_type elf32_i860_howto_table [] =
         TRUE,                  /* partial_inplace */
         0xffffffff,            /* src_mask */
         0xffffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        FALSE),                /* pcrel_offset */
 };
 \f
 static unsigned char elf_code_to_howto_index[R_860_max + 1];
@@ -758,7 +758,7 @@ lookup_howto (unsigned int rtype)
       memset (elf_code_to_howto_index, 0xff,
              sizeof (elf_code_to_howto_index));
       for (i = 0; i < howto_tbl_size; i++)
-        elf_code_to_howto_index[elf32_i860_howto_table[i].type] = i;
+       elf_code_to_howto_index[elf32_i860_howto_table[i].type] = i;
     }
 
   BFD_ASSERT (rtype <= R_860_max);
@@ -886,6 +886,23 @@ elf32_i860_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
   return lookup_howto (rtype);
 }
 
+static reloc_howto_type *
+elf32_i860_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
+                             const char *r_name)
+{
+  unsigned int i;
+
+  for (i = 0;
+       i < (sizeof (elf32_i860_howto_table)
+           / sizeof (elf32_i860_howto_table[0]));
+       i++)
+    if (elf32_i860_howto_table[i].name != NULL
+       && strcasecmp (elf32_i860_howto_table[i].name, r_name) == 0)
+      return &elf32_i860_howto_table[i];
+
+  return NULL;
+}
+
 /* Given a ELF reloc, return the matching HOWTO structure.  */
 static void
 elf32_i860_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
@@ -996,7 +1013,7 @@ elf32_i860_relocate_highadj (bfd *input_bfd,
   insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
 
   value += rel->r_addend;
-  value += 0x8000; 
+  value += 0x8000;
   value = ((value >> 16) & 0xffff);
 
   insn = (insn & 0xffff0000) | value;
@@ -1066,33 +1083,23 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
   Elf_Internal_Rela *rel;
   Elf_Internal_Rela *relend;
 
-  if (info->relocatable)
-    return TRUE;
-
   symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
   sym_hashes = elf_sym_hashes (input_bfd);
   relend     = relocs + input_section->reloc_count;
 
   for (rel = relocs; rel < relend; rel ++)
     {
-      reloc_howto_type *           howto;
-      unsigned long                r_symndx;
-      Elf_Internal_Sym *           sym;
-      asection *                   sec;
+      reloc_howto_type *          howto;
+      unsigned long               r_symndx;
+      Elf_Internal_Sym *          sym;
+      asection *                  sec;
       struct elf_link_hash_entry * h;
-      bfd_vma                      relocation;
-      bfd_reloc_status_type        r;
-      const char *                 name = NULL;
-      int                          r_type;
+      bfd_vma                     relocation;
+      bfd_reloc_status_type       r;
+      const char *                name = NULL;
+      int                         r_type;
 
       r_type = ELF32_R_TYPE (rel->r_info);
-
-#if 0
-      if (   r_type == R_860_GNU_VTINHERIT
-         || r_type == R_860_GNU_VTENTRY)
-       continue;
-#endif
-
       r_symndx = ELF32_R_SYM (rel->r_info);
 
       howto = lookup_howto ((unsigned) ELF32_R_TYPE (rel->r_info));
@@ -1112,14 +1119,21 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
        }
       else
        {
-         bfd_boolean unresolved_reloc, warned;
+         bfd_boolean unresolved_reloc, warned, ignored;
 
          RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
                                   r_symndx, symtab_hdr, sym_hashes,
                                   h, sec, relocation,
-                                  unresolved_reloc, warned);
+                                  unresolved_reloc, warned, ignored);
        }
 
+      if (sec != NULL && discarded_section (sec))
+       RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+                                        rel, 1, relend, howto, 0, contents);
+
+      if (bfd_link_relocatable (info))
+       continue;
+
       switch (r_type)
        {
        default:
@@ -1182,13 +1196,13 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
          switch (r)
            {
            case bfd_reloc_overflow:
-             r = info->callbacks->reloc_overflow
-               (info, name, howto->name, (bfd_vma) 0,
-                input_bfd, input_section, rel->r_offset);
+             (*info->callbacks->reloc_overflow)
+               (info, (h ? &h->root : NULL), name, howto->name,
+                (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
              break;
 
            case bfd_reloc_undefined:
-             r = info->callbacks->undefined_symbol
+             (*info->callbacks->undefined_symbol)
                (info, name, input_bfd, input_section, rel->r_offset, TRUE);
              break;
 
@@ -1210,11 +1224,8 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
            }
 
          if (msg)
-           r = info->callbacks->warning
-             (info, msg, name, input_bfd, input_section, rel->r_offset);
-
-         if (! r)
-           return FALSE;
+           (*info->callbacks->warning) (info, msg, name, input_bfd,
+                                        input_section, rel->r_offset);
        }
     }
 
@@ -1235,19 +1246,20 @@ elf32_i860_is_local_label_name (bfd *abfd, const char *name)
   return _bfd_elf_is_local_label_name (abfd, name);
 }
 \f
-#define TARGET_BIG_SYM         bfd_elf32_i860_vec
+#define TARGET_BIG_SYM         i860_elf32_vec
 #define TARGET_BIG_NAME                "elf32-i860"
-#define TARGET_LITTLE_SYM      bfd_elf32_i860_little_vec
+#define TARGET_LITTLE_SYM      i860_elf32_le_vec
 #define TARGET_LITTLE_NAME     "elf32-i860-little"
 #define ELF_ARCH               bfd_arch_i860
 #define ELF_MACHINE_CODE       EM_860
 #define ELF_MAXPAGESIZE                4096
 
 #define elf_backend_rela_normal                        1
-#define elf_info_to_howto_rel                   NULL
+#define elf_info_to_howto_rel                  NULL
 #define elf_info_to_howto                      elf32_i860_info_to_howto_rela
 #define elf_backend_relocate_section           elf32_i860_relocate_section
 #define bfd_elf32_bfd_reloc_type_lookup                elf32_i860_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup        elf32_i860_reloc_name_lookup
 #define bfd_elf32_bfd_is_local_label_name      elf32_i860_is_local_label_name
 
 #include "elf32-target.h"
This page took 0.052007 seconds and 4 git commands to generate.