diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2010-10-29 12:10:39 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2010-10-29 12:10:39 +0000 |
commit | 4a114e3e0c1c3337981179b774f1d6d1b06d201f (patch) | |
tree | 98b0b1e45b3ae0e7845215136253fa56e487a9b8 /bfd/bfd-in2.h | |
parent | e58bcb8f099ec42b3c905480629d1a49dd38b03f (diff) | |
download | gdb-4a114e3e0c1c3337981179b774f1d6d1b06d201f.zip gdb-4a114e3e0c1c3337981179b774f1d6d1b06d201f.tar.gz gdb-4a114e3e0c1c3337981179b774f1d6d1b06d201f.tar.bz2 |
Add compressed debug section support to binutils and ld.
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.
Diffstat (limited to 'bfd/bfd-in2.h')
-rw-r--r-- | bfd/bfd-in2.h | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index cbbb0f6..aec5c24 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -1353,6 +1353,12 @@ typedef struct bfd_section /* Mark flag used by some linker backends for garbage collection. */ unsigned int gc_mark : 1; + /* Section compression status. */ + unsigned int compress_status : 2; +#define COMPRESS_SECTION_NONE 0 +#define COMPRESS_SECTION_DONE 1 +#define DECOMPRESS_SECTION_SIZED 2 + /* The following flags are used by the ELF linker. */ /* Mark sections which have been allocated to segments. */ @@ -1409,6 +1415,9 @@ typedef struct bfd_section section size calculated on a previous linker relaxation pass. */ bfd_size_type rawsize; + /* The compressed size of the section in octets. */ + bfd_size_type compressed_size; + /* Relaxation table. */ struct relax_table *relax; @@ -1642,17 +1651,17 @@ extern asection bfd_ind_section; /* name, id, index, next, prev, flags, user_set_vma, */ \ { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \ \ - /* linker_mark, linker_has_input, gc_mark, segment_mark, */ \ + /* linker_mark, linker_has_input, gc_mark, decompress_status, */ \ 0, 0, 1, 0, \ \ - /* sec_info_type, use_rela_p, */ \ - 0, 0, \ + /* segment_mark, sec_info_type, use_rela_p, */ \ + 0, 0, 0, \ \ /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5, */ \ 0, 0, 0, 0, 0, 0, \ \ - /* vma, lma, size, rawsize, relax, relax_count, */ \ - 0, 0, 0, 0, 0, 0, \ + /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */ \ + 0, 0, 0, 0, 0, 0, 0, \ \ /* output_offset, output_section, alignment_power, */ \ 0, (struct bfd_section *) &SEC, 0, \ @@ -5062,6 +5071,16 @@ struct bfd will be consistent from run to run. */ #define BFD_DETERMINISTIC_OUTPUT 0x4000 + /* Compress sections in this BFD. */ +#define BFD_COMPRESS 0x8000 + + /* Decompress sections in this BFD. */ +#define BFD_DECOMPRESS 0x10000 + + /* Flags bits to be saved in bfd_preserve_save. */ +#define BFD_FLAGS_SAVED \ + (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS) + /* Currently my_archive is tested before adding origin to anything. I believe that this can become always an add of origin, with origin set to 0 for non archive files. */ @@ -5893,8 +5912,21 @@ bfd_byte *bfd_simple_get_relocated_section_contents (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table); /* Extracted from compress.c. */ -bfd_boolean bfd_uncompress_section_contents - (bfd_byte **buffer, bfd_size_type *size); +bfd_boolean bfd_compress_section_contents + (bfd *abfd, asection *section, bfd_byte *uncompressed_buffer, + bfd_size_type uncompressed_size); + +bfd_boolean bfd_get_full_section_contents + (bfd *abfd, asection *section, bfd_byte **ptr); + +bfd_boolean bfd_is_section_compressed + (bfd *abfd, asection *section); + +bfd_boolean bfd_init_section_decompress_status + (bfd *abfd, asection *section); + +bfd_boolean bfd_init_section_compress_status + (bfd *abfd, asection *section); #ifdef __cplusplus } |