diff options
author | Alan Modra <amodra@bigpond.net.au> | 2008-05-10 01:58:17 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2008-05-10 01:58:17 +0000 |
commit | b533533ec4d7480880aff95a3863c8e46c539a7e (patch) | |
tree | 919b827de40eecad47b27ddf37c21a65c09fc65e /bfd | |
parent | 2a03fa7a39f2d63322fe349e34924d31a91f8346 (diff) | |
download | binutils-redhat-b533533ec4d7480880aff95a3863c8e46c539a7e.tar.gz |
* elfcore.h (elf_core_file_p): Warn about core truncation.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 4 | ||||
-rw-r--r-- | bfd/elfcore.h | 30 |
2 files changed, 32 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0e1ce2cda6..0949d1570a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2008-05-10 Paul Pluzhnikov <ppluzhnikov@google.com> + + * elfcore.h (elf_core_file_p): Warn about core truncation. + 2008-05-07 Bob Wilson <bob.wilson@acm.org> * elf32-xtensa.c (xtensa_property_section_name): New. diff --git a/bfd/elfcore.h b/bfd/elfcore.h index dbf9397572..9c51422624 100644 --- a/bfd/elfcore.h +++ b/bfd/elfcore.h @@ -1,6 +1,6 @@ /* ELF core file support for BFD. - Copyright 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007 - Free Software Foundation, Inc. + Copyright 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, + 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -227,6 +227,32 @@ elf_core_file_p (bfd *abfd) if (! bfd_section_from_phdr (abfd, i_phdrp + phindex, (int) phindex)) goto fail; + /* Check for core truncation. */ + { + bfd_size_type high = 0; + struct stat statbuf; + for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex) + { + Elf_Internal_Phdr *p = i_phdrp + phindex; + if (p->p_filesz) + { + bfd_size_type current = p->p_offset + p->p_filesz; + if (high < current) + high = current; + } + } + if (bfd_stat (abfd, &statbuf) == 0) + { + if ((bfd_size_type) statbuf.st_size < high) + { + (*_bfd_error_handler) + (_("Warning: %B is truncated: expected core file " + "size >= %lu, found: %lu."), + abfd, (unsigned long) high, (unsigned long) statbuf.st_size); + } + } + } + /* Save the entry point from the ELF header. */ bfd_get_start_address (abfd) = i_ehdrp->e_entry; |