Add --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 15 Apr 2015 05:01:25 +0000 (22:01 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 15 Apr 2015 05:01:38 +0000 (22:01 -0700)
commit0ce398f106dac65c3a1d2f7d254213fa652af089
tree6ab688c878a7eac3183247b29dd9add73bf1dec6
parentecd272101d27ed8d654cbab9972aa05c124f981c
Add --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]

This patch adds --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]
to ld for ELF targets to support generating compressed DWARF debug
sections.  We always generate .zdebug_* section since section names have
been finalized and they can't be changed easily when compression is
being performed.

bfd/

* bfd-in.h (compressed_debug_section_type): New.
* compress.c (bfd_compress_section_contents): Add an argument
for linker write compression and always generate .zdebug_*
section when linking.
(bfd_init_section_compress_status): Pass FALSE to
bfd_compress_section_contents.
(bfd_compress_section): New function.
* elf.c (elf_fake_sections): For linking, set SEC_ELF_COMPRESS
on DWARF debug sections if COMPRESS_DEBUG is set and rename
section if COMPRESS_DEBUG_GABI_ZLIB isn't set.
(assign_file_positions_for_non_load_sections): Set sh_offset
to -1 if SEC_ELF_COMPRESS is set.
(assign_file_positions_except_relocs): Likwise.
(_bfd_elf_assign_file_positions_for_relocs): Renamed to ...
(_bfd_elf_assign_file_positions_for_non_load): This.  Change
return time to bfd_boolean.  Compress the section if
SEC_ELF_COMPRESS is set.
(_bfd_elf_write_object_contents): Updated.
(_bfd_elf_set_section_contents): Write section contents to
the buffer if SEC_ELF_COMPRESS is set.
* merge.c: Include "elf-bfd.h".
(sec_merge_emit): Add arguments for contents and offset.  Write
to contents with offset if contents isn't NULL.
(_bfd_write_merged_section): Write section contents to the
buffer if SEC_ELF_COMPRESS is set.  Pass contents and
output_offset to sec_merge_emit.
* elflink.c (bfd_elf_final_link): Allocate the buffer for
output section contents if SEC_ELF_COMPRESS is set.
* section.c (SEC_ELF_COMPRESS): New.
* bfd-in2.h: Regenerated.

gas/

* as.h (compressed_debug_section_type): Removed.

include/

* bfdlink.h (bfd_link_info): Add compress_debug.

ld/

* ld.texinfo: Document --compress-debug-sections=.
* ldmain.c (main): Set BFD_COMPRESS on output_bfd if
COMPRESS_DEBUG is set.  Set BFD_COMPRESS_GABI on output_bfd
for COMPRESS_DEBUG_GABI_ZLIB.
* lexsup.c (elf_static_list_options): Add
--compress-debug-sections=.
* emultempl/elf32.em (OPTION_COMPRESS_DEBUG): New.
(xtra_long): Add "compress-debug-sections".
(gld${EMULATION_NAME}_handle_option): Handle
OPTION_COMPRESS_DEBUG.

ld/testsuite/

* ld-elf/compress.exp (build_tests): Add tests for
--compress-debug-sections=.
(run_tests): Likewise.
Add additonal tests for --compress-debug-sections=.
* ld-elf/gabiend.rt: New file.
* ld-elf/gabinormal.rt: Likewise.
* ld-elf/gnubegin.rS: Likewise.
* ld-elf/gnunormal.rS: Likewise.
* ld-elf/zlibbegin.rS: Likewise.
* ld-elf/zlibnormal.rS: Likewise.
25 files changed:
bfd/ChangeLog
bfd/bfd-in.h
bfd/bfd-in2.h
bfd/compress.c
bfd/elf.c
bfd/elflink.c
bfd/merge.c
bfd/section.c
gas/ChangeLog
gas/as.h
include/ChangeLog
include/bfdlink.h
ld/ChangeLog
ld/emultempl/elf32.em
ld/ld.texinfo
ld/ldmain.c
ld/lexsup.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/compress.exp
ld/testsuite/ld-elf/gabiend.rt [new file with mode: 0644]
ld/testsuite/ld-elf/gabinormal.rt [new file with mode: 0644]
ld/testsuite/ld-elf/gnubegin.rS [new file with mode: 0644]
ld/testsuite/ld-elf/gnunormal.rS [new file with mode: 0644]
ld/testsuite/ld-elf/zlibbegin.rS [new file with mode: 0644]
ld/testsuite/ld-elf/zlibnormal.rS [new file with mode: 0644]