ubsan: alpha-coff: signed integer overflow
[deliverable/binutils-gdb.git] / bfd / coff-alpha.c
index c47fe3fc43088486ed5d943b373744d86878753e..4b39bcc999dc0d49d3747bc9df5e80f5360a9fb8 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD back-end for ALPHA Extended-Coff files.
-   Copyright (C) 1993-2018 Free Software Foundation, Inc.
+   Copyright (C) 1993-2020 Free Software Foundation, Inc.
    Modified from coff-mips.c by Steve Chamberlain <sac@cygnus.com> and
    Ian Lance Taylor <ian@cygnus.com>.
 
@@ -423,10 +423,10 @@ alpha_ecoff_object_p (bfd *abfd)
        {
          bfd_size_type size;
 
-         size = sec->line_filepos * 8;
+         size = (bfd_size_type) sec->line_filepos * 8;
          BFD_ASSERT (size == sec->size
                      || size + 8 == sec->size);
-         if (! bfd_set_section_size (abfd, sec, size))
+         if (!bfd_set_section_size (sec, size))
            return NULL;
        }
     }
@@ -447,8 +447,8 @@ alpha_ecoff_bad_format_hook (bfd *abfd ATTRIBUTE_UNUSED,
 
   if (ALPHA_ECOFF_COMPRESSEDMAG (*internal_f))
     _bfd_error_handler
-      (_("%B: Cannot handle compressed Alpha binaries.\n"
-        "   Use compiler flags, or objZ, to generate uncompressed binaries."),
+      (_("%pB: cannot handle compressed Alpha binaries; "
+        "use compiler flags, or objZ, to generate uncompressed binaries"),
        abfd);
 
   return FALSE;
@@ -598,9 +598,8 @@ alpha_adjust_reloc_in (bfd *abfd,
   if (intern->r_type > ALPHA_R_GPVALUE)
     {
       /* xgettext:c-format */
-      _bfd_error_handler
-       (_("%B: unknown/unsupported relocation type %d"),
-        abfd, intern->r_type);
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                         abfd, intern->r_type);
       bfd_set_error (bfd_error_bad_value);
       rptr->addend = 0;
       rptr->howto  = NULL;
@@ -1238,7 +1237,7 @@ alpha_convert_external_reloc (bfd *output_bfd ATTRIBUTE_UNUSED,
 
       /* Compute a new r_symndx value.  */
       hsec = h->root.u.def.section;
-      name = bfd_get_section_name (output_bfd, hsec->output_section);
+      name = bfd_section_name (hsec->output_section);
 
       r_symndx = (unsigned long) -1;
       switch (name[1])
@@ -1499,24 +1498,21 @@ alpha_relocate_section (bfd *output_bfd,
       switch (r_type)
        {
        case ALPHA_R_GPRELHIGH:
-         _bfd_error_handler
-           (_("%B: unsupported relocation: ALPHA_R_GPRELHIGH"),
-            input_bfd);
+         _bfd_error_handler (_("%pB: %s unsupported"),
+                             input_bfd, "ALPHA_R_GPRELHIGH");
          bfd_set_error (bfd_error_bad_value);
          continue;
 
        case ALPHA_R_GPRELLOW:
-         _bfd_error_handler
-           (_("%B: unsupported relocation: ALPHA_R_GPRELLOW"),
-            input_bfd);
+         _bfd_error_handler (_("%pB: %s unsupported"),
+                             input_bfd, "ALPHA_R_GPRELLOW");
          bfd_set_error (bfd_error_bad_value);
          continue;
 
        default:
-         _bfd_error_handler
-           /* xgettext:c-format */
-           (_("%B: unknown relocation type %d"),
-            input_bfd, (int) r_type);
+         /* xgettext:c-format */
+         _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                             input_bfd, (int) r_type);
          bfd_set_error (bfd_error_bad_value);
          continue;
 
@@ -1932,8 +1928,7 @@ alpha_relocate_section (bfd *output_bfd,
                    if (r_extern)
                      name = sym_hashes[r_symndx]->root.root.string;
                    else
-                     name = bfd_section_name (input_bfd,
-                                              symndx_to_section[r_symndx]);
+                     name = bfd_section_name (symndx_to_section[r_symndx]);
                    (*info->callbacks->reloc_overflow)
                      (info, NULL, name, alpha_howto_table[r_type].name,
                       (bfd_vma) 0, input_bfd, input_section,
@@ -2031,7 +2026,10 @@ alpha_ecoff_read_ar_hdr (bfd *abfd)
       if (bfd_seek (abfd, (file_ptr) FILHSZ, SEEK_CUR) != 0
          || bfd_bread (ab, (bfd_size_type) 8, abfd) != 8
          || bfd_seek (abfd, (file_ptr) (- (FILHSZ + 8)), SEEK_CUR) != 0)
-       return NULL;
+       {
+         free (ret);
+         return NULL;
+       }
 
       ret->parsed_size = H_GET_64 (abfd, ab);
     }
@@ -2218,6 +2216,67 @@ alpha_ecoff_get_elt_at_index (bfd *abfd, symindex sym_index)
   entry = bfd_ardata (abfd)->symdefs + sym_index;
   return alpha_ecoff_get_elt_at_filepos (abfd, entry->file_offset);
 }
+
+static void
+alpha_ecoff_swap_coff_aux_in (bfd *abfd ATTRIBUTE_UNUSED,
+                             void *ext1 ATTRIBUTE_UNUSED,
+                             int type ATTRIBUTE_UNUSED,
+                             int in_class ATTRIBUTE_UNUSED,
+                             int indx ATTRIBUTE_UNUSED,
+                             int numaux ATTRIBUTE_UNUSED,
+                             void *in1 ATTRIBUTE_UNUSED)
+{
+}
+
+static void
+alpha_ecoff_swap_coff_sym_in (bfd *abfd ATTRIBUTE_UNUSED,
+                             void *ext1 ATTRIBUTE_UNUSED,
+                             void *in1 ATTRIBUTE_UNUSED)
+{
+}
+
+static void
+alpha_ecoff_swap_coff_lineno_in (bfd *abfd ATTRIBUTE_UNUSED,
+                                void *ext1 ATTRIBUTE_UNUSED,
+                                void *in1 ATTRIBUTE_UNUSED)
+{
+}
+
+static unsigned int
+alpha_ecoff_swap_coff_aux_out (bfd *abfd ATTRIBUTE_UNUSED,
+                              void *inp ATTRIBUTE_UNUSED,
+                              int type ATTRIBUTE_UNUSED,
+                              int in_class ATTRIBUTE_UNUSED,
+                              int indx ATTRIBUTE_UNUSED,
+                              int numaux ATTRIBUTE_UNUSED,
+                              void *extp ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+static unsigned int
+alpha_ecoff_swap_coff_sym_out (bfd *abfd ATTRIBUTE_UNUSED,
+                              void *inp ATTRIBUTE_UNUSED,
+                              void *extp ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+static unsigned int
+alpha_ecoff_swap_coff_lineno_out (bfd *abfd ATTRIBUTE_UNUSED,
+                                 void *inp ATTRIBUTE_UNUSED,
+                                 void *extp ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
+
+static unsigned int
+alpha_ecoff_swap_coff_reloc_out (bfd *abfd ATTRIBUTE_UNUSED,
+                                void *inp ATTRIBUTE_UNUSED,
+                                void *extp ATTRIBUTE_UNUSED)
+{
+  return 0;
+}
 \f
 /* This is the ECOFF backend structure.  The backend field of the
    target vector points to this.  */
@@ -2226,13 +2285,10 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
 {
   /* COFF backend structure.  */
   {
-    (void (*) (bfd *, void *, int, int, int, int, void *)) bfd_void_any, /* aux_in */
-    (void (*) (bfd *, void *, void *)) bfd_void_any, /* sym_in */
-    (void (*) (bfd *, void *, void *)) bfd_void_any, /* lineno_in */
-    (unsigned (*) (bfd *, void *, int, int, int, int, void *)) bfd_0u_any,/*aux_out*/
-    (unsigned (*) (bfd *, void *, void *)) bfd_0u_any, /* sym_out */
-    (unsigned (*) (bfd *, void *, void *)) bfd_0u_any, /* lineno_out */
-    (unsigned (*) (bfd *, void *, void *)) bfd_0u_any, /* reloc_out */
+    alpha_ecoff_swap_coff_aux_in, alpha_ecoff_swap_coff_sym_in,
+    alpha_ecoff_swap_coff_lineno_in, alpha_ecoff_swap_coff_aux_out,
+    alpha_ecoff_swap_coff_sym_out, alpha_ecoff_swap_coff_lineno_out,
+    alpha_ecoff_swap_coff_reloc_out,
     alpha_ecoff_swap_filehdr_out, alpha_ecoff_swap_aouthdr_out,
     alpha_ecoff_swap_scnhdr_out,
     FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE,
@@ -2336,10 +2392,12 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
 #define _bfd_ecoff_bfd_gc_sections bfd_generic_gc_sections
 #define _bfd_ecoff_bfd_merge_sections bfd_generic_merge_sections
 #define _bfd_ecoff_bfd_is_group_section bfd_generic_is_group_section
+#define _bfd_ecoff_bfd_group_name bfd_generic_group_name
 #define _bfd_ecoff_bfd_discard_group bfd_generic_discard_group
 #define _bfd_ecoff_section_already_linked \
   _bfd_coff_section_already_linked
 #define _bfd_ecoff_bfd_define_common_symbol bfd_generic_define_common_symbol
+#define _bfd_ecoff_bfd_link_hide_symbol _bfd_generic_link_hide_symbol
 #define _bfd_ecoff_bfd_define_start_stop    bfd_generic_define_start_stop
 #define _bfd_ecoff_bfd_link_check_relocs    _bfd_generic_link_check_relocs
 
@@ -2353,9 +2411,9 @@ const bfd_target alpha_ecoff_le_vec =
   BFD_ENDIAN_LITTLE,           /* data byte order is little */
   BFD_ENDIAN_LITTLE,           /* header byte order is little */
 
-  (HAS_RELOC | EXEC_P |                /* object flags */
-   HAS_LINENO | HAS_DEBUG |
-   HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
+  (HAS_RELOC | EXEC_P          /* object flags */
+   | HAS_LINENO | HAS_DEBUG
+   HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
 
   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
   0,                           /* leading underscore */
@@ -2369,24 +2427,36 @@ const bfd_target alpha_ecoff_le_vec =
      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
 
-  {_bfd_dummy_target, alpha_ecoff_object_p, /* bfd_check_format */
-     bfd_generic_archive_p, _bfd_dummy_target},
-  {bfd_false, _bfd_ecoff_mkobject,  /* bfd_set_format */
-     _bfd_generic_mkarchive, bfd_false},
-  {bfd_false, _bfd_ecoff_write_object_contents, /* bfd_write_contents */
-     _bfd_write_archive_contents, bfd_false},
-
-     BFD_JUMP_TABLE_GENERIC (_bfd_ecoff),
-     BFD_JUMP_TABLE_COPY (_bfd_ecoff),
-     BFD_JUMP_TABLE_CORE (_bfd_nocore),
-     BFD_JUMP_TABLE_ARCHIVE (alpha_ecoff),
-     BFD_JUMP_TABLE_SYMBOLS (_bfd_ecoff),
-     BFD_JUMP_TABLE_RELOCS (_bfd_ecoff),
-     BFD_JUMP_TABLE_WRITE (_bfd_ecoff),
-     BFD_JUMP_TABLE_LINK (_bfd_ecoff),
-     BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+  {                            /* bfd_check_format */
+    _bfd_dummy_target,
+    alpha_ecoff_object_p,
+    bfd_generic_archive_p,
+    _bfd_dummy_target
+  },
+  {                            /* bfd_set_format */
+    _bfd_bool_bfd_false_error,
+    _bfd_ecoff_mkobject,
+    _bfd_generic_mkarchive,
+    _bfd_bool_bfd_false_error
+  },
+  {                            /* bfd_write_contents */
+    _bfd_bool_bfd_false_error,
+    _bfd_ecoff_write_object_contents,
+    _bfd_write_archive_contents,
+    _bfd_bool_bfd_false_error
+  },
+
+  BFD_JUMP_TABLE_GENERIC (_bfd_ecoff),
+  BFD_JUMP_TABLE_COPY (_bfd_ecoff),
+  BFD_JUMP_TABLE_CORE (_bfd_nocore),
+  BFD_JUMP_TABLE_ARCHIVE (alpha_ecoff),
+  BFD_JUMP_TABLE_SYMBOLS (_bfd_ecoff),
+  BFD_JUMP_TABLE_RELOCS (_bfd_ecoff),
+  BFD_JUMP_TABLE_WRITE (_bfd_ecoff),
+  BFD_JUMP_TABLE_LINK (_bfd_ecoff),
+  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
 
   NULL,
 
-  & alpha_ecoff_backend_data
+  &alpha_ecoff_backend_data
 };
This page took 0.029214 seconds and 4 git commands to generate.