aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Stubbs <andrew.stubbs@st.com>2009-03-12 10:57:18 +0000
committerAndrew Stubbs <andrew.stubbs@st.com>2009-03-12 10:57:18 +0000
commit53638231adc68443caa2c760416fe119708b5a78 (patch)
tree9459f5aa15af5c368f304d84ad82cc765bae4064
parente671f9d32ef9d9a20eb5baad277f613b70b153a5 (diff)
downloadgdb-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/ChangeLog5
-rw-r--r--bfd/dwarf2.c76
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