diff options
author | Alan Modra <amodra@gmail.com> | 2011-04-11 04:08:13 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2011-04-11 04:08:13 +0000 |
commit | e57278ef9d811d78f6db04a11ea4810ca6ae2575 (patch) | |
tree | 5d4cef8d28e53b1531921e76c259b68618281c52 /bfd/libbfd.c | |
parent | 6edcf5b8e0d9b18f11019d87bf217924abbe3322 (diff) | |
download | gdb-e57278ef9d811d78f6db04a11ea4810ca6ae2575.zip gdb-e57278ef9d811d78f6db04a11ea4810ca6ae2575.tar.gz gdb-e57278ef9d811d78f6db04a11ea4810ca6ae2575.tar.bz2 |
* bfd-in.h (bfd_get_section_limit): Don't use rawsize with output
sections.
* libbfd.c (_bfd_generic_get_section_contents): Likewise.
(_bfd_generic_get_section_contents_in_window): Likewise.
* section.c (bfd_get_section_contents): Likewise.
* compress.c (bfd_get_full_section_contents): Likewise.
* elf32-rx.c (rx_final_link): Ignore rawsize.
* elf32-microblaze.c (microblaze_elf_relocate_section): Use correct
bfd with bfd_get_section_limit.
* elfxx-ia64.c (elfNN_ia64_choose_gp): Add "final" parameter. Use
os->size during final link. Update callers.
* bfd-in2.h: Regenerate.
Diffstat (limited to 'bfd/libbfd.c')
-rw-r--r-- | bfd/libbfd.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 8b24378..4e5813a 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -866,7 +866,15 @@ _bfd_generic_get_section_contents (bfd *abfd, return FALSE; } - sz = section->rawsize ? section->rawsize : section->size; + /* We do allow reading of a section after bfd_final_link has + written the contents out to disk. In that situation, rawsize is + just a stale version of size, so ignore it. Otherwise we must be + reading an input section, where rawsize, if different to size, + is the on-disk size. */ + if (abfd->direction != write_direction && section->rawsize != 0) + sz = section->rawsize; + else + sz = section->size; if (offset + count < count || offset + count > sz) { @@ -919,7 +927,10 @@ _bfd_generic_get_section_contents_in_window w->data = w->i->data; return bfd_get_section_contents (abfd, section, w->data, offset, count); } - sz = section->rawsize ? section->rawsize : section->size; + if (abfd->direction != write_direction && section->rawsize != 0) + sz = section->rawsize; + else + sz = section->size; if (offset + count > sz || ! bfd_get_file_window (abfd, section->filepos + offset, count, w, TRUE)) |