Handle VDSO section headers past end of page
authorAlan Modra <amodra@gmail.com>
Wed, 2 Apr 2014 01:37:33 +0000 (12:07 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 2 Apr 2014 01:37:33 +0000 (12:07 +1030)
commit5979d6b69b20a8355ea94b75fad97415fce4788c
tree896462cf9849c42674901897808ad7c4108cd759
parentcf2a3e990524cb794c75e0493169736dee6a660c
Handle VDSO section headers past end of page

When a VDSO gets large enough that it doesn't entirely fit in one page,
but not so large that the part described by the program header exceeds
one page, then gdb/BFD doesn't read the section headers and symbol
table information.  This patch cures that by passing the size of the
vdso to BFD, and fixes a number of other issues in the BFD code.

bfd/
* elfcode.h (bfd_from_remote_memory): Add "size" parameter.
Consolidate code handling possible section headers past end of
segment.  Don't use p_align for page size guess, instead use
minpagesize.  Take note of ld.so clearing section headers when
p_memsz > p_filesz.  Handle file header specifying no section
headers.  Handle zero p_align throughout.  Default loadbase to
zero.  Add comments.  Rename contents_size to high_offset, and
make it a bfd_vma.  Delete unnecessary bfd_set_error calls.
* bfd-in.h (bfd_elf_bfd_from_remote_memory): Update prototpe.
* elf-bfd.h (struct elf_backend_data <elf_backend_from_remote_memory>):
Likewise.
(_bfd_elf32_bfd_from_remote_memory): Likewise.
(_bfd_elf64_bfd_from_remote_memory): Likewise.
* elf.c (bfd_elf_bfd_from_remote_memory): Adjust.
* bfd-in2.h: Regnerate.
gdb/
* symfile-mem.c (symbol_file_add_from_memory): Add size parameter.
Pass to bfd_elf_bfd_from_remote_memory.  Adjust all callers.
(struct symbol_file_add_from_memory_args): Add size field.
(find_vdso_size): New function.
(add_vsyscall_page): Attempt to find vdso size.
bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/elf-bfd.h
bfd/elf.c
bfd/elfcode.h
gdb/ChangeLog
gdb/symfile-mem.c