summaryrefslogtreecommitdiff
path: root/binutils/objdump.c
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2010-07-03 20:52:22 +0000
committerCary Coutant <ccoutant@google.com>2010-07-03 20:52:22 +0000
commitb0b499c4d40a6329b30f41cc40ac9c7880f74a62 (patch)
tree1f51b5c301bc54d17329b9bd1d5c926e3c7aaee6 /binutils/objdump.c
parent868599c9ad52c88d280699558f6aaf1316f815e9 (diff)
downloadbinutils-redhat-b0b499c4d40a6329b30f41cc40ac9c7880f74a62.tar.gz
bfd/ChangeLog:
* compress.c (bfd_uncompress_section_contents): Add ATTRIBUTE_UNUSED. * dwarf2.c (read_and_uncompress_section): New function. (read_section): Call it. (find_line): Likewise. binutils/ChangeLog: * objdump.c (load_specific_debug_section): Decompress section contents before applying relocations. * readelf.c (load_specific_debug_section): Update section size after decompression. gas/ChangeLog: * Makefile.am: Add compress-debug.c and compress-debug.h. * Makefile.in: Regenerate. * config.in: Add HAVE_ZLIB_H. * configure.in: Check for zlib.h. * configure: Regenerate. * as.c (parse_args): Add --compress-debug-sections and --nocompress-debug-sections. * as.h (flag_compress_debug): New variable. * compress-debug.c: New file. * compress-debug.h: New file. * write.c: Include compress-debug.h. (compress_frag): New function. (compress_debug): New function. (write_object_file): Compress debug sections if requested.
Diffstat (limited to 'binutils/objdump.c')
-rw-r--r--binutils/objdump.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 2a419b7a1a..f94dee968e 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -2205,14 +2205,8 @@ load_specific_debug_section (enum dwarf_section_display_enum debug,
section->size = bfd_get_section_size (sec);
section->start = (unsigned char *) xmalloc (section->size);
- if (is_relocatable && debug_displays [debug].relocate)
- ret = bfd_simple_get_relocated_section_contents (abfd,
- sec,
- section->start,
- syms) != NULL;
- else
- ret = bfd_get_section_contents (abfd, sec, section->start, 0,
- section->size);
+ ret = bfd_get_section_contents (abfd, sec, section->start, 0,
+ section->size);
if (! ret)
{
@@ -2234,6 +2228,30 @@ load_specific_debug_section (enum dwarf_section_display_enum debug,
section->size = size;
}
+ if (is_relocatable && debug_displays [debug].relocate)
+ {
+ /* We want to relocate the data we've already read (and
+ decompressed), so we store a pointer to the data in
+ the bfd_section, and tell it that the contents are
+ already in memory. */
+ sec->contents = section->start;
+ sec->flags |= SEC_IN_MEMORY;
+ sec->size = section->size;
+
+ ret = bfd_simple_get_relocated_section_contents (abfd,
+ sec,
+ section->start,
+ syms) != NULL;
+
+ if (! ret)
+ {
+ free_debug_section (debug);
+ printf (_("\nCan't get contents for section '%s'.\n"),
+ section->name);
+ return 0;
+ }
+ }
+
return 1;
}