Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / elfcode.h
index 481b007232e4f901c06c443218a32583ed912320..7223dd3756db9921647f51474ea6b2b004f3ee06 100644 (file)
@@ -1,5 +1,5 @@
 /* ELF executable support for BFD.
-   Copyright (C) 1991-2015 Free Software Foundation, Inc.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
    in "UNIX System V Release 4, Programmers Guide: ANSI C and
@@ -605,13 +605,10 @@ elf_object_p (bfd *abfd)
 
   if (i_ehdrp->e_shoff != 0)
     {
-      bfd_signed_vma where = i_ehdrp->e_shoff;
-
-      if (where != (file_ptr) where)
-       goto got_wrong_format_error;
+      file_ptr where = (file_ptr) i_ehdrp->e_shoff;
 
       /* Seek to the section header table in the file.  */
-      if (bfd_seek (abfd, (file_ptr) where, SEEK_SET) != 0)
+      if (bfd_seek (abfd, where, SEEK_SET) != 0)
        goto got_no_match;
 
       /* Read the first section header at index 0, and convert to internal
@@ -657,19 +654,17 @@ elf_object_p (bfd *abfd)
            goto got_wrong_format_error;
 
          where += (i_ehdrp->e_shnum - 1) * sizeof (x_shdr);
-         if (where != (file_ptr) where)
-           goto got_wrong_format_error;
          if ((bfd_size_type) where <= i_ehdrp->e_shoff)
            goto got_wrong_format_error;
 
-         if (bfd_seek (abfd, (file_ptr) where, SEEK_SET) != 0)
+         if (bfd_seek (abfd, where, SEEK_SET) != 0)
            goto got_no_match;
          if (bfd_bread (&x_shdr, sizeof x_shdr, abfd) != sizeof (x_shdr))
            goto got_no_match;
 
          /* Back to where we were.  */
          where = i_ehdrp->e_shoff + sizeof (x_shdr);
-         if (bfd_seek (abfd, (file_ptr) where, SEEK_SET) != 0)
+         if (bfd_seek (abfd, where, SEEK_SET) != 0)
            goto got_no_match;
        }
     }
@@ -681,6 +676,10 @@ elf_object_p (bfd *abfd)
       Elf_Internal_Shdr *shdrp;
       unsigned int num_sec;
 
+#ifndef BFD64
+      if (i_ehdrp->e_shnum > ((bfd_size_type) -1) / sizeof (*i_shdrp))
+       goto got_wrong_format_error;
+#endif
       amt = sizeof (*i_shdrp) * i_ehdrp->e_shnum;
       i_shdrp = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt);
       if (!i_shdrp)
@@ -712,7 +711,7 @@ elf_object_p (bfd *abfd)
              switch (ebd->elf_machine_code)
                {
                case EM_386:
-               case EM_486:
+               case EM_IAMCU:
                case EM_X86_64:
                case EM_OLD_SPARCV9:
                case EM_SPARC32PLUS:
@@ -771,7 +770,11 @@ elf_object_p (bfd *abfd)
       Elf_Internal_Phdr *i_phdr;
       unsigned int i;
 
-      amt = i_ehdrp->e_phnum * sizeof (Elf_Internal_Phdr);
+#ifndef BFD64
+      if (i_ehdrp->e_phnum > ((bfd_size_type) -1) / sizeof (*i_phdr))
+       goto got_wrong_format_error;
+#endif
+      amt = i_ehdrp->e_phnum * sizeof (*i_phdr);
       elf_tdata (abfd)->phdr = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt);
       if (elf_tdata (abfd)->phdr == NULL)
        goto got_no_match;
@@ -1214,10 +1217,9 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic)
       for (isym = isymbuf + 1, sym = symbase; isym < isymend; isym++, sym++)
        {
          memcpy (&sym->internal_elf_sym, isym, sizeof (Elf_Internal_Sym));
-         sym->symbol.the_bfd = abfd;
 
+         sym->symbol.the_bfd = abfd;
          sym->symbol.name = bfd_elf_sym_name (abfd, hdr, isym, NULL);
-
          sym->symbol.value = isym->st_value;
 
          if (isym->st_shndx == SHN_UNDEF)
This page took 0.027201 seconds and 4 git commands to generate.