• H.J. Lu's avatar
    Add compressed debug section support to binutils and ld. · 4a114e3e
    H.J. Lu authored
    bfd/
    
    2010-10-29  H.J. Lu  <hongjiu.lu@intel.com>
    	    Cary Coutant  <ccoutant@google.com>
    
    	* archive.c (bfd_openr_next_archived_file): Copy BFD_COMPRESS
    	and BFD_DECOMPRESS.
    
    	* bfd.c (BFD_COMPRESS): New.
    	(BFD_DECOMPRESS): Likewise.
    	(BFD_FLAGS_SAVED): Likewise.
    	(bfd_preserve_save): Replace BFD_IN_MEMORY with BFD_FLAGS_SAVED.
    
    	* compress.c (bfd_uncompress_section_contents): Removed.
    	(get_uncompressed_size): New.
    	(decompress_contents): Likewise.
    	(bfd_compress_section_contents): Likewise.
    	(bfd_get_full_section_contents): Likewise.
    	(bfd_is_section_compressed): Likewise.
    	(bfd_init_section_decompress_status): Likewise.
    	(bfd_init_section_compress_status): Likewise.
    
    	* dwarf2.c (dwarf_debug_sections): New.
    	(dwarf_debug_section_enum): Likewise.
    	(read_section): Remove section_name and compressed_section_name.
    	Add dwarf_debug_section_enum.  Try compressed debug section.
    	(read_indirect_string): Updated.
    	(read_abbrevs): Likewise.
    	(decode_line_info): Likewise.
    	(read_debug_ranges): Likewise.
    	(find_line): Updated.
    
    	* ecoff.c (bfd_debug_section): Add compress_status and
    	compressed_size.
    
    	* elf.c (_bfd_elf_make_section_from_shdr): Call
    	bfd_is_section_compressed to check if a DWARF debug section is
    	compressed.  Call bfd_init_section_compress_status or
    	bfd_init_section_decompress_status if needed.
    
    	* elflink.c (elf_link_input_bfd): Replace bfd_get_section_contents
    	with bfd_get_full_section_contents.
    	* merge.c (_bfd_add_merge_section): Likewise.
    	* reloc.c (bfd_generic_get_relocated_section_contents): Likewise.
    	* simple.c (bfd_simple_get_relocated_section_contents): Likewise.
    
    	* elfxx-target.h (TARGET_BIG_SYM): Allow BFD_COMPRESS and
    	BFD_DECOMPRESS.
    	(TARGET_LITTLE_SYM): Likewise.
    
    	* libbfd-in.h (dwarf_debug_section): New.
    	(dwarf_debug_sections): Likewise.
    
    	* libbfd.c (_bfd_generic_get_section_contents): Issue an error
    	when getting contents on compressed/decompressed section.
    
    	* section.c (COMPRESS_SECTION_NONE): New.
    	(COMPRESS_SECTION_DONE): Likewise.
    	(DECOMPRESS_SECTION_SIZED): Likewise.
    	(BFD_FAKE_SECTION): Add compress_status and compressed_size.
    	(bfd_malloc_and_get_section): Replace bfd_get_section_contents
    	with bfd_get_full_section_contents.
    
    	* bfd-in2.h: Regenerated.
    	* libbfd.h: Likewise.
    
    binutils/
    
    2010-10-29  H.J. Lu  <hongjiu.lu@intel.com>
    
    	* addr2line.c (process_file): Set BFD_DECOMPRESS.
    
    	* objcopy.c (do_debug_sections): New.
    	(OPTION_COMPRESS_DEBUG_SECTIONS): New.
    	(OPTION_DECOMPRESS_DEBUG_SECTIONS): Likewise.
    	(copy_options): Add OPTION_COMPRESS_DEBUG_SECTIONS and
    	OPTION_DECOMPRESS_DEBUG_SECTIONS.
    	(copy_usage): Add --compress-debug-sections and
    	--decompress-debug-sections.
    	(copy_file): Set BFD_COMPRESS or BFD_DECOMPRESS.
    	(copy_section): Replace bfd_get_section_contents with
    	bfd_get_full_section_contents.
    	(copy_main): Handle OPTION_COMPRESS_DEBUG_SECTIONS and
    	OPTION_DECOMPRESS_DEBUG_SECTIONS.  Check do_debug_sections to
    	rename DWARF debug sections.
    
    	* objdump.c (load_specific_debug_section): Replace
    	bfd_get_section_contents with bfd_get_full_section_contents.
    	Remove bfd_uncompress_section_contents.
    	(dump_section): Replace bfd_get_section_contents with
    	bfd_get_full_section_contents.
    	(display_file): Set BFD_DECOMPRESS if needed.
    
    	* readelf.c (uncompress_section_contents): Set buffer to NULL
    	to indiate decompression failure.
    	(load_specific_debug_section): Always call
    	uncompress_section_contents.
    
    	* doc/binutils.texi: Document --compress-debug-sections and
    	--decompress-debug-sections.
    
    binutils/testsuite/
    
    2010-10-29  H.J. Lu  <hongjiu.lu@intel.com>
    
    	* binutils-all/compress.exp: New.
    	* binutils-all/dw2-1.S: Likewise.
    	* binutils-all/dw2-2.S: Likewise.
    	* binutils-all/libdw2-compressed.out: Likewise.
    	* binutils-all/libdw2.out: Likewise.
    
    gas/
    
    2010-10-29  H.J. Lu  <hongjiu.lu@intel.com>
    
    	* write.c (compress_debug): Optimize section flags check.
    
    gas/testsuite/
    
    2010-10-29  H.J. Lu  <hongjiu.lu@intel.com>
    
    	* elf/dwarf2-1.s: Replace .zdebug_abbrev section with
    	.debug_abbrev section.
    	* elf/dwarf2-2.3: Likewise.
    
    	* elf/dwarf2-1.d: Pass --compress-debug-sections to assembler.
    	Updated.
    	* elf/dwarf2-2.d: Likewise.
    
    	* gas/i386/i386.exp: Remove xfail on dw2-compress-2 and
    	x86-64-dw2-compress-2.
    
    ld/
    
    2010-10-29  H.J. Lu  <hongjiu.lu@intel.com>
    
    	* ldfile.c (ldfile_try_open_bfd): Set BFD_DECOMPRESS after
    	bfd_openr returns.
    	* emultempl/elf32.em (gld${EMULATION_NAME}_try_needed): Likewise.
    
    	* scripttempl/elf.sc: Include compressed DWARF debug sections.
    
    ld/testsuite/
    
    2010-10-29  H.J. Lu  <hongjiu.lu@intel.com>
    
    	* ld-elf/compress.exp: New.
    	* ld-elf/compress1.s: Likewise.
    	* ld-elf/compress1a.d: Likewise.
    	* ld-elf/compress1b.d: Likewise.
    	* ld-elf/compress1c.d: Likewise.
    4a114e3e
libbfd.h 72 KB