diff options
author | Andrew Stubbs <andrew.stubbs@st.com> | 2009-03-12 10:57:18 +0000 |
---|---|---|
committer | Andrew Stubbs <andrew.stubbs@st.com> | 2009-03-12 10:57:18 +0000 |
commit | 53638231adc68443caa2c760416fe119708b5a78 (patch) | |
tree | 9459f5aa15af5c368f304d84ad82cc765bae4064 | |
parent | e671f9d32ef9d9a20eb5baad277f613b70b153a5 (diff) | |
download | gdb-53638231adc68443caa2c760416fe119708b5a78.zip gdb-53638231adc68443caa2c760416fe119708b5a78.tar.gz gdb-53638231adc68443caa2c760416fe119708b5a78.tar.bz2 |
2009-03-12 Andrew Stubbs <ams@codesourcery.com>
* dwarf2.c (read_section): Always check the offset, even when the
section has been read before.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/dwarf2.c | 76 |
2 files changed, 43 insertions, 38 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index afc0177..3cc217a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-03-12 Andrew Stubbs <ams@codesourcery.com> + + * dwarf2.c (read_section): Always check the offset, even when the + section has been read before. + 2009-03-11 H.J. Lu <hongjiu.lu@intel.com> * elf32-i386.c (elf_i386_check_tls_transition): Fix a typo in diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index 0c18253..40b83b7 100644 --- a/bfd/dwarf2.c +++ b/bfd/dwarf2.c @@ -417,49 +417,49 @@ read_section (bfd * abfd, bfd_boolean section_is_compressed = FALSE; /* read_section is a noop if the section has already been read. */ - if (*section_buffer) - return TRUE; - - msec = bfd_get_section_by_name (abfd, section_name); - if (! msec && compressed_section_name) - { - msec = bfd_get_section_by_name (abfd, compressed_section_name); - section_is_compressed = TRUE; - } - if (! msec) - { - (*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."), section_name); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - - if (syms) - { - *section_size = msec->size; - *section_buffer - = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms); - if (! *section_buffer) - return FALSE; - } - else + if (!*section_buffer) { - *section_size = msec->rawsize ? msec->rawsize : msec->size; - *section_buffer = bfd_malloc (*section_size); - if (! *section_buffer) - return FALSE; - if (! bfd_get_section_contents (abfd, msec, *section_buffer, - 0, *section_size)) - return FALSE; - } - - if (section_is_compressed) - { - if (! bfd_uncompress_section_contents (section_buffer, section_size)) + msec = bfd_get_section_by_name (abfd, section_name); + if (! msec && compressed_section_name) + { + msec = bfd_get_section_by_name (abfd, compressed_section_name); + section_is_compressed = TRUE; + } + if (! msec) { - (*_bfd_error_handler) (_("Dwarf Error: unable to decompress %s section."), compressed_section_name); + (*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."), section_name); bfd_set_error (bfd_error_bad_value); return FALSE; } + + if (syms) + { + *section_size = msec->size; + *section_buffer + = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms); + if (! *section_buffer) + return FALSE; + } + else + { + *section_size = msec->rawsize ? msec->rawsize : msec->size; + *section_buffer = bfd_malloc (*section_size); + if (! *section_buffer) + return FALSE; + if (! bfd_get_section_contents (abfd, msec, *section_buffer, + 0, *section_size)) + return FALSE; + } + + if (section_is_compressed) + { + if (! bfd_uncompress_section_contents (section_buffer, section_size)) + { + (*_bfd_error_handler) (_("Dwarf Error: unable to decompress %s section."), compressed_section_name); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + } } /* It is possible to get a bad value for the offset into the section |