ubsan: bpf: left shift cannot be represented in type 'DI' (aka 'long')
[deliverable/binutils-gdb.git] / bfd / coff-tic80.c
index a8ade33ba9c7cf0449a5a0a47a209ba9c30f4c89..9e49a166a68529b63f0025f6ea9ac3ea95eab6e0 100644 (file)
@@ -1,32 +1,40 @@
 /* BFD back-end for Texas Instruments TMS320C80 Multimedia Video Processor (MVP).
-   Copyright 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1996-2019 Free Software Foundation, Inc.
 
    Written by Fred Fish (fnf@cygnus.com)
 
    There is nothing new under the sun. This file draws a lot on other
    coff files.
 
-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, 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, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
+#include "sysdep.h"
 #include "bfd.h"
 #include "bfdlink.h"
-#include "sysdep.h"
 #include "libbfd.h"
+#ifdef _CONST
+/* Newlib-based hosts define _CONST as a STDC-safe alias for const,
+  but to the tic80 toolchain it means something altogether different.
+  Since sysdep.h will have pulled in stdio.h and hence _ansi.h which
+  contains this definition, we must undef it before including the
+  tic80-specific definition. */
+#undef _CONST
+#endif /* _CONST */
 #include "coff/tic80.h"
 #include "coff/internal.h"
 #include "libcoff.h"
@@ -34,23 +42,21 @@ Boston, MA 02111-1307, USA.  */
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
 #define COFF_ALIGN_IN_SECTION_HEADER 1
 #define COFF_ALIGN_IN_SFLAGS 1
+#define COFF_ENCODE_ALIGNMENT(S,X) ((S).s_flags |= (((unsigned)(X) & 0xf) << 8))
+#define COFF_DECODE_ALIGNMENT(X) (((X) >> 8) & 0xf)
 
-#define GET_SCNHDR_FLAGS bfd_h_get_16
-#define PUT_SCNHDR_FLAGS bfd_h_put_16
+#define GET_SCNHDR_FLAGS H_GET_16
+#define PUT_SCNHDR_FLAGS H_PUT_16
 
-static void rtype2howto
-  PARAMS ((arelent *cache_ptr, struct internal_reloc *dst));
 static bfd_reloc_status_type ppbase_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type glob15_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type glob16_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_reloc_status_type local16_reloc
-  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
-static boolean coff_tic80_relocate_section
-  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
-          struct internal_reloc *, struct internal_syment *, asection **));
+  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+
 
 static reloc_howto_type tic80_howto_table[] =
 {
@@ -59,295 +65,295 @@ static reloc_howto_type tic80_howto_table[] =
         0,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         32,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_bitfield,    /* complain_on_overflow */
         NULL,                          /* special_function */
         "RELLONG",                     /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0xffffffff,                    /* src_mask */
         0xffffffff,                    /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_MPPCR,                      /* type */
         2,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         32,                            /* bitsize */
-        true,                          /* pc_relative */
+        TRUE,                          /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_signed,      /* complain_on_overflow */
         NULL,                          /* special_function */
         "MPPCR",                       /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0xffffffff,                    /* src_mask */
         0xffffffff,                    /* dst_mask */
-        true),                         /* pcrel_offset */
+        TRUE),                         /* pcrel_offset */
 
   HOWTO (R_ABS,                                /* type */
         0,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         32,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_bitfield,    /* complain_on_overflow */
         NULL,                          /* special_function */
         "ABS",                         /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0xffffffff,                    /* src_mask */
         0xffffffff,                    /* dst_mask */
-        false),                                /* pcrel_offset */
+        FALSE),                                /* pcrel_offset */
 
   HOWTO (R_PPBASE,                     /* type */
         0,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         32,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         ppbase_reloc,                  /* special_function */
         "PPBASE",                      /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0xffffffff,                    /* src_mask */
         0xffffffff,                    /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPLBASE,                    /* type */
         0,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         32,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         ppbase_reloc,                  /* special_function */
         "PPLBASE",                     /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0xffffffff,                    /* src_mask */
         0xffffffff,                    /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PP15,                       /* type */
         0,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         6,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         glob15_reloc,                  /* special_function */
         "PP15",                        /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x1ffc0,                       /* src_mask */
         0x1ffc0,                       /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PP15W,                      /* type */
         2,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         6,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         glob15_reloc,                  /* special_function */
         "PP15W",                       /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x1ffc0,                       /* src_mask */
         0x1ffc0,                       /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PP15H,                      /* type */
         1,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         6,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         glob15_reloc,                  /* special_function */
         "PP15H",                       /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x1ffc0,                       /* src_mask */
         0x1ffc0,                       /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PP16B,                      /* type */
         0,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         16,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         6,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         glob16_reloc,                  /* special_function */
         "PP16B",                       /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x3ffc0,                       /* src_mask */
         0x3ffc0,                       /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPL15,                      /* type */
         0,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         NULL,                          /* special_function */
         "PPL15",                       /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x7fff,                        /* src_mask */
         0x7fff,                        /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPL15W,                     /* type */
         2,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         NULL,                          /* special_function */
         "PPL15W",                      /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x7fff,                        /* src_mask */
         0x7fff,                        /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPL15H,                     /* type */
         1,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         NULL,                          /* special_function */
         "PPL15H",                      /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x7fff,                        /* src_mask */
         0x7fff,                        /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPL16B,                     /* type */
         0,                             /* rightshift */
         2,                             /* size (0 = byte, 1 = short, 2 = long) */
         16,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         local16_reloc,                 /* special_function */
         "PPL16B",                      /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0xffff,                        /* src_mask */
         0xffff,                        /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPN15,                      /* type */
         0,                             /* rightshift */
         -2,                            /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         6,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         glob15_reloc,                  /* special_function */
         "PPN15",                       /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x1ffc0,                       /* src_mask */
         0x1ffc0,                       /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPN15W,                     /* type */
         2,                             /* rightshift */
         -2,                            /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         6,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         glob15_reloc,                  /* special_function */
         "PPN15W",                      /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x1ffc0,                       /* src_mask */
         0x1ffc0,                       /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPN15H,                     /* type */
         1,                             /* rightshift */
         -2,                            /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         6,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         glob15_reloc,                  /* special_function */
         "PPN15H",                      /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x1ffc0,                       /* src_mask */
         0x1ffc0,                       /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPN16B,                     /* type */
         0,                             /* rightshift */
         -2,                            /* size (0 = byte, 1 = short, 2 = long) */
         16,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         6,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         glob16_reloc,                  /* special_function */
         "PPN16B",                      /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x3ffc0,                       /* src_mask */
         0x3ffc0,                       /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPLN15,                     /* type */
         0,                             /* rightshift */
         -2,                            /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         NULL,                          /* special_function */
         "PPLN15",                      /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x7fff,                        /* src_mask */
         0x7fff,                        /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPLN15W,                    /* type */
         2,                             /* rightshift */
         -2,                            /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         NULL,                          /* special_function */
         "PPLN15W",                     /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x7fff,                        /* src_mask */
         0x7fff,                        /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPLN15H,                    /* type */
         1,                             /* rightshift */
         -2,                            /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         NULL,                          /* special_function */
         "PPLN15H",                     /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0x7fff,                        /* src_mask */
         0x7fff,                        /* dst_mask */
-        false),                        /* pcrel_offset */
+        FALSE),                        /* pcrel_offset */
 
   HOWTO (R_PPLN16B,                    /* type */
         0,                             /* rightshift */
         -2,                            /* size (0 = byte, 1 = short, 2 = long) */
         15,                            /* bitsize */
-        false,                         /* pc_relative */
+        FALSE,                         /* pc_relative */
         0,                             /* bitpos */
         complain_overflow_dont,        /* complain_on_overflow */
         local16_reloc,                 /* special_function */
         "PPLN16B",                     /* name */
-        true,                          /* partial_inplace */
+        TRUE,                          /* partial_inplace */
         0xffff,                        /* src_mask */
         0xffff,                        /* dst_mask */
-        false)                         /* pcrel_offset */
+        FALSE)                         /* pcrel_offset */
 };
 \f
 /* Special relocation functions, used when the output file is not
@@ -357,15 +363,13 @@ static reloc_howto_type tic80_howto_table[] =
    relocations.  */
 
 static bfd_reloc_status_type
-ppbase_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-             error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol_in ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+ppbase_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+             arelent *reloc_entry ATTRIBUTE_UNUSED,
+             asymbol *symbol_in ATTRIBUTE_UNUSED,
+             void * data ATTRIBUTE_UNUSED,
+             asection *input_section ATTRIBUTE_UNUSED,
+             bfd *output_bfd ATTRIBUTE_UNUSED,
+             char **error_message ATTRIBUTE_UNUSED)
 {
   /* FIXME.  */
   abort ();
@@ -374,15 +378,13 @@ ppbase_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
 /* This special function is used for the global 15 bit relocations.  */
 
 static bfd_reloc_status_type
-glob15_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-             error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol_in ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+glob15_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+             arelent *reloc_entry ATTRIBUTE_UNUSED,
+             asymbol *symbol_in ATTRIBUTE_UNUSED,
+             void * data ATTRIBUTE_UNUSED,
+             asection *input_section ATTRIBUTE_UNUSED,
+             bfd *output_bfd ATTRIBUTE_UNUSED,
+             char **error_message ATTRIBUTE_UNUSED)
 {
   /* FIXME.  */
   abort ();
@@ -391,15 +393,13 @@ glob15_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
 /* This special function is used for the global 16 bit relocations.  */
 
 static bfd_reloc_status_type
-glob16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-             error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol_in ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+glob16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+             arelent *reloc_entry ATTRIBUTE_UNUSED,
+             asymbol *symbol_in ATTRIBUTE_UNUSED,
+             void * data ATTRIBUTE_UNUSED,
+             asection *input_section ATTRIBUTE_UNUSED,
+             bfd *output_bfd ATTRIBUTE_UNUSED,
+             char **error_message ATTRIBUTE_UNUSED)
 {
   /* FIXME.  */
   abort ();
@@ -408,15 +408,13 @@ glob16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
 /* This special function is used for the local 16 bit relocations.  */
 
 static bfd_reloc_status_type
-local16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
-             error_message)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     arelent *reloc_entry ATTRIBUTE_UNUSED;
-     asymbol *symbol_in ATTRIBUTE_UNUSED;
-     PTR data ATTRIBUTE_UNUSED;
-     asection *input_section ATTRIBUTE_UNUSED;
-     bfd *output_bfd ATTRIBUTE_UNUSED;
-     char **error_message ATTRIBUTE_UNUSED;
+local16_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+              arelent *reloc_entry ATTRIBUTE_UNUSED,
+              asymbol *symbol_in ATTRIBUTE_UNUSED,
+              void * data ATTRIBUTE_UNUSED,
+              asection *input_section ATTRIBUTE_UNUSED,
+              bfd *output_bfd ATTRIBUTE_UNUSED,
+              char **error_message ATTRIBUTE_UNUSED)
 {
   /* FIXME.  */
   abort ();
@@ -424,12 +422,10 @@ local16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
 \f
 /* Code to turn an external r_type into a pointer to an entry in the howto_table.
    If passed an r_type we don't recognize the abort rather than silently failing
-   to generate an output file. */
+   to generate an output file.  */
 
 static void
-rtype2howto (cache_ptr, dst)
-     arelent *cache_ptr;
-     struct internal_reloc *dst;
+rtype2howto (arelent *cache_ptr, struct internal_reloc *dst)
 {
   unsigned int i;
 
@@ -442,8 +438,8 @@ rtype2howto (cache_ptr, dst)
        }
     }
 
-  (*_bfd_error_handler) (_("Unrecognized reloc type 0x%x"),
-                        (unsigned int) dst->r_type);
+  _bfd_error_handler (_("unsupported relocation type %#x"),
+                     (unsigned int) dst->r_type);
   cache_ptr->howto = tic80_howto_table + 0;
 }
 
@@ -451,13 +447,12 @@ rtype2howto (cache_ptr, dst)
 #define coff_rtype_to_howto coff_tic80_rtype_to_howto
 
 static reloc_howto_type *
-coff_tic80_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
-     bfd *abfd ATTRIBUTE_UNUSED;
-     asection *sec;
-     struct internal_reloc *rel;
-     struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
-     struct internal_syment *sym ATTRIBUTE_UNUSED;
-     bfd_vma *addendp;
+coff_tic80_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
+                          asection *sec,
+                          struct internal_reloc *rel,
+                          struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
+                          struct internal_syment *sym ATTRIBUTE_UNUSED,
+                          bfd_vma *addendp)
 {
   arelent genrel;
 
@@ -465,7 +460,7 @@ coff_tic80_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
     {
       /* This is a TI "internal relocation", which means that the relocation
         amount is the amount by which the current section is being relocated
-        in the output section. */
+        in the output section.  */
       *addendp = (sec -> output_section -> vma + sec -> output_offset) - sec -> vma;
     }
   RTYPE2HOWTO (&genrel, rel);
@@ -481,18 +476,15 @@ coff_tic80_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
 /* We need a special relocation routine to handle the PP relocs.  Most
    of this is a copy of _bfd_coff_generic_relocate_section.  */
 
-static boolean
-coff_tic80_relocate_section (output_bfd, info, input_bfd,
-                            input_section, contents, relocs, syms,
-                            sections)
-     bfd *output_bfd;
-     struct bfd_link_info *info;
-     bfd *input_bfd;
-     asection *input_section;
-     bfd_byte *contents;
-     struct internal_reloc *relocs;
-     struct internal_syment *syms;
-     asection **sections;
+static bfd_boolean
+coff_tic80_relocate_section (bfd *output_bfd,
+                            struct bfd_link_info *info,
+                            bfd *input_bfd,
+                            asection *input_section,
+                            bfd_byte *contents,
+                            struct internal_reloc *relocs,
+                            struct internal_syment *syms,
+                            asection **sections)
 {
   struct internal_reloc *rel;
   struct internal_reloc *relend;
@@ -518,15 +510,15 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd,
          sym = NULL;
        }
       else
-       {    
+       {
          h = obj_coff_sym_hashes (input_bfd)[symndx];
          sym = syms + symndx;
        }
 
       /* COFF treats common symbols in one of two ways.  Either the
-         size of the symbol is included in the section contents, or it
-         is not.  We assume that the size is not included, and force
-         the rtype_to_howto function to adjust the addend as needed.  */
+        size of the symbol is included in the section contents, or it
+        is not.  We assume that the size is not included, and force
+        the rtype_to_howto function to adjust the addend as needed.  */
 
       if (sym != NULL && sym->n_scnum != 0)
        addend = - sym->n_value;
@@ -536,7 +528,7 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd,
       howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h,
                                       sym, &addend);
       if (howto == NULL)
-       return false;
+       return FALSE;
 
       val = 0;
 
@@ -552,7 +544,7 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd,
          else
            {
              sec = sections[symndx];
-              val = (sec->output_section->vma
+             val = (sec->output_section->vma
                     + sec->output_offset
                     + sym->n_value);
              if (! obj_pe (output_bfd))
@@ -572,20 +564,17 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd,
                     + sec->output_offset);
              }
 
-         else if (! info->relocateable)
-           {
-             if (! ((*info->callbacks->undefined_symbol)
-                    (info, h->root.root.string, input_bfd, input_section,
-                     rel->r_vaddr - input_section->vma, true)))
-               return false;
-           }
+         else if (! bfd_link_relocatable (info))
+           (*info->callbacks->undefined_symbol)
+             (info, h->root.root.string, input_bfd, input_section,
+              rel->r_vaddr - input_section->vma, TRUE);
        }
 
       addr = rel->r_vaddr - input_section->vma;
 
       /* FIXME: This code assumes little endian, but the PP can
-         apparently be bi-endian.  I don't know if the bi-endianness
-         applies to the instruction set or just to the data.  */
+        apparently be bi-endian.  I don't know if the bi-endianness
+        applies to the instruction set or just to the data.  */
       switch (howto->type)
        {
        default:
@@ -649,7 +638,7 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd,
            contents[addr + 1] |= hold & 0x80;
            break;
          }
-       
+
        case R_PPBASE:
          /* Parameter RAM is from 0x1000000 to 0x1000800.  */
          contents[addr] &=~ 0x3;
@@ -678,12 +667,11 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd,
        case bfd_reloc_ok:
          break;
        case bfd_reloc_outofrange:
-         (*_bfd_error_handler)
-           (_("%s: bad reloc address 0x%lx in section `%s'"),
-            bfd_get_filename (input_bfd),
-            (unsigned long) rel->r_vaddr,
-            bfd_get_section_name (input_bfd, input_section));
-         return false;
+         _bfd_error_handler
+           /* xgettext: c-format */
+           (_("%pB: bad reloc address %#" PRIx64 " in section `%pA'"),
+            input_bfd, (uint64_t) rel->r_vaddr, input_section);
+         return FALSE;
        case bfd_reloc_overflow:
          {
            const char *name;
@@ -692,27 +680,32 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd,
            if (symndx == -1)
              name = "*ABS*";
            else if (h != NULL)
-             name = h->root.root.string;
+             name = NULL;
            else
              {
                name = _bfd_coff_internal_syment_name (input_bfd, sym, buf);
                if (name == NULL)
-                 return false;
+                 return FALSE;
              }
 
-           if (! ((*info->callbacks->reloc_overflow)
-                  (info, name, howto->name, (bfd_vma) 0, input_bfd,
-                   input_section, rel->r_vaddr - input_section->vma)))
-             return false;
+           (*info->callbacks->reloc_overflow)
+             (info, (h ? &h->root : NULL), name, howto->name,
+              (bfd_vma) 0, input_bfd, input_section,
+              rel->r_vaddr - input_section->vma);
          }
        }
     }
-  return true;
+  return TRUE;
 }
 \f
 #define TIC80COFF 1            /* Customize coffcode.h */
 #undef C_AUTOARG               /* Clashes with TIc80's C_UEXT */
 #undef C_LASTENT               /* Clashes with TIc80's C_STATLAB */
+
+#ifndef bfd_pe_print_pdata
+#define bfd_pe_print_pdata     NULL
+#endif
+
 #include "coffcode.h"
 
-CREATE_LITTLE_COFF_TARGET_VEC (tic80coff_vec, "coff-tic80", D_PAGED, 0, '_', NULL)
+CREATE_LITTLE_COFF_TARGET_VEC (tic80_coff_vec, "coff-tic80", D_PAGED, 0, '_', NULL, COFF_SWAP_TABLE)
This page took 0.03629 seconds and 4 git commands to generate.