diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index da50163ce4..e0527aaf99 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -1847,7 +1847,7 @@ linker input file. Compress DWARF debug 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 or renamed. +not compressed or renamed. @item --decompress-debug-sections Decompress DWARF debug sections using zlib. The original section diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 5b1608521e..f814d363f4 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2015-03-18 H.J. Lu + + PR gas/18087 + * gas/i386/dw2-compress-1.d: Revert the last change. + * gas/i386/dw2-compress-3.d: New. + * gas/i386/dw2-compress-3.s: Likewise. + * gas/i386/i386.exp: Run dw2-compress-3 for ELF targets. + 2015-03-18 Jon Turney Nick Clifton diff --git a/gas/testsuite/gas/i386/dw2-compress-1.d b/gas/testsuite/gas/i386/dw2-compress-1.d index 2b2fd8d928..c29a26cd33 100644 --- a/gas/testsuite/gas/i386/dw2-compress-1.d +++ b/gas/testsuite/gas/i386/dw2-compress-1.d @@ -2,7 +2,7 @@ #readelf: -w #name: DWARF2 debugging information 1 -Contents of the .debug_info section: +Contents of the .zdebug_info section: Compilation Unit @ offset 0x0: Length: 0x4e \(32-bit\) diff --git a/gas/testsuite/gas/i386/dw2-compress-3.d b/gas/testsuite/gas/i386/dw2-compress-3.d new file mode 100644 index 0000000000..d2aa8ef1fc --- /dev/null +++ b/gas/testsuite/gas/i386/dw2-compress-3.d @@ -0,0 +1,103 @@ +#as: --compress-debug-sections +#readelf: -w +#name: DWARF2 debugging information 3 + +Contents of the .debug_info section: + + Compilation Unit @ offset 0x0: + Length: 0x32 \(32-bit\) + Version: 4 + Abbrev Offset: 0x0 + Pointer Size: 4 + <0>: Abbrev Number: 1 \(DW_TAG_compile_unit\) + DW_AT_producer : \(indirect string, offset: 0x2\): GNU C 4.8.3 + <10> DW_AT_language : 1 \(ANSI C\) + <11> DW_AT_name : \(indirect string, offset: 0xe\): dw2-compress-3.c + <15> DW_AT_comp_dir : \(indirect string, offset: 0x0\): . + <19> DW_AT_stmt_list : 0x0 + <1><1d>: Abbrev Number: 2 \(DW_TAG_variable\) + <1e> DW_AT_name : foo + <22> DW_AT_decl_file : 1 + <23> DW_AT_decl_line : 1 + <24> DW_AT_type : <0x2e> + <28> DW_AT_external : 1 + <28> DW_AT_location : 5 byte block: 3 4 0 0 0 \(DW_OP_addr: 4\) + <1><2e>: Abbrev Number: 3 \(DW_TAG_base_type\) + <2f> DW_AT_byte_size : 4 + <30> DW_AT_encoding : 5 \(signed\) + <31> DW_AT_name : int + <1><35>: Abbrev Number: 0 + +Contents of the .debug_abbrev section: + + Number TAG \(0x0\) + 1 DW_TAG_compile_unit \[has children\] + DW_AT_producer DW_FORM_strp + DW_AT_language DW_FORM_data1 + DW_AT_name DW_FORM_strp + DW_AT_comp_dir DW_FORM_strp + DW_AT_stmt_list DW_FORM_sec_offset + DW_AT value: 0 DW_FORM value: 0 + 2 DW_TAG_variable \[no children\] + DW_AT_name DW_FORM_string + DW_AT_decl_file DW_FORM_data1 + DW_AT_decl_line DW_FORM_data1 + DW_AT_type DW_FORM_ref4 + DW_AT_external DW_FORM_flag_present + DW_AT_location DW_FORM_exprloc + DW_AT value: 0 DW_FORM value: 0 + 3 DW_TAG_base_type \[no children\] + DW_AT_byte_size DW_FORM_data1 + DW_AT_encoding DW_FORM_data1 + DW_AT_name DW_FORM_string + DW_AT value: 0 DW_FORM value: 0 + +Contents of the .debug_aranges section: + + Length: 20 + Version: 2 + Offset into .debug_info: 0x0 + Pointer Size: 4 + Segment Size: 0 + + Address Length + 00000000 00000000 + +Raw dump of debug contents of section .debug_line: + + Offset: 0x0 + Length: 45 + DWARF Version: 2 + Prologue Length: 39 + Minimum Instruction Length: 1 + Initial value of 'is_stmt': 1 + Line Base: -5 + Line Range: 14 + Opcode Base: 13 + + Opcodes: + Opcode 1 has 0 args + Opcode 2 has 1 args + Opcode 3 has 1 args + Opcode 4 has 1 args + Opcode 5 has 1 args + Opcode 6 has 0 args + Opcode 7 has 0 args + Opcode 8 has 0 args + Opcode 9 has 1 args + Opcode 10 has 0 args + Opcode 11 has 0 args + Opcode 12 has 1 args + + The Directory Table is empty. + + The File Name Table \(offset 0x1c\): + Entry Dir Time Size Name + 1 0 0 0 dw2-compress-3.c + + No Line Number Statements. +Contents of the .debug_str section: + + 0x00000000 2e00474e 55204320 342e382e 33006477 ..GNU C 4.8.3.dw + 0x00000010 322d636f 6d707265 73732d33 2e6300 2-compress-3.c. + diff --git a/gas/testsuite/gas/i386/dw2-compress-3.s b/gas/testsuite/gas/i386/dw2-compress-3.s new file mode 100644 index 0000000000..c2e6f2ed52 --- /dev/null +++ b/gas/testsuite/gas/i386/dw2-compress-3.s @@ -0,0 +1,96 @@ + .file "dw2-compress-3.c" + .text +.Ltext0: + .comm foo,4,4 +.Letext0: + .file 1 "dw2-compress-3.c" + .section .debug_info,"",@progbits +.Ldebug_info0: + .long 0x32 + .value 0x4 + .long .Ldebug_abbrev0 + .byte 0x4 + .uleb128 0x1 + .long .LASF0 + .byte 0x1 + .long .LASF1 + .long .LASF2 + .long .Ldebug_line0 + .uleb128 0x2 + .string "foo" + .byte 0x1 + .byte 0x1 + .long 0x2e + .uleb128 0x5 + .byte 0x3 + .long foo + .uleb128 0x3 + .byte 0x4 + .byte 0x5 + .string "int" + .byte 0 + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .uleb128 0x1 + .uleb128 0x11 + .byte 0x1 + .uleb128 0x25 + .uleb128 0xe + .uleb128 0x13 + .uleb128 0xb + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x1b + .uleb128 0xe + .uleb128 0x10 + .uleb128 0x17 + .byte 0 + .byte 0 + .uleb128 0x2 + .uleb128 0x34 + .byte 0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x3f + .uleb128 0x19 + .uleb128 0x2 + .uleb128 0x18 + .byte 0 + .byte 0 + .uleb128 0x3 + .uleb128 0x24 + .byte 0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .uleb128 0x3 + .uleb128 0x8 + .byte 0 + .byte 0 + .byte 0 + .section .debug_aranges,"",@progbits + .long 0x14 + .value 0x2 + .long .Ldebug_info0 + .byte 0x4 + .byte 0 + .value 0 + .value 0 + .long 0 + .long 0 + .section .debug_line,"",@progbits +.Ldebug_line0: + .section .debug_str,"MS",@progbits,1 +.LASF2: + .string "." +.LASF0: + .string "GNU C 4.8.3" +.LASF1: + .string "dw2-compress-3.c" diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 381a1e3f4c..19ef914b1d 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -426,6 +426,7 @@ if [expr [istarget "i*86-*-*"] || [istarget "x86_64-*-*"]] then { run_list_test_stdin "list-2" "-al" run_list_test_stdin "list-3" "-al" run_dump_test "dw2-compress-1" + run_dump_test "dw2-compress-3" } } diff --git a/gas/write.c b/gas/write.c index e3570acace..397ea48c7b 100644 --- a/gas/write.c +++ b/gas/write.c @@ -1530,7 +1530,7 @@ compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED) the section smaller, just keep it uncompressed. */ if (compressed_size > sec->size) return; - + /* Replace the uncompressed frag list with the compressed frag list. */ seginfo->frchainP->frch_root = first_newf; seginfo->frchainP->frch_last = last_newf;