Browse Source
In a SHF_COMPRESSED compressed section, the raw compressed data should begin immediately after the compression header. This patch removes the extra zlib header from the SHF_COMPRESSED section. bfd/ * bfd.c (bfd_update_compression_header): Also write the zlib header if the SHF_COMPRESSED bit cleared.. (bfd_check_compression_header): Return the uncompressed size. * compress.c (decompress_contents): Don't skip the zlib header. (bfd_compress_section_contents): Properly handle ELFCOMPRESS_ZLIB, which doesn't have the zlib header. (bfd_init_section_decompress_status): Likewise. (bfd_get_full_section_contents): Updated. (bfd_is_section_compressed): Likewise. (bfd_is_section_compressed_with_header): Return the uncompressed size. * elf.c (_bfd_elf_make_section_from_shdr): Updated. * bfd-in2.h: Regenerated. binutils/ * readelf.c (uncompress_section_contents): Add a parameter for uncompressed size. Don't check the zlib header. (load_specific_debug_section): Updated. binutils/testsuite/ * binutils-all/compress.exp: Replace "$OBJDUMP -s -j .debug_info" with "$OBJDUMP -W". * binutils-all/libdw2-compressedgabi.out: Updated. gas/ 2015-05-14 H.J. Lu <hongjiu.lu@intel.com> * write.c (compress_debug): Don't write the zlib header, which is handled by bfd_update_compression_header.gdb-7.10-branch
12 changed files with 544 additions and 123 deletions
@ -1,3 +1,362 @@ |
|||
#... |
|||
.*ZLIB.* |
|||
In archive tmpdir/dw2-copy-compressedgabi.a: |
|||
|
|||
dw2-1-compressedgabi.o: +file format .* |
|||
|
|||
Contents of the .debug_info section: |
|||
|
|||
Compilation Unit @ offset 0x0: |
|||
Length: 0x4e \(32-bit\) |
|||
Version: 2 |
|||
Abbrev Offset: 0x0 |
|||
Pointer Size: 4 |
|||
<0><b>: Abbrev Number: 1 \(DW_TAG_compile_unit\) |
|||
<c> DW_AT_stmt_list : 0x0 |
|||
<10> DW_AT_high_pc : 0x. |
|||
<14> DW_AT_low_pc : 0x. |
|||
<18> DW_AT_name : file1.txt |
|||
<22> DW_AT_producer : GNU C 3.3.3 |
|||
<2e> DW_AT_language : 1 \(ANSI C\) |
|||
<1><2f>: Abbrev Number: 2 \(DW_TAG_subprogram\) |
|||
<30> DW_AT_external : 1 |
|||
<31> DW_AT_decl_file : 1 |
|||
<32> DW_AT_decl_line : 2 |
|||
<33> DW_AT_name : func_cu1 |
|||
<3c> DW_AT_type : <0x4a> |
|||
<40> DW_AT_low_pc : 0x. |
|||
<44> DW_AT_high_pc : 0x. |
|||
<48> DW_AT_frame_base : 1 byte block: 55 \(DW_OP_reg5 \([^()]*\)\) |
|||
<1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\) |
|||
<4b> DW_AT_name : int |
|||
<4f> DW_AT_byte_size : 4 |
|||
<50> DW_AT_encoding : 5 \(signed\) |
|||
<1><51>: Abbrev Number: 0 |
|||
|
|||
Raw dump of debug contents of section .debug_line: |
|||
|
|||
Offset: 0x0 |
|||
Length: 62 |
|||
DWARF Version: 2 |
|||
Prologue Length: 35 |
|||
Minimum Instruction Length: 1 |
|||
Initial value of 'is_stmt': 1 |
|||
Line Base: 1 |
|||
Line Range: 1 |
|||
Opcode Base: 16 |
|||
|
|||
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 |
|||
Opcode 13 has 0 args |
|||
Opcode 14 has 0 args |
|||
Opcode 15 has 0 args |
|||
|
|||
The Directory Table is empty. |
|||
|
|||
The File Name Table \(offset 0x.*\): |
|||
Entry Dir Time Size Name |
|||
1 0 0 0 file1.txt |
|||
|
|||
Line Number Statements: |
|||
\[0x.*\] Extended opcode 2: set Address to 0x4 |
|||
\[0x.*\] Advance Line by 3 to 4 |
|||
\[0x.*\] Copy |
|||
\[0x.*\] Copy |
|||
\[0x.*\] Extended opcode 2: set Address to 0x8 |
|||
\[0x.*\] Extended opcode 1: End of Sequence |
|||
|
|||
|
|||
Contents of the .debug_abbrev section: |
|||
|
|||
Number TAG \(0x0\) |
|||
1 DW_TAG_compile_unit \[has children\] |
|||
DW_AT_stmt_list DW_FORM_data4 |
|||
DW_AT_high_pc DW_FORM_addr |
|||
DW_AT_low_pc DW_FORM_addr |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_producer DW_FORM_string |
|||
DW_AT_language DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
2 DW_TAG_subprogram \[no children\] |
|||
DW_AT_external DW_FORM_flag |
|||
DW_AT_decl_file DW_FORM_data1 |
|||
DW_AT_decl_line DW_FORM_data1 |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_type DW_FORM_ref4 |
|||
DW_AT_low_pc DW_FORM_addr |
|||
DW_AT_high_pc DW_FORM_addr |
|||
DW_AT_frame_base DW_FORM_block1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
3 DW_TAG_base_type \[no children\] |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_byte_size DW_FORM_data1 |
|||
DW_AT_encoding DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
|
|||
dw2-2-compressedgabi.o: +file format .* |
|||
|
|||
Contents of the .debug_info section: |
|||
|
|||
Compilation Unit @ offset 0x0: |
|||
Length: 0x4e \(32-bit\) |
|||
Version: 2 |
|||
Abbrev Offset: 0x0 |
|||
Pointer Size: 4 |
|||
<0><b>: Abbrev Number: 1 \(DW_TAG_compile_unit\) |
|||
<c> DW_AT_stmt_list : 0x0 |
|||
<10> DW_AT_high_pc : 0x4 |
|||
<14> DW_AT_low_pc : 0x0 |
|||
<18> DW_AT_name : file1.txt |
|||
<22> DW_AT_producer : GNU C 3.3.3 |
|||
<2e> DW_AT_language : 1 \(ANSI C\) |
|||
<1><2f>: Abbrev Number: 2 \(DW_TAG_subprogram\) |
|||
<30> DW_AT_external : 1 |
|||
<31> DW_AT_decl_file : 1 |
|||
<32> DW_AT_decl_line : 2 |
|||
<33> DW_AT_name : func_cu2 |
|||
<3c> DW_AT_type : <0x4a> |
|||
<40> DW_AT_low_pc : 0x0 |
|||
<44> DW_AT_high_pc : 0x4 |
|||
<48> DW_AT_frame_base : 1 byte block: 55 \(DW_OP_reg5 \(.*\)\) |
|||
<1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\) |
|||
<4b> DW_AT_name : int |
|||
<4f> DW_AT_byte_size : 4 |
|||
<50> DW_AT_encoding : 5 \(signed\) |
|||
<1><51>: Abbrev Number: 0 |
|||
|
|||
Raw dump of debug contents of section .debug_line: |
|||
|
|||
Offset: 0x0 |
|||
Length: 62 |
|||
DWARF Version: 2 |
|||
Prologue Length: 35 |
|||
Minimum Instruction Length: 1 |
|||
Initial value of 'is_stmt': 1 |
|||
Line Base: 1 |
|||
Line Range: 1 |
|||
Opcode Base: 16 |
|||
|
|||
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 |
|||
Opcode 13 has 0 args |
|||
Opcode 14 has 0 args |
|||
Opcode 15 has 0 args |
|||
|
|||
The Directory Table is empty. |
|||
|
|||
The File Name Table \(offset 0x1f\): |
|||
Entry Dir Time Size Name |
|||
1 0 0 0 file1.txt |
|||
|
|||
Line Number Statements: |
|||
\[0x0000002d\] Extended opcode 2: set Address to 0x0 |
|||
\[0x00000034\] Advance Line by 3 to 4 |
|||
\[0x00000036\] Copy |
|||
\[0x00000037\] Copy |
|||
\[0x00000038\] Extended opcode 2: set Address to 0x4 |
|||
\[0x0000003f\] Extended opcode 1: End of Sequence |
|||
|
|||
|
|||
Contents of the .debug_abbrev section: |
|||
|
|||
Number TAG \(0x0\) |
|||
1 DW_TAG_compile_unit \[has children\] |
|||
DW_AT_stmt_list DW_FORM_data4 |
|||
DW_AT_high_pc DW_FORM_addr |
|||
DW_AT_low_pc DW_FORM_addr |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_producer DW_FORM_string |
|||
DW_AT_language DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
2 DW_TAG_subprogram \[no children\] |
|||
DW_AT_external DW_FORM_flag |
|||
DW_AT_decl_file DW_FORM_data1 |
|||
DW_AT_decl_line DW_FORM_data1 |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_type DW_FORM_ref4 |
|||
DW_AT_low_pc DW_FORM_addr |
|||
DW_AT_high_pc DW_FORM_addr |
|||
DW_AT_frame_base DW_FORM_block1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
3 DW_TAG_base_type \[no children\] |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_byte_size DW_FORM_data1 |
|||
DW_AT_encoding DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
|
|||
|
|||
dw2-3-compressedgabi.o: +file format .* |
|||
|
|||
Contents of the .debug_info section: |
|||
|
|||
Compilation Unit @ offset 0x0: |
|||
Length: 0x5e \(32-bit\) |
|||
Version: 2 |
|||
Abbrev Offset: 0x0 |
|||
Pointer Size: 4 |
|||
<0><b>: Abbrev Number: 1 \(DW_TAG_compile_unit\) |
|||
<c> DW_AT_stmt_list : 0x0 |
|||
<10> DW_AT_high_pc : 0x4 |
|||
<14> DW_AT_low_pc : 0x0 |
|||
<18> DW_AT_name : file1.txt |
|||
<22> DW_AT_producer : GNU C 3.3.3 |
|||
<2e> DW_AT_language : 1 \(ANSI C\) |
|||
<1><2f>: Abbrev Number: 2 \(DW_TAG_subprogram\) |
|||
<30> DW_AT_external : 1 |
|||
<31> DW_AT_decl_file : 1 |
|||
<32> DW_AT_decl_line : 2 |
|||
<33> DW_AT_name : func_cu1 |
|||
<3c> DW_AT_type : <0x85> |
|||
<40> DW_AT_low_pc : 0x0 |
|||
<44> DW_AT_high_pc : 0x4 |
|||
<48> DW_AT_frame_base : 1 byte block: 55 \(DW_OP_reg5 \([^()]*\)\) |
|||
<1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\) |
|||
<4b> DW_AT_name : int1 |
|||
<50> DW_AT_byte_size : 4 |
|||
<51> DW_AT_encoding : 5 \(signed\) |
|||
<1><52>: Abbrev Number: 4 \(DW_TAG_const_type\) |
|||
<53> DW_AT_type : <0x4a> |
|||
<1><57>: Abbrev Number: 5 \(DW_TAG_variable\) |
|||
<58> DW_AT_name : one |
|||
<5c> DW_AT_type : <0x52> |
|||
<60> DW_AT_const_value : 1 |
|||
<1><61>: Abbrev Number: 0 |
|||
Compilation Unit @ offset 0x62: |
|||
Length: 0x37 \(32-bit\) |
|||
Version: 2 |
|||
Abbrev Offset: 0x45 |
|||
Pointer Size: 4 |
|||
<0><6d>: Abbrev Number: 1 \(DW_TAG_compile_unit\) |
|||
<6e> DW_AT_name : file1.txt |
|||
<78> DW_AT_producer : GNU C 3.3.3 |
|||
<84> DW_AT_language : 1 \(ANSI C\) |
|||
<1><85>: Abbrev Number: 2 \(DW_TAG_base_type\) |
|||
<86> DW_AT_name : int2 |
|||
<8b> DW_AT_byte_size : 4 |
|||
<8c> DW_AT_encoding : 5 \(signed\) |
|||
<1><8d>: Abbrev Number: 3 \(DW_TAG_const_type\) |
|||
<8e> DW_AT_type : <0x85> |
|||
<1><92>: Abbrev Number: 4 \(DW_TAG_variable\) |
|||
<93> DW_AT_name : two |
|||
<97> DW_AT_type : <0x8d> |
|||
<9b> DW_AT_const_value : 2 |
|||
<1><9c>: Abbrev Number: 0 |
|||
|
|||
Contents of the .debug_abbrev section: |
|||
|
|||
Number TAG \(0x0\) |
|||
1 DW_TAG_compile_unit \[has children\] |
|||
DW_AT_stmt_list DW_FORM_data4 |
|||
DW_AT_high_pc DW_FORM_addr |
|||
DW_AT_low_pc DW_FORM_addr |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_producer DW_FORM_string |
|||
DW_AT_language DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
2 DW_TAG_subprogram \[no children\] |
|||
DW_AT_external DW_FORM_flag |
|||
DW_AT_decl_file DW_FORM_data1 |
|||
DW_AT_decl_line DW_FORM_data1 |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_type DW_FORM_ref_addr |
|||
DW_AT_low_pc DW_FORM_addr |
|||
DW_AT_high_pc DW_FORM_addr |
|||
DW_AT_frame_base DW_FORM_block1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
3 DW_TAG_base_type \[no children\] |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_byte_size DW_FORM_data1 |
|||
DW_AT_encoding DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
4 DW_TAG_const_type \[no children\] |
|||
DW_AT_type DW_FORM_ref4 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
5 DW_TAG_variable \[no children\] |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_type DW_FORM_ref4 |
|||
DW_AT_const_value DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
Number TAG \(0x45\) |
|||
1 DW_TAG_compile_unit \[has children\] |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_producer DW_FORM_string |
|||
DW_AT_language DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
2 DW_TAG_base_type \[no children\] |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_byte_size DW_FORM_data1 |
|||
DW_AT_encoding DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
3 DW_TAG_const_type \[no children\] |
|||
DW_AT_type DW_FORM_ref4 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
4 DW_TAG_variable \[no children\] |
|||
DW_AT_name DW_FORM_string |
|||
DW_AT_type DW_FORM_ref4 |
|||
DW_AT_const_value DW_FORM_data1 |
|||
DW_AT value: 0 DW_FORM value: 0 |
|||
|
|||
Raw dump of debug contents of section .debug_line: |
|||
|
|||
Offset: 0x0 |
|||
Length: 62 |
|||
DWARF Version: 2 |
|||
Prologue Length: 35 |
|||
Minimum Instruction Length: 1 |
|||
Initial value of 'is_stmt': 1 |
|||
Line Base: 1 |
|||
Line Range: 1 |
|||
Opcode Base: 16 |
|||
|
|||
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 |
|||
Opcode 13 has 0 args |
|||
Opcode 14 has 0 args |
|||
Opcode 15 has 0 args |
|||
|
|||
The Directory Table is empty. |
|||
|
|||
The File Name Table \(offset 0x1f\): |
|||
Entry Dir Time Size Name |
|||
1 0 0 0 file1.txt |
|||
|
|||
Line Number Statements: |
|||
\[0x0000002d\] Extended opcode 2: set Address to 0x0 |
|||
\[0x00000034\] Advance Line by 3 to 4 |
|||
\[0x00000036\] Copy |
|||
\[0x00000037\] Copy |
|||
\[0x00000038\] Extended opcode 2: set Address to 0x4 |
|||
\[0x0000003f\] Extended opcode 1: End of Sequence |
|||
|
|||
#pass |
|||
|
|||
Loading…
Reference in new issue