aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf.c14
-rw-r--r--binutils/ChangeLog11
-rw-r--r--binutils/readelf.c14
4 files changed, 41 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 8a6c44f..9935a84 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2011-02-08 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/12467
+ * elf.c (assign_file_positions_for_load_sections): Set the program
+ header offset and entry size to zero if there are no program
+ headers.
+
2011-02-08 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (ppc64_elf_edit_toc): Don't segfault on NULL
diff --git a/bfd/elf.c b/bfd/elf.c
index 257cc8c..c77dced 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -4334,8 +4334,18 @@ assign_file_positions_for_load_sections (bfd *abfd,
header_pad = m->header_size;
}
- elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
- elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
+ if (alloc)
+ {
+ elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
+ elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
+ }
+ else
+ {
+ /* PR binutils/12467. */
+ elf_elfheader (abfd)->e_phoff = 0;
+ elf_elfheader (abfd)->e_phentsize = 0;
+ }
+
elf_elfheader (abfd)->e_phnum = alloc;
if (elf_tdata (abfd)->program_header_size == (bfd_size_type) -1)
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index bab4756..4a72f3d 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,14 @@
+2011-02-08 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/12467
+ * readelf.c (process_program_headers): Issue a warning if there
+ are no program headers but the file header has a non-zero program
+ header offset.
+ (process_section_headers): Issue a warning if there are no section
+ headers but the file header has a non-zero section header offset.
+ (process_section_groups): Reword the no section message so that it
+ can be distinguished from the one issued by process_section_headers.
+
2011-01-26 Jan Kratochvil <jan.kratochvil@redhat.com>
Doug Evans <dje@google.com>
diff --git a/binutils/readelf.c b/binutils/readelf.c
index af1a002..0607d89 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -3638,7 +3638,11 @@ process_program_headers (FILE * file)
if (elf_header.e_phnum == 0)
{
- if (do_segments)
+ /* PR binutils/12467. */
+ if (elf_header.e_phoff != 0)
+ warn (_("possibly corrupt ELF header - it has a non-zero program"
+ " header offset, but no program headers"));
+ else if (do_segments)
printf (_("\nThere are no program headers in this file.\n"));
return 0;
}
@@ -4377,7 +4381,11 @@ process_section_headers (FILE * file)
if (elf_header.e_shnum == 0)
{
- if (do_sections)
+ /* PR binutils/12467. */
+ if (elf_header.e_shoff != 0)
+ warn (_("possibly corrupt ELF file header - it has a non-zero"
+ " section header offset, but no section headers\n"));
+ else if (do_sections)
printf (_("\nThere are no sections in this file.\n"));
return 1;
@@ -4860,7 +4868,7 @@ process_section_groups (FILE * file)
if (elf_header.e_shnum == 0)
{
if (do_section_groups)
- printf (_("\nThere are no sections in this file.\n"));
+ printf (_("\nThere are no sections to group in this file.\n"));
return 1;
}