summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2009-03-26 12:23:52 +0000
committerAlan Modra <amodra@bigpond.net.au>2009-03-26 12:23:52 +0000
commit24c9cf8e98e0a0ffb3bbbe0a4375fb8f33e086e3 (patch)
tree81427cffafafc10bc6e2afb292315b5c10e32fb2
parentfe576f65df78929f4c7ff69f0c0db964932e5c02 (diff)
downloadbinutils-redhat-24c9cf8e98e0a0ffb3bbbe0a4375fb8f33e086e3.tar.gz
PR 6494
* elf.c (copy_elf_program_header): Do not check that PT_GNU_RELRO p_filesz and p_memsz are equal. Use p_memsz as the segment size. (assign_file_positions_for_non_load_sections): Zap PT_GNU_RELRO if we don't find matching PT_LOAD when copying.
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elf.c9
2 files changed, 11 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3103cfe9c2..11a0acbbf8 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2009-03-26 Alan Modra <amodra@bigpond.net.au>
+
+ PR 6494
+ * elf.c (copy_elf_program_header): Do not check that PT_GNU_RELRO
+ p_filesz and p_memsz are equal. Use p_memsz as the segment size.
+ (assign_file_positions_for_non_load_sections): Zap PT_GNU_RELRO
+ if we don't find matching PT_LOAD when copying.
+
2009-03-25 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
* elf32-crx.c (crx_elf_howto_table): Zero the src_mask field of
diff --git a/bfd/elf.c b/bfd/elf.c
index 6aa6d1c647..720c8a1687 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -4683,13 +4683,11 @@ assign_file_positions_for_non_load_sections (bfd *abfd,
p->p_align = 1;
p->p_flags = (lp->p_flags & ~PF_W);
}
- else if (link_info != NULL)
+ else
{
memset (p, 0, sizeof *p);
p->p_type = PT_NULL;
}
- else
- abort ();
}
else if (m->count != 0)
{
@@ -5838,14 +5836,13 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
map->p_align_valid = 1;
map->p_vaddr_offset = 0;
- if (map->p_type == PT_GNU_RELRO
- && segment->p_filesz == segment->p_memsz)
+ if (map->p_type == PT_GNU_RELRO)
{
/* The PT_GNU_RELRO segment may contain the first a few
bytes in the .got.plt section even if the whole .got.plt
section isn't in the PT_GNU_RELRO segment. We won't
change the size of the PT_GNU_RELRO segment. */
- map->p_size = segment->p_filesz;
+ map->p_size = segment->p_memsz;
map->p_size_valid = 1;
}