diff options
author | Alan Modra <amodra@gmail.com> | 2014-04-02 12:07:33 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2014-04-02 12:07:33 +1030 |
commit | 5979d6b69b20a8355ea94b75fad97415fce4788c (patch) | |
tree | 896462cf9849c42674901897808ad7c4108cd759 /bfd/ChangeLog | |
parent | cf2a3e990524cb794c75e0493169736dee6a660c (diff) | |
download | gdb-5979d6b69b20a8355ea94b75fad97415fce4788c.zip gdb-5979d6b69b20a8355ea94b75fad97415fce4788c.tar.gz gdb-5979d6b69b20a8355ea94b75fad97415fce4788c.tar.bz2 |
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.
Diffstat (limited to 'bfd/ChangeLog')
-rw-r--r-- | bfd/ChangeLog | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 442f8ad..5c7b2b3 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,21 @@ +2014-04-02 Alan Modra <amodra@gmail.com> + + * 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. + 2014-04-01 Tristan Gingold <gingold@adacore.com> * mach-o.c (bfd_mach_o_canonicalize_one_reloc): Avoid to crash |