From 2403a4ebad80a7484b1c622ac1e74298a17ffd0d Mon Sep 17 00:00:00 2001 From: Andrew Stubbs Date: Thu, 12 Mar 2009 10:57:18 +0000 Subject: [PATCH] 2009-03-12 Andrew Stubbs * dwarf2.c (read_section): Always check the offset, even when the section has been read before. --- bfd/ChangeLog | 5 ++++ bfd/dwarf2.c | 76 +++++++++++++++++++++++++++++------------------------------ 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index afc0177dc..3cc217a5d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2009-03-12 Andrew Stubbs + + * dwarf2.c (read_section): Always check the offset, even when the + section has been read before. + 2009-03-11 H.J. Lu * elf32-i386.c (elf_i386_check_tls_transition): Fix a typo in diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index 0c1825340..40b83b717 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 -- 2.11.4.GIT