aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2014-03-12 10:33:26 +1030
committerAlan Modra <amodra@gmail.com>2014-03-12 10:33:26 +1030
commitbbefd0a9264348d04783d3d374c2104ae468c799 (patch)
treeb188f383d504038da256dea9a880f192f74a9928 /bfd/elf.c
parent32ed590d7eb359de7bf8da2e8fd3f43f1cfe0bcf (diff)
downloadgdb-bbefd0a9264348d04783d3d374c2104ae468c799.zip
gdb-bbefd0a9264348d04783d3d374c2104ae468c799.tar.gz
gdb-bbefd0a9264348d04783d3d374c2104ae468c799.tar.bz2
objcopy/strip ELF program header p_vaddr confusion
copy_elf_program_header has logic to reject non-alloc sections when calculating p_vaddr offset for padding, but blithely assumed the first section in a segment was allocated. PR 16690 * elf.c (copy_elf_program_header): Ignore first section lma if non-alloc.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r--bfd/elf.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index ce7878c..3ded683 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6259,7 +6259,7 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
phdr_included = TRUE;
}
- lowest_section = first_section;
+ lowest_section = NULL;
if (section_count != 0)
{
unsigned int isec = 0;
@@ -6276,7 +6276,8 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd)
{
bfd_vma seg_off;
- if (section->lma < lowest_section->lma)
+ if (lowest_section == NULL
+ || section->lma < lowest_section->lma)
lowest_section = section;
/* Section lmas are set up from PT_LOAD header