Make default compression gABI compliant

All programs in binutils+gdb git repo now support gABI compression
with the SHF_COMPRESSED bit.  This patch makes the zlib-gabi option
as compression default for gas, gold, ld and objcopy, instead of the
zlib-gnu option whose outputs are incompatible with gABI.

binutils/

	* objcopy.c (copy_file): Set BFD_COMPRESS_GABI if not
	zlib-gnu.
	* doc/binutils.texi: Change --compress-debug-sections and
	--compress-debug-sections=zlib to zlib-gabi.

binutils/testsuite/

	* binutils-all/compress.exp: Update.

gas/

	* as.c (parse_args): Make --compress-debug-sections and
	--compress-debug-sections=zlib the same as
	--compress-debug-sections=zlib-gabi.
	* doc/as.texinfo: Change --compress-debug-sections and
	--compress-debug-sections=zlib to zlib-gabi.

gold/

	* compressed_output.cc (Output_compressed_section::set_final_data_size):
	Make --compress-debug-sections=zlib the same as
	--compress-debug-sections=zlib-gabi.
	* testsuite/Makefile.am (flagstest_compress_debug_sections.check):
	Expect ".debug_.*" with the SHF_COMPRESSED bit, instead of
	".zdebug_".
	* testsuite/Makefile.in: Regenerated.

ld/

	* emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Make
	--compress-debug-sections=zlib the same as
	--compress-debug-sections=zlib-gabi.
	* ld.texinfo: Change --compress-debug-sections=zlib to zlib-gabi.

ld/testsuite/

	* ld-elf/zlibbegin.rS: Updated to .debug_.* with the
	SHF_COMPRESSED bit.
	* ld-elf/zlibnormal.rS: Likewise.
This commit is contained in:
H.J. Lu 2015-07-14 10:25:52 -07:00
parent 22121df01f
commit 19a7fe52ae
18 changed files with 93 additions and 41 deletions

View file

@ -1,3 +1,10 @@
2015-07-14 H.J. Lu <hongjiu.lu@intel.com>
* objcopy.c (copy_file): Set BFD_COMPRESS_GABI if not
zlib-gnu.
* doc/binutils.texi: Change --compress-debug-sections and
--compress-debug-sections=zlib to zlib-gabi.
2015-07-10 H.J. Lu <hongjiu.lu@intel.com> 2015-07-10 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/18656 PR binutils/18656

View file

@ -1844,10 +1844,9 @@ It can also be a useful way of reducing the size of a @option{--just-symbols}
linker input file. linker input file.
@item --compress-debug-sections @item --compress-debug-sections
Compress DWARF debug sections using zlib. The debug sections are Compress DWARF debug sections using zlib with SHF_COMPRESSED from the
renamed to begin with @samp{.zdebug} instead of @samp{.debug}. Note - ELF ABI. Note - if compression would actually make a section
if compression would actually make a section @emph{larger} then it is @emph{larger}, then it is not compressed.
not compressed or renamed.
@item --compress-debug-sections=none @item --compress-debug-sections=none
@itemx --compress-debug-sections=zlib @itemx --compress-debug-sections=zlib
@ -1857,10 +1856,13 @@ For ELF files, these options control how DWARF debug sections are
compressed. @option{--compress-debug-sections=none} is equivalent compressed. @option{--compress-debug-sections=none} is equivalent
to @option{--nocompress-debug-sections}. to @option{--nocompress-debug-sections}.
@option{--compress-debug-sections=zlib} and @option{--compress-debug-sections=zlib} and
@option{--compress-debug-sections=zlib-gnu} are equivalent to @option{--compress-debug-sections=zlib-gabi} are equivalent to
@option{--compress-debug-sections}. @option{--compress-debug-sections}.
@option{--compress-debug-sections=zlib-gabi} compresses @option{--compress-debug-sections=zlib-gnu} compresses DWARF debug
DWARF debug sections with SHF_COMPRESSED from the ELF ABI. sections using zlib. The debug sections are renamed to begin with
@samp{.zdebug} instead of @samp{.debug}. Note - if compression would
actually make a section @emph{larger}, then it is not compressed nor
renamed.
@item --decompress-debug-sections @item --decompress-debug-sections
Decompress DWARF debug sections using zlib. The original section Decompress DWARF debug sections using zlib. The original section

View file

@ -2607,7 +2607,7 @@ copy_file (const char *input_filename, const char *output_filename,
ibfd->flags |= BFD_COMPRESS; ibfd->flags |= BFD_COMPRESS;
/* Don't check if input is ELF here since this information is /* Don't check if input is ELF here since this information is
only available after bfd_check_format_matches is called. */ only available after bfd_check_format_matches is called. */
if (do_debug_sections == compress_gabi_zlib) if (do_debug_sections != compress_gnu_zlib)
ibfd->flags |= BFD_COMPRESS_GABI; ibfd->flags |= BFD_COMPRESS_GABI;
break; break;
case decompress: case decompress:

View file

@ -1,3 +1,7 @@
2015-07-14 H.J. Lu <hongjiu.lu@intel.com>
* binutils-all/compress.exp: Update.
2015-07-10 H.J. Lu <hongjiu.lu@intel.com> 2015-07-10 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/18656 PR binutils/18656

View file

@ -39,7 +39,12 @@ if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}.o --com
return return
} }
set got [remote_exec host "cmp ${testfile}.o ${compressedfile}.o"] if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}gnu.o --compress-debug-sections=zlib-gnu] } then {
unsupported "compressed debug sections with zlib-gnu"
return
}
set got [remote_exec host "cmp ${testfile}.o ${compressedfile}gnu.o"]
# Use it to set up xfail. # Use it to set up xfail.
set exec_output [lindex $got 1] set exec_output [lindex $got 1]
if [string match "" $exec_output] then { if [string match "" $exec_output] then {
@ -136,8 +141,8 @@ if ![string match "" $got] then {
# Xfail this test if there are no compressed sections. # Xfail this test if there are no compressed sections.
setup_xfail "$compression_used$target_triplet" setup_xfail "$compression_used$target_triplet"
set testname "objcopy compress debug sections in archive" set testname "objcopy compress debug sections in archive with zlib-gnu"
set got [binutils_run $OBJCOPY "--compress-debug-sections ${copyfile}.a ${compressedcopyfile}.a"] set got [binutils_run $OBJCOPY "--compress-debug-sections=zlib-gnu ${copyfile}.a ${compressedcopyfile}.a"]
if ![string match "" $got] then { if ![string match "" $got] then {
fail "objcopy ($testname)" fail "objcopy ($testname)"
} else { } else {
@ -228,13 +233,13 @@ if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}gnu.o --
return return
} }
set src1 ${compressedfile}gnu.o set src1 ${compressedfile}gabi.o
set src2 ${compressedfile}.o set src2 ${compressedfile}.o
set status [remote_exec build cmp "${src1} ${src2}"] set status [remote_exec build cmp "${src1} ${src2}"]
set exec_output [lindex $status 1] set exec_output [lindex $status 1]
set exec_output [prune_warnings $exec_output] set exec_output [prune_warnings $exec_output]
if ![string match "" $exec_output] then { if ![string match "" $exec_output] then {
fail "compressed debug sections with zlib-gnu" fail "compressed debug sections with zlib-gabi"
return return
} }
@ -248,13 +253,13 @@ if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}gnu.o -
return return
} }
set src1 ${compressedfile2}gnu.o set src1 ${compressedfile2}gabi.o
set src2 ${compressedfile2}.o set src2 ${compressedfile2}.o
set status [remote_exec build cmp "${src1} ${src2}"] set status [remote_exec build cmp "${src1} ${src2}"]
set exec_output [lindex $status 1] set exec_output [lindex $status 1]
set exec_output [prune_warnings $exec_output] set exec_output [prune_warnings $exec_output]
if ![string match "" $exec_output] then { if ![string match "" $exec_output] then {
fail "compressed debug sections with zlib-gnu" fail "compressed debug sections with zlib-gabi"
return return
} }
@ -292,13 +297,13 @@ if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}gnu.o -
return return
} }
set src1 ${compressedfile3}gnu.o set src1 ${compressedfile3}gabi.o
set src2 ${compressedfile3}.o set src2 ${compressedfile3}.o
set status [remote_exec build cmp "${src1} ${src2}"] set status [remote_exec build cmp "${src1} ${src2}"]
set exec_output [lindex $status 1] set exec_output [lindex $status 1]
set exec_output [prune_warnings $exec_output] set exec_output [prune_warnings $exec_output]
if ![string match "" $exec_output] then { if ![string match "" $exec_output] then {
fail "compressed debug sections with zlib-gnu" fail "compressed debug sections with zlib-gabi"
return return
} }

View file

@ -1,3 +1,11 @@
2015-07-14 H.J. Lu <hongjiu.lu@intel.com>
* as.c (parse_args): Make --compress-debug-sections and
--compress-debug-sections=zlib the same as
--compress-debug-sections=zlib-gabi.
* doc/as.texinfo: Change --compress-debug-sections and
--compress-debug-sections=zlib to zlib-gabi.
2015-07-09 Catherine Moore <clm@codesourcery.com> 2015-07-09 Catherine Moore <clm@codesourcery.com>
* config/tc-mips.c (check_fpabi): Handle * config/tc-mips.c (check_fpabi): Handle

View file

@ -665,7 +665,7 @@ This program has absolutely no warranty.\n"));
if (strcasecmp (optarg, "none") == 0) if (strcasecmp (optarg, "none") == 0)
flag_compress_debug = COMPRESS_DEBUG_NONE; flag_compress_debug = COMPRESS_DEBUG_NONE;
else if (strcasecmp (optarg, "zlib") == 0) else if (strcasecmp (optarg, "zlib") == 0)
flag_compress_debug = COMPRESS_DEBUG_GNU_ZLIB; flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
else if (strcasecmp (optarg, "zlib-gnu") == 0) else if (strcasecmp (optarg, "zlib-gnu") == 0)
flag_compress_debug = COMPRESS_DEBUG_GNU_ZLIB; flag_compress_debug = COMPRESS_DEBUG_GNU_ZLIB;
else if (strcasecmp (optarg, "zlib-gabi") == 0) else if (strcasecmp (optarg, "zlib-gabi") == 0)
@ -679,7 +679,7 @@ This program has absolutely no warranty.\n"));
#endif #endif
} }
else else
flag_compress_debug = COMPRESS_DEBUG; flag_compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
break; break;
case OPTION_NOCOMPRESS_DEBUG: case OPTION_NOCOMPRESS_DEBUG:

View file

@ -625,10 +625,10 @@ Begin in alternate macro mode.
@end ifclear @end ifclear
@item --compress-debug-sections @item --compress-debug-sections
Compress DWARF debug sections using zlib. The debug sections are renamed Compress DWARF debug sections using zlib with SHF_COMPRESSED from the
to begin with @samp{.zdebug}, and the resulting object file may not be ELF ABI. The resulting object file may not be compatible with older
compatible with older linkers and object file utilities. Note if compression linkers and object file utilities. Note if compression would make a
would make a given section @emph{larger} then it is not compressed or renamed. given section @emph{larger} then it is not compressed.
@ifset ELF @ifset ELF
@cindex @samp{--compress-debug-sections=} option @cindex @samp{--compress-debug-sections=} option
@ -640,10 +640,13 @@ These options control how DWARF debug sections are compressed.
@option{--compress-debug-sections=none} is equivalent to @option{--compress-debug-sections=none} is equivalent to
@option{--nocompress-debug-sections}. @option{--nocompress-debug-sections}.
@option{--compress-debug-sections=zlib} and @option{--compress-debug-sections=zlib} and
@option{--compress-debug-sections=zlib-gnu} are equivalent to @option{--compress-debug-sections=zlib-gabi} are equivalent to
@option{--compress-debug-sections}. @option{--compress-debug-sections}.
@option{--compress-debug-sections=zlib-gabi} compresses @option{--compress-debug-sections=zlib-gnu} compresses DWARF debug
DWARF debug sections with SHF_COMPRESSED from the ELF ABI. sections using zlib. The debug sections are renamed to begin with
@samp{.zdebug}. Note if compression would make a given section
@emph{larger} then it is not compressed nor renamed.
@end ifset @end ifset
@item --nocompress-debug-sections @item --nocompress-debug-sections

View file

@ -1,3 +1,13 @@
2015-07-14 H.J. Lu <hongjiu.lu@intel.com>
* compressed_output.cc (Output_compressed_section::set_final_data_size):
Make --compress-debug-sections=zlib the same as
--compress-debug-sections=zlib-gabi.
* testsuite/Makefile.am (flagstest_compress_debug_sections.check):
Expect ".debug_.*" with the SHF_COMPRESSED bit, instead of
".zdebug_".
* testsuite/Makefile.in: Regenerated.
2015-07-12 H.J. Lu <hongjiu.lu@intel.com> 2015-07-12 H.J. Lu <hongjiu.lu@intel.com>
PR gold/18322 PR gold/18322

View file

@ -233,11 +233,10 @@ Output_compressed_section::set_final_data_size()
enum { none, gnu_zlib, gabi_zlib } compress; enum { none, gnu_zlib, gabi_zlib } compress;
int compression_header_size = 12; int compression_header_size = 12;
const int size = parameters->target().get_size(); const int size = parameters->target().get_size();
if (strcmp(this->options_->compress_debug_sections(), "zlib") == 0) if (strcmp(this->options_->compress_debug_sections(), "zlib-gnu") == 0)
compress = gnu_zlib; compress = gnu_zlib;
else if (strcmp(this->options_->compress_debug_sections(), "zlib-gnu") == 0) else if (strcmp(this->options_->compress_debug_sections(), "zlib-gabi") == 0
compress = gnu_zlib; || strcmp(this->options_->compress_debug_sections(), "zlib") == 0)
else if (strcmp(this->options_->compress_debug_sections(), "zlib-gabi") == 0)
{ {
compress = gabi_zlib; compress = gabi_zlib;
if (size == 32) if (size == 32)

View file

@ -1353,9 +1353,9 @@ flagstest_compress_debug_sections.stdout: flagstest_compress_debug_sections
$(TEST_READELF) -w $< | sed -e "s/.zdebug_/.debug_/" > $@.tmp $(TEST_READELF) -w $< | sed -e "s/.zdebug_/.debug_/" > $@.tmp
mv -f $@.tmp $@ mv -f $@.tmp $@
# Check there are compressed DWARF .zdebug_* sections. # Check there are compressed DWARF .debug_* sections.
flagstest_compress_debug_sections.check: flagstest_compress_debug_sections flagstest_compress_debug_sections.check: flagstest_compress_debug_sections
$(TEST_READELF) -SW $< | grep ".zdebug_" > $@.tmp $(TEST_READELF) -SW $< | egrep ".debug_.* C *" > $@.tmp
mv -f $@.tmp $@ mv -f $@.tmp $@
# Compare DWARF debug info. # Compare DWARF debug info.

View file

@ -5618,9 +5618,9 @@ uninstall-am:
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -w $< | sed -e "s/.zdebug_/.debug_/" > $@.tmp @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -w $< | sed -e "s/.zdebug_/.debug_/" > $@.tmp
@GCC_TRUE@@NATIVE_LINKER_TRUE@ mv -f $@.tmp $@ @GCC_TRUE@@NATIVE_LINKER_TRUE@ mv -f $@.tmp $@
# Check there are compressed DWARF .zdebug_* sections. # Check there are compressed DWARF .debug_* sections.
@GCC_TRUE@@NATIVE_LINKER_TRUE@flagstest_compress_debug_sections.check: flagstest_compress_debug_sections @GCC_TRUE@@NATIVE_LINKER_TRUE@flagstest_compress_debug_sections.check: flagstest_compress_debug_sections
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -SW $< | grep ".zdebug_" > $@.tmp @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -SW $< | egrep ".debug_.* C *" > $@.tmp
@GCC_TRUE@@NATIVE_LINKER_TRUE@ mv -f $@.tmp $@ @GCC_TRUE@@NATIVE_LINKER_TRUE@ mv -f $@.tmp $@
# Compare DWARF debug info. # Compare DWARF debug info.

View file

@ -1,3 +1,10 @@
2015-07-14 H.J. Lu <hongjiu.lu@intel.com>
* emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Make
--compress-debug-sections=zlib the same as
--compress-debug-sections=zlib-gabi.
* ld.texinfo: Change --compress-debug-sections=zlib to zlib-gabi.
2015-07-14 Nick Clifton <nickc@redhat.com> 2015-07-14 Nick Clifton <nickc@redhat.com>
* ld.texinfo (Options): Add missing period after @xref. * ld.texinfo (Options): Add missing period after @xref.

View file

@ -2223,7 +2223,7 @@ gld${EMULATION_NAME}_handle_option (int optc)
if (strcasecmp (optarg, "none") == 0) if (strcasecmp (optarg, "none") == 0)
link_info.compress_debug = COMPRESS_DEBUG_NONE; link_info.compress_debug = COMPRESS_DEBUG_NONE;
else if (strcasecmp (optarg, "zlib") == 0) else if (strcasecmp (optarg, "zlib") == 0)
link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB; link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
else if (strcasecmp (optarg, "zlib-gnu") == 0) else if (strcasecmp (optarg, "zlib-gnu") == 0)
link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB; link_info.compress_debug = COMPRESS_DEBUG_GNU_ZLIB;
else if (strcasecmp (optarg, "zlib-gabi") == 0) else if (strcasecmp (optarg, "zlib-gabi") == 0)

View file

@ -2228,11 +2228,12 @@ hash tables. The default is @code{sysv}.
@itemx --compress-debug-sections=zlib-gabi @itemx --compress-debug-sections=zlib-gabi
On ELF platforms , these options control how DWARF debug sections are On ELF platforms , these options control how DWARF debug sections are
compressed using zlib. @option{--compress-debug-sections=none} doesn't compressed using zlib. @option{--compress-debug-sections=none} doesn't
compress DWARF debug sections. @option{--compress-debug-sections=zlib} compress DWARF debug sections.
and @option{--compress-debug-sections=zlib-gnu} compress DWARF debug @option{--compress-debug-sections=zlib-gnu} compresses DWARF debug
sections and rename debug section names to begin with @samp{.zdebug} sections and rename debug section names to begin with @samp{.zdebug}
instead of @samp{.debug}. @option{--compress-debug-sections=zlib-gabi} instead of @samp{.debug}. @option{--compress-debug-sections=zlib}
compresses DWARF debug sections with SHF_COMPRESSED from the ELF ABI. and @option{--compress-debug-sections=zlib-gabi}
compress DWARF debug sections with SHF_COMPRESSED from the ELF ABI.
@kindex --reduce-memory-overheads @kindex --reduce-memory-overheads
@item --reduce-memory-overheads @item --reduce-memory-overheads

View file

@ -1,3 +1,9 @@
2015-07-14 H.J. Lu <hongjiu.lu@intel.com>
* ld-elf/zlibbegin.rS: Updated to .debug_.* with the
SHF_COMPRESSED bit.
* ld-elf/zlibnormal.rS: Likewise.
2015-07-09 Catherine Moore <clm@codesourcery.com> 2015-07-09 Catherine Moore <clm@codesourcery.com>
* ld-mips-elf/attr-gnu-4-08.d: Update expected output. * ld-mips-elf/attr-gnu-4-08.d: Update expected output.

View file

@ -1,3 +1,3 @@
#... #...
+\[[ 0-9]+\] .zdebug_.* +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +0 +0 +1 +\[[ 0-9]+\] .debug_.* +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +C +0 +0 +1
#pass #pass

View file

@ -1,3 +1,3 @@
#... #...
+\[[ 0-9]+\] .zdebug_.* +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +0 +0 +1 +\[[ 0-9]+\] .debug_.* +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +C +0 +0 +1
#pass #pass