Browse Source
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.
binutils-2_21-branch
47 changed files with 1800 additions and 417 deletions
@ -0,0 +1,135 @@ |
|||
# Copyright 2010 |
|||
# Free Software Foundation, Inc. |
|||
|
|||
# This program is free software; you can redistribute it and/or modify |
|||
# it under the terms of the GNU General Public License as published by |
|||
# the Free Software Foundation; either version 3 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License |
|||
# along with this program; if not, write to the Free Software |
|||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. |
|||
|
|||
# Test compressed .debug section. |
|||
|
|||
if { [is_remote host] || ![is_elf_format] } then { |
|||
return |
|||
} |
|||
|
|||
set testfile tmpdir/dw2-1.o |
|||
set compressedfile tmpdir/dw2-1-compressed.o |
|||
set copyfile tmpdir/dw2-copy |
|||
set compressedfile2 tmpdir/dw2-2-compressed.o |
|||
set libfile tmpdir/libdw2.a |
|||
set compressedcopyfile tmpdir/dw2-copy-compressed |
|||
|
|||
if { ![binutils_assemble $srcdir/$subdir/dw2-1.S $testfile] } then { |
|||
fail "compressed debug sections" |
|||
return |
|||
} |
|||
|
|||
if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S $compressedfile --compress-debug-sections] } then { |
|||
unsupported "compressed debug sections" |
|||
return |
|||
} |
|||
|
|||
if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S $compressedfile2 --compress-debug-sections] } then { |
|||
unsupported "compressed debug sections" |
|||
return |
|||
} |
|||
|
|||
remote_file host delete $libfile |
|||
set got [binutils_run $AR "rc $libfile $compressedfile $compressedfile2"] |
|||
if ![string match "" $got] then { |
|||
fail "compressed debug sections" |
|||
return |
|||
} |
|||
|
|||
set testname "objcopy compress debug sections" |
|||
set got [binutils_run $OBJCOPY "--compress-debug-sections $testfile ${copyfile}.o"] |
|||
if ![string match "" $got] then { |
|||
fail "objcopy ($testname)" |
|||
} else { |
|||
send_log "cmp $compressedfile ${copyfile}.o\n" |
|||
verbose "cmp $compressedfile ${copyfile}.o" |
|||
set src1 ${compressedfile} |
|||
set src2 ${copyfile}.o |
|||
set status [remote_exec build cmp "${src1} ${src2}"] |
|||
set exec_output [lindex $status 1] |
|||
set exec_output [prune_warnings $exec_output] |
|||
|
|||
if [string match "" $exec_output] then { |
|||
pass "objcopy ($testname)" |
|||
} else { |
|||
send_log "$exec_output\n" |
|||
verbose "$exec_output" 1 |
|||
fail "objcopy ($testname)" |
|||
} |
|||
} |
|||
|
|||
set testname "objcopy decompress compressed debug sections" |
|||
set got [binutils_run $OBJCOPY "--decompress-debug-sections $compressedfile ${copyfile}.o"] |
|||
if ![string match "" $got] then { |
|||
fail "objcopy ($testname)" |
|||
} else { |
|||
send_log "cmp $testfile ${copyfile}.o\n" |
|||
verbose "cmp $testfile ${copyfile}.o" |
|||
set src1 ${testfile} |
|||
set src2 ${copyfile}.o |
|||
set status [remote_exec build cmp "${src1} ${src2}"] |
|||
set exec_output [lindex $status 1] |
|||
set exec_output [prune_warnings $exec_output] |
|||
|
|||
if [string match "" $exec_output] then { |
|||
pass "objcopy ($testname)" |
|||
} else { |
|||
send_log "$exec_output\n" |
|||
verbose "$exec_output" 1 |
|||
fail "objcopy ($testname)" |
|||
} |
|||
} |
|||
|
|||
set testname "objcopy decompress debug sections in archive" |
|||
set got [binutils_run $OBJCOPY "--decompress-debug-sections $libfile ${copyfile}.a"] |
|||
if ![string match "" $got] then { |
|||
fail "objcopy ($testname)" |
|||
} else { |
|||
set got [remote_exec host "$READELF -S --wide ${copyfile}.a" "" "/dev/null" "tmpdir/libdw2.out"] |
|||
|
|||
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { |
|||
fail "$testname (reason: unexpected output)" |
|||
send_log $got |
|||
send_log "\n" |
|||
} |
|||
|
|||
if { [regexp_diff tmpdir/libdw2.out $srcdir/$subdir/libdw2.out] } then { |
|||
fail "$testname" |
|||
} else { |
|||
pass "$testname" |
|||
} |
|||
} |
|||
|
|||
set testname "objcopy compress debug sections in archive" |
|||
set got [binutils_run $OBJCOPY "--compress-debug-sections ${copyfile}.a ${compressedcopyfile}.a"] |
|||
if ![string match "" $got] then { |
|||
fail "objcopy ($testname)" |
|||
} else { |
|||
set got [remote_exec host "$OBJDUMP -s -j .zdebug_line ${compressedcopyfile}.a" "" "/dev/null" "tmpdir/libdw2-compressed.out"] |
|||
|
|||
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { |
|||
fail "$testname (reason: unexpected output)" |
|||
send_log $got |
|||
send_log "\n" |
|||
} |
|||
|
|||
if { [regexp_diff tmpdir/libdw2-compressed.out $srcdir/$subdir/libdw2-compressed.out] } then { |
|||
fail "$testname" |
|||
} else { |
|||
pass "$testname" |
|||
} |
|||
} |
|||
@ -0,0 +1,198 @@ |
|||
/* This testcase is derived from a similar test in GDB. |
|||
|
|||
Copyright 2008, 2009, 2010 Free Software Foundation, Inc. |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
|||
|
|||
/* Dummy function to provide debug information for. */ |
|||
|
|||
.text |
|||
.globl _start |
|||
_start: |
|||
.int 0 |
|||
.Lbegin_text1: |
|||
.globl func_cu1 |
|||
.type func_cu1, %function |
|||
func_cu1: |
|||
.Lbegin_func_cu1: |
|||
.int 0 |
|||
.Lend_func_cu1: |
|||
.size func_cu1, .-func_cu1 |
|||
.Lend_text1: |
|||
|
|||
/* Debug information */ |
|||
|
|||
.section .debug_info |
|||
.Lcu1_begin: |
|||
/* CU header */ |
|||
.4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ |
|||
.Lcu1_start: |
|||
.2byte 2 /* DWARF Version */ |
|||
.4byte .Labbrev1_begin /* Offset into abbrev section */ |
|||
.byte 4 /* Pointer size */ |
|||
|
|||
/* CU die */ |
|||
.uleb128 1 /* Abbrev: DW_TAG_compile_unit */ |
|||
.4byte .Lline1_begin /* DW_AT_stmt_list */ |
|||
.4byte .Lend_text1 /* DW_AT_high_pc */ |
|||
.4byte .Lbegin_text1 /* DW_AT_low_pc */ |
|||
.ascii "file1.txt\0" /* DW_AT_name */ |
|||
.ascii "GNU C 3.3.3\0" /* DW_AT_producer */ |
|||
.byte 1 /* DW_AT_language (C) */ |
|||
|
|||
/* func_cu1 */ |
|||
.uleb128 2 /* Abbrev: DW_TAG_subprogram */ |
|||
.byte 1 /* DW_AT_external */ |
|||
.byte 1 /* DW_AT_decl_file */ |
|||
.byte 2 /* DW_AT_decl_line */ |
|||
.ascii "func_cu1\0" /* DW_AT_name */ |
|||
.4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ |
|||
.4byte .Lbegin_func_cu1 /* DW_AT_low_pc */ |
|||
.4byte .Lend_func_cu1 /* DW_AT_high_pc */ |
|||
.byte 1 /* DW_AT_frame_base: length */ |
|||
.byte 0x55 /* DW_AT_frame_base: DW_OP_reg5 */ |
|||
|
|||
.Ltype_int: |
|||
.uleb128 3 /* Abbrev: DW_TAG_base_type */ |
|||
.ascii "int\0" /* DW_AT_name */ |
|||
.byte 4 /* DW_AT_byte_size */ |
|||
.byte 5 /* DW_AT_encoding */ |
|||
|
|||
.byte 0 /* End of children of CU */ |
|||
|
|||
.Lcu1_end: |
|||
|
|||
/* Line table */ |
|||
.section .debug_line |
|||
.Lline1_begin: |
|||
.4byte .Lline1_end - .Lline1_start /* Initial length */ |
|||
.Lline1_start: |
|||
.2byte 2 /* Version */ |
|||
.4byte .Lline1_lines - .Lline1_hdr /* header_length */ |
|||
.Lline1_hdr: |
|||
.byte 1 /* Minimum insn length */ |
|||
.byte 1 /* default_is_stmt */ |
|||
.byte 1 /* line_base */ |
|||
.byte 1 /* line_range */ |
|||
.byte 0x10 /* opcode_base */ |
|||
|
|||
/* Standard lengths */ |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 0 |
|||
|
|||
/* Include directories */ |
|||
.byte 0 |
|||
|
|||
/* File names */ |
|||
.ascii "file1.txt\0" |
|||
.uleb128 0 |
|||
.uleb128 0 |
|||
.uleb128 0 |
|||
|
|||
.byte 0 |
|||
|
|||
.Lline1_lines: |
|||
.byte 0 /* DW_LNE_set_address */ |
|||
.uleb128 5 |
|||
.byte 2 |
|||
.4byte .Lbegin_func_cu1 |
|||
|
|||
.byte 3 /* DW_LNS_advance_line */ |
|||
.sleb128 3 /* ... to 4 */ |
|||
|
|||
.byte 1 /* DW_LNS_copy */ |
|||
|
|||
.byte 1 /* DW_LNS_copy (second time as an end-of-prologue marker) */ |
|||
|
|||
.byte 0 /* DW_LNE_set_address */ |
|||
.uleb128 5 |
|||
.byte 2 |
|||
.4byte .Lend_func_cu1 |
|||
|
|||
.byte 0 /* DW_LNE_end_of_sequence */ |
|||
.uleb128 1 |
|||
.byte 1 |
|||
|
|||
.Lline1_end: |
|||
|
|||
/* Abbrev table */ |
|||
.section .debug_abbrev |
|||
.Labbrev1_begin: |
|||
.uleb128 1 /* Abbrev code */ |
|||
.uleb128 0x11 /* DW_TAG_compile_unit */ |
|||
.byte 1 /* has_children */ |
|||
.uleb128 0x10 /* DW_AT_stmt_list */ |
|||
.uleb128 0x6 /* DW_FORM_data4 */ |
|||
.uleb128 0x12 /* DW_AT_high_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x11 /* DW_AT_low_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x25 /* DW_AT_producer */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x13 /* DW_AT_language */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.uleb128 2 /* Abbrev code */ |
|||
.uleb128 0x2e /* DW_TAG_subprogram */ |
|||
.byte 0 /* has_children */ |
|||
.uleb128 0x3f /* DW_AT_external */ |
|||
.uleb128 0xc /* DW_FORM_flag */ |
|||
.uleb128 0x3a /* DW_AT_decl_file */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3b /* DW_AT_decl_line */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x49 /* DW_AT_type */ |
|||
.uleb128 0x13 /* DW_FORM_ref4 */ |
|||
.uleb128 0x11 /* DW_AT_low_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x12 /* DW_AT_high_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x40 /* DW_AT_frame_base */ |
|||
.uleb128 0xa /* DW_FORM_block1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.uleb128 3 /* Abbrev code */ |
|||
.uleb128 0x24 /* DW_TAG_base_type */ |
|||
.byte 0 /* has_children */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0xb /* DW_AT_byte_size */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3e /* DW_AT_encoding */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
@ -0,0 +1,195 @@ |
|||
/* This testcase is derived from a similar test in GDB. |
|||
|
|||
Copyright 2008, 2009, 2010 Free Software Foundation, Inc. |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
|||
|
|||
/* Dummy function to provide debug information for. */ |
|||
|
|||
.text |
|||
.Lbegin_text1: |
|||
.globl func_cu2 |
|||
.type func_cu2, %function |
|||
func_cu2: |
|||
.Lbegin_func_cu2: |
|||
.int 0 |
|||
.Lend_func_cu2: |
|||
.size func_cu2, .-func_cu2 |
|||
.Lend_text1: |
|||
|
|||
/* Debug information */ |
|||
|
|||
.section .debug_info |
|||
.Lcu1_begin: |
|||
/* CU header */ |
|||
.4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ |
|||
.Lcu1_start: |
|||
.2byte 2 /* DWARF Version */ |
|||
.4byte .Labbrev1_begin /* Offset into abbrev section */ |
|||
.byte 4 /* Pointer size */ |
|||
|
|||
/* CU die */ |
|||
.uleb128 1 /* Abbrev: DW_TAG_compile_unit */ |
|||
.4byte .Lline1_begin /* DW_AT_stmt_list */ |
|||
.4byte .Lend_text1 /* DW_AT_high_pc */ |
|||
.4byte .Lbegin_text1 /* DW_AT_low_pc */ |
|||
.ascii "file1.txt\0" /* DW_AT_name */ |
|||
.ascii "GNU C 3.3.3\0" /* DW_AT_producer */ |
|||
.byte 1 /* DW_AT_language (C) */ |
|||
|
|||
/* func_cu2 */ |
|||
.uleb128 2 /* Abbrev: DW_TAG_subprogram */ |
|||
.byte 1 /* DW_AT_external */ |
|||
.byte 1 /* DW_AT_decl_file */ |
|||
.byte 2 /* DW_AT_decl_line */ |
|||
.ascii "func_cu2\0" /* DW_AT_name */ |
|||
.4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ |
|||
.4byte .Lbegin_func_cu2 /* DW_AT_low_pc */ |
|||
.4byte .Lend_func_cu2 /* DW_AT_high_pc */ |
|||
.byte 1 /* DW_AT_frame_base: length */ |
|||
.byte 0x55 /* DW_AT_frame_base: DW_OP_reg5 */ |
|||
|
|||
.Ltype_int: |
|||
.uleb128 3 /* Abbrev: DW_TAG_base_type */ |
|||
.ascii "int\0" /* DW_AT_name */ |
|||
.byte 4 /* DW_AT_byte_size */ |
|||
.byte 5 /* DW_AT_encoding */ |
|||
|
|||
.byte 0 /* End of children of CU */ |
|||
|
|||
.Lcu1_end: |
|||
|
|||
/* Line table */ |
|||
.section .debug_line |
|||
.Lline1_begin: |
|||
.4byte .Lline1_end - .Lline1_start /* Initial length */ |
|||
.Lline1_start: |
|||
.2byte 2 /* Version */ |
|||
.4byte .Lline1_lines - .Lline1_hdr /* header_length */ |
|||
.Lline1_hdr: |
|||
.byte 1 /* Minimum insn length */ |
|||
.byte 1 /* default_is_stmt */ |
|||
.byte 1 /* line_base */ |
|||
.byte 1 /* line_range */ |
|||
.byte 0x10 /* opcode_base */ |
|||
|
|||
/* Standard lengths */ |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 0 |
|||
|
|||
/* Include directories */ |
|||
.byte 0 |
|||
|
|||
/* File names */ |
|||
.ascii "file1.txt\0" |
|||
.uleb128 0 |
|||
.uleb128 0 |
|||
.uleb128 0 |
|||
|
|||
.byte 0 |
|||
|
|||
.Lline1_lines: |
|||
.byte 0 /* DW_LNE_set_address */ |
|||
.uleb128 5 |
|||
.byte 2 |
|||
.4byte .Lbegin_func_cu2 |
|||
|
|||
.byte 3 /* DW_LNS_advance_line */ |
|||
.sleb128 3 /* ... to 4 */ |
|||
|
|||
.byte 1 /* DW_LNS_copy */ |
|||
|
|||
.byte 1 /* DW_LNS_copy (second time as an end-of-prologue marker) */ |
|||
|
|||
.byte 0 /* DW_LNE_set_address */ |
|||
.uleb128 5 |
|||
.byte 2 |
|||
.4byte .Lend_func_cu2 |
|||
|
|||
.byte 0 /* DW_LNE_end_of_sequence */ |
|||
.uleb128 1 |
|||
.byte 1 |
|||
|
|||
.Lline1_end: |
|||
|
|||
/* Abbrev table */ |
|||
.section .debug_abbrev |
|||
.Labbrev1_begin: |
|||
.uleb128 1 /* Abbrev code */ |
|||
.uleb128 0x11 /* DW_TAG_compile_unit */ |
|||
.byte 1 /* has_children */ |
|||
.uleb128 0x10 /* DW_AT_stmt_list */ |
|||
.uleb128 0x6 /* DW_FORM_data4 */ |
|||
.uleb128 0x12 /* DW_AT_high_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x11 /* DW_AT_low_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x25 /* DW_AT_producer */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x13 /* DW_AT_language */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.uleb128 2 /* Abbrev code */ |
|||
.uleb128 0x2e /* DW_TAG_subprogram */ |
|||
.byte 0 /* has_children */ |
|||
.uleb128 0x3f /* DW_AT_external */ |
|||
.uleb128 0xc /* DW_FORM_flag */ |
|||
.uleb128 0x3a /* DW_AT_decl_file */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3b /* DW_AT_decl_line */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x49 /* DW_AT_type */ |
|||
.uleb128 0x13 /* DW_FORM_ref4 */ |
|||
.uleb128 0x11 /* DW_AT_low_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x12 /* DW_AT_high_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x40 /* DW_AT_frame_base */ |
|||
.uleb128 0xa /* DW_FORM_block1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.uleb128 3 /* Abbrev code */ |
|||
.uleb128 0x24 /* DW_TAG_base_type */ |
|||
.byte 0 /* has_children */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0xb /* DW_AT_byte_size */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3e /* DW_AT_encoding */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
@ -0,0 +1,5 @@ |
|||
#... |
|||
.* ZLIB.* |
|||
#... |
|||
.* ZLIB.* |
|||
#pass |
|||
@ -0,0 +1,13 @@ |
|||
#... |
|||
\[[ 0-9]+\] \.debug_info[ ]+PROGBITS[ 0-9a-z]+ [^Z]* |
|||
#... |
|||
\[[ 0-9]+\] \.debug_line[ ]+PROGBITS[ 0-9a-z]+ [^Z]* |
|||
#... |
|||
\[[ 0-9]+\] \.debug_abbrev[ ]+PROGBITS[ 0-9a-z]+ [^Z]* |
|||
#... |
|||
\[[ 0-9]+\] \.debug_info[ ]+PROGBITS[ 0-9a-z]+ [^Z]* |
|||
#... |
|||
\[[ 0-9]+\] \.debug_line[ ]+PROGBITS[ 0-9a-z]+ [^Z]* |
|||
#... |
|||
\[[ 0-9]+\] \.debug_abbrev[ ]+PROGBITS[ 0-9a-z]+ [^Z]* |
|||
#pass |
|||
@ -0,0 +1,59 @@ |
|||
# Expect script for ELF compressed debug section tests. |
|||
# Copyright 2010 Free Software Foundation, Inc. |
|||
# |
|||
# This file is part of the GNU Binutils. |
|||
# |
|||
# This program is free software; you can redistribute it and/or modify |
|||
# it under the terms of the GNU General Public License as published by |
|||
# the Free Software Foundation; either version 3 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License |
|||
# along with this program; if not, write to the Free Software |
|||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, |
|||
# MA 02110-1301, USA. |
|||
# |
|||
|
|||
# Exclude non-ELF targets. |
|||
|
|||
if ![is_elf_format] { |
|||
return |
|||
} |
|||
|
|||
# The following tests require running the executable generated by ld. |
|||
if ![isnative] { |
|||
return |
|||
} |
|||
|
|||
# Check if compiler works |
|||
if { [which $CC] == 0 } { |
|||
return |
|||
} |
|||
|
|||
global as |
|||
if { ![ld_assemble $as "--compress-debug-sections $srcdir/$subdir/empty.s" tmpdir/empty.o ] } { |
|||
unsupported "linker compressed debug sections" |
|||
} |
|||
|
|||
set build_tests { |
|||
{"Build libfoo.so with compressed debug sections" |
|||
"-shared" "-fPIC -g -Wa,--compress-debug-sections" |
|||
{foo.c} {} "libfoo.so"} |
|||
{"Build libbar.so with compressed debug sections" |
|||
"-shared" "-fPIC -g -Wa,--compress-debug-sections" |
|||
{begin.c end.c} {} "libbar.so"} |
|||
} |
|||
|
|||
set run_tests { |
|||
{"Run normal with libfoo.so with compressed debug sections" |
|||
"tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" "-Wa,--compress-debug-sections" |
|||
{main.c} "normal" "normal.out"} |
|||
} |
|||
|
|||
run_cc_link_tests $build_tests |
|||
run_ld_link_exec_tests [] $run_tests |
|||
@ -0,0 +1,216 @@ |
|||
/* This testcase is derived from a similar test in GDB. |
|||
|
|||
Copyright 2008, 2009, 2010 Free Software Foundation, Inc. |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
|||
|
|||
/* Dummy function to provide debug information for. */ |
|||
|
|||
.text |
|||
.Lbegin_text1: |
|||
.globl func_cu2 |
|||
.type func_cu2, %function |
|||
func_cu2: |
|||
.Lbegin_func_cu2: |
|||
.int 0 |
|||
.Lend_func_cu2: |
|||
.size func_cu2, .-func_cu2 |
|||
.Lend_text1: |
|||
|
|||
/* Debug information */ |
|||
|
|||
.section .debug_info |
|||
.Lcu1_begin: |
|||
/* CU header */ |
|||
.4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ |
|||
.Lcu1_start: |
|||
.2byte 2 /* DWARF Version */ |
|||
.4byte .Labbrev1_begin /* Offset into abbrev section */ |
|||
.byte 4 /* Pointer size */ |
|||
|
|||
/* CU die */ |
|||
.uleb128 1 /* Abbrev: DW_TAG_compile_unit */ |
|||
.4byte .Lline1_begin /* DW_AT_stmt_list */ |
|||
.4byte .Lend_text1 /* DW_AT_high_pc */ |
|||
.4byte .Lbegin_text1 /* DW_AT_low_pc */ |
|||
.ascii "file1.txt\0" /* DW_AT_name */ |
|||
.ascii "GNU C 3.3.3\0" /* DW_AT_producer */ |
|||
.byte 1 /* DW_AT_language (C) */ |
|||
|
|||
/* func_cu2 */ |
|||
.uleb128 2 /* Abbrev: DW_TAG_subprogram */ |
|||
.byte 1 /* DW_AT_external */ |
|||
.byte 1 /* DW_AT_decl_file */ |
|||
.byte 2 /* DW_AT_decl_line */ |
|||
.ascii "func_cu2\0" /* DW_AT_name */ |
|||
.4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ |
|||
.4byte .Lbegin_func_cu2 /* DW_AT_low_pc */ |
|||
.4byte .Lend_func_cu2 /* DW_AT_high_pc */ |
|||
.byte 1 /* DW_AT_frame_base: length */ |
|||
.byte 0x55 /* DW_AT_frame_base: DW_OP_reg5 */ |
|||
|
|||
.Ltype_int: |
|||
.uleb128 3 /* Abbrev: DW_TAG_base_type */ |
|||
.ascii "int\0" /* DW_AT_name */ |
|||
.byte 4 /* DW_AT_byte_size */ |
|||
.byte 5 /* DW_AT_encoding */ |
|||
|
|||
.byte 0 /* End of children of CU */ |
|||
|
|||
.Lcu1_end: |
|||
|
|||
/* Line table */ |
|||
.section .debug_line |
|||
.Lline1_begin: |
|||
.4byte .Lline1_end - .Lline1_start /* Initial length */ |
|||
.Lline1_start: |
|||
.2byte 2 /* Version */ |
|||
.4byte .Lline1_lines - .Lline1_hdr /* header_length */ |
|||
.Lline1_hdr: |
|||
.byte 1 /* Minimum insn length */ |
|||
.byte 1 /* default_is_stmt */ |
|||
.byte 1 /* line_base */ |
|||
.byte 1 /* line_range */ |
|||
.byte 0x10 /* opcode_base */ |
|||
|
|||
/* Standard lengths */ |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 1 |
|||
.byte 0 |
|||
.byte 0 |
|||
.byte 0 |
|||
|
|||
/* Include directories */ |
|||
.byte 0 |
|||
|
|||
/* File names */ |
|||
.ascii "file1.txt\0" |
|||
.uleb128 0 |
|||
.uleb128 0 |
|||
.uleb128 0 |
|||
|
|||
.byte 0 |
|||
|
|||
.Lline1_lines: |
|||
.byte 0 /* DW_LNE_set_address */ |
|||
.uleb128 5 |
|||
.byte 2 |
|||
.4byte .Lbegin_func_cu2 |
|||
|
|||
.byte 3 /* DW_LNS_advance_line */ |
|||
.sleb128 3 /* ... to 4 */ |
|||
|
|||
.byte 1 /* DW_LNS_copy */ |
|||
|
|||
.byte 1 /* DW_LNS_copy (second time as an end-of-prologue marker) */ |
|||
|
|||
.byte 0 /* DW_LNE_set_address */ |
|||
.uleb128 5 |
|||
.byte 2 |
|||
.4byte .Lend_func_cu2 |
|||
|
|||
.byte 0 /* DW_LNE_end_of_sequence */ |
|||
.uleb128 1 |
|||
.byte 1 |
|||
|
|||
.Lline1_end: |
|||
|
|||
/* Abbrev table */ |
|||
.section .debug_abbrev |
|||
.Labbrev1_begin: |
|||
.uleb128 1 /* Abbrev code */ |
|||
.uleb128 0x11 /* DW_TAG_compile_unit */ |
|||
.byte 1 /* has_children */ |
|||
.uleb128 0x10 /* DW_AT_stmt_list */ |
|||
.uleb128 0x6 /* DW_FORM_data4 */ |
|||
.uleb128 0x12 /* DW_AT_high_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x11 /* DW_AT_low_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x25 /* DW_AT_producer */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x13 /* DW_AT_language */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.uleb128 2 /* Abbrev code */ |
|||
.uleb128 0x2e /* DW_TAG_subprogram */ |
|||
.byte 0 /* has_children */ |
|||
.uleb128 0x3f /* DW_AT_external */ |
|||
.uleb128 0xc /* DW_FORM_flag */ |
|||
.uleb128 0x3a /* DW_AT_decl_file */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3b /* DW_AT_decl_line */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0x49 /* DW_AT_type */ |
|||
.uleb128 0x13 /* DW_FORM_ref4 */ |
|||
.uleb128 0x11 /* DW_AT_low_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x12 /* DW_AT_high_pc */ |
|||
.uleb128 0x1 /* DW_FORM_addr */ |
|||
.uleb128 0x40 /* DW_AT_frame_base */ |
|||
.uleb128 0xa /* DW_FORM_block1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.uleb128 3 /* Abbrev code */ |
|||
.uleb128 0x24 /* DW_TAG_base_type */ |
|||
.byte 0 /* has_children */ |
|||
.uleb128 0x3 /* DW_AT_name */ |
|||
.uleb128 0x8 /* DW_FORM_string */ |
|||
.uleb128 0xb /* DW_AT_byte_size */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.uleb128 0x3e /* DW_AT_encoding */ |
|||
.uleb128 0xb /* DW_FORM_data1 */ |
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.byte 0x0 /* Terminator */ |
|||
.byte 0x0 /* Terminator */ |
|||
|
|||
.section .debug_pubnames,"",%progbits |
|||
.4byte 0x19 |
|||
.2byte 0x2 |
|||
.4byte .Lcu1_begin |
|||
.4byte 0x43 |
|||
.4byte 0x25 |
|||
.string "func_cu2" |
|||
.4byte 0x0 |
|||
.section .debug_aranges,"",%progbits |
|||
.4byte 0x1c |
|||
.2byte 0x2 |
|||
.4byte .Lcu1_begin |
|||
.byte 0x4 |
|||
.byte 0x0 |
|||
.2byte 0x0 |
|||
.2byte 0x0 |
|||
.4byte .Lbegin_text1 |
|||
.4byte .Lbegin_text1-.Lend_text1 |
|||
.4byte 0x0 |
|||
.4byte 0x0 |
|||
@ -0,0 +1,9 @@ |
|||
#source: compress1.s |
|||
#as: --compress-debug-sections |
|||
#ld: -e func_cu2 |
|||
#readelf: -S --wide |
|||
|
|||
#failif |
|||
#... |
|||
\[[ 0-9]+\] \.zdebug_.*[ ]+PROGBITS[ 0-9a-z]+ .* |
|||
#... |
|||
@ -0,0 +1,9 @@ |
|||
#source: compress1.s |
|||
#as: --compress-debug-sections |
|||
#ld: -r |
|||
#readelf: -S --wide |
|||
|
|||
#failif |
|||
#... |
|||
\[[ 0-9]+\] \.zdebug_.*[ ]+PROGBITS[ 0-9a-z]+ .* |
|||
#... |
|||
@ -0,0 +1,9 @@ |
|||
#source: compress1.s |
|||
#as: --compress-debug-sections |
|||
#ld: -shared |
|||
#readelf: -S --wide |
|||
|
|||
#failif |
|||
#... |
|||
\[[ 0-9]+\] \.zdebug_.*[ ]+PROGBITS[ 0-9a-z]+ .* |
|||
#... |
|||
Loading…
Reference in new issue