From e268c0a63c2c4c60d54c07d1c3055cb0e62f6b40 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 4 Apr 2015 07:18:17 -0700 Subject: [PATCH] Add a dw2-3.S test This patch adds a dw2-3.S test for upcoming SHF_COMPRESSED test. The existing dw2-1.S/dw2-2.S tests generate non-compressed debug sections for SHF_COMPRESSED since SHF_COMPRESSED compressed debug sections are bigger. * binutils-all/compress.exp (testfile): Remove suffix. (compressedfile): Likewise. (compressedfile2): Likewise. (libfile): Likewise. (testfile3): New. (compressedfile3): Likewise. Updated. Add a dw2-3.S test. * binutils-all/dw2-3.S: New file. * binutils-all/dw2-3.W: Likewise. --- binutils/testsuite/ChangeLog | 16 + binutils/testsuite/binutils-all/compress.exp | 74 ++-- binutils/testsuite/binutils-all/dw2-3.S | 316 ++++++++++++++++++ binutils/testsuite/binutils-all/dw2-3.W | 156 +++++++++ .../binutils-all/libdw2-compressed.out | 2 + binutils/testsuite/binutils-all/libdw2.out | 6 + 6 files changed, 544 insertions(+), 26 deletions(-) create mode 100644 binutils/testsuite/binutils-all/dw2-3.S create mode 100644 binutils/testsuite/binutils-all/dw2-3.W diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog index 04dfa46d1c2..827e836e83e 100644 --- a/binutils/testsuite/ChangeLog +++ b/binutils/testsuite/ChangeLog @@ -1,3 +1,19 @@ +2015-04-04 H.J. Lu + + * binutils-all/compress.exp (testfile): Remove suffix. + (compressedfile): Likewise. + (compressedfile2): Likewise. + (libfile): Likewise. + (testfile3): New. + (compressedfile3): Likewise. + Updated. + Add a dw2-3.S test. + (${libfile}.a): Add ${compressedfile3}.o. + * binutils-all/dw2-3.S: New file. + * binutils-all/dw2-3.W: Likewise. + * binutils-all/libdw2-compressed.out: Updated. + * binutils-all/libdw2.out: Likewise. + 2015-04-03 H.J. Lu * lib/binutils-common.exp (is_zlib_supported): Always return 1. diff --git a/binutils/testsuite/binutils-all/compress.exp b/binutils/testsuite/binutils-all/compress.exp index 75b87833708..02111f1af7d 100644 --- a/binutils/testsuite/binutils-all/compress.exp +++ b/binutils/testsuite/binutils-all/compress.exp @@ -20,43 +20,55 @@ if { [is_remote host] || ![is_elf_format] || ![is_zlib_supported] } then { return } -set testfile tmpdir/dw2-1.o -set compressedfile tmpdir/dw2-1-compressed.o +set testfile tmpdir/dw2-1 +set compressedfile tmpdir/dw2-1-compressed set copyfile tmpdir/dw2-copy -set compressedfile2 tmpdir/dw2-2-compressed.o -set libfile tmpdir/libdw2.a +set compressedfile2 tmpdir/dw2-2-compressed +set libfile tmpdir/libdw2 set compressedcopyfile tmpdir/dw2-copy-compressed +set testfile3 tmpdir/dw2-3 +set compressedfile3 tmpdir/dw2-3-compressed -if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S $testfile --nocompress-debug-sections] } then { +if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${testfile}.o --nocompress-debug-sections] } then { unsupported "compressed debug sections" return } -if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S $compressedfile --compress-debug-sections] } then { +if { ![binutils_assemble_flags $srcdir/$subdir/dw2-1.S ${compressedfile}.o --compress-debug-sections] } then { unsupported "compressed debug sections" return } -if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S $compressedfile2 --compress-debug-sections] } then { +if { ![binutils_assemble_flags $srcdir/$subdir/dw2-2.S ${compressedfile2}.o --compress-debug-sections] } then { unsupported "compressed debug sections" return } -remote_file host delete $libfile -set got [binutils_run $AR "rc $libfile $compressedfile $compressedfile2"] +if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${testfile3}.o --nocompress-debug-sections] } then { + unsupported "compressed debug sections" + return +} + +if { ![binutils_assemble_flags $srcdir/$subdir/dw2-3.S ${compressedfile3}.o --compress-debug-sections] } then { + unsupported "compressed debug sections" + return +} + +remote_file host delete ${libfile}.a +set got [binutils_run $AR "rc ${libfile}.a ${compressedfile}.o ${compressedfile2}.o ${compressedfile3}.o"] 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"] +set got [binutils_run $OBJCOPY "--compress-debug-sections ${testfile}.o ${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} + send_log "cmp ${compressedfile}.o ${copyfile}.o\n" + verbose "cmp ${compressedfile}.o ${copyfile}.o" + set src1 ${compressedfile}.o set src2 ${copyfile}.o set status [remote_exec build cmp "${src1} ${src2}"] set exec_output [lindex $status 1] @@ -72,13 +84,13 @@ if ![string match "" $got] then { } set testname "objcopy decompress compressed debug sections" -set got [binutils_run $OBJCOPY "--decompress-debug-sections $compressedfile ${copyfile}.o"] +set got [binutils_run $OBJCOPY "--decompress-debug-sections ${compressedfile}.o ${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} + send_log "cmp ${testfile}.o ${copyfile}.o\n" + verbose "cmp ${testfile}.o ${copyfile}.o" + set src1 ${testfile}.o set src2 ${copyfile}.o set status [remote_exec build cmp "${src1} ${src2}"] set exec_output [lindex $status 1] @@ -94,7 +106,7 @@ if ![string match "" $got] then { } set testname "objcopy decompress debug sections in archive" -set got [binutils_run $OBJCOPY "--decompress-debug-sections $libfile ${copyfile}.a"] +set got [binutils_run $OBJCOPY "--decompress-debug-sections ${libfile}.a ${copyfile}.a"] if ![string match "" $got] then { fail "objcopy ($testname)" } else { @@ -134,7 +146,7 @@ if ![string match "" $got] then { } set testname "objdump compress debug sections" -set got [remote_exec host "$OBJDUMP -W $compressedfile" "" "/dev/null" "objdump.out"] +set got [remote_exec host "$OBJDUMP -W ${compressedfile}.o" "" "/dev/null" "objdump.out"] if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { fail "$testname" send_log "$got\n" @@ -145,22 +157,32 @@ if { [regexp_diff objdump.out $srcdir/$subdir/dw2-1.W] } then { pass "$testname" } -set testfile tmpdir/dw2-emty.o +set testname "objdump compress debug sections 3" +set got [remote_exec host "$OBJDUMP -W ${compressedfile3}.o" "" "/dev/null" "objdump.out"] +if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { + fail "$testname" + send_log "$got\n" +} +if { [regexp_diff objdump.out $srcdir/$subdir/dw2-3.W] } then { + fail "$testname" +} else { + pass "$testname" +} -if { ![binutils_assemble_flags $srcdir/$subdir/dw2-empty.S $testfile --nocompress-debug-sections] } then { +if { ![binutils_assemble_flags $srcdir/$subdir/dw2-empty.S ${testfile}empty.o --nocompress-debug-sections] } then { unsupported "compressed debug sections" return } set testname "objcopy compress empty debug sections" -set got [binutils_run $OBJCOPY "--compress-debug-sections $testfile ${copyfile}.o"] +set got [binutils_run $OBJCOPY "--compress-debug-sections ${testfile}empty.o ${copyfile}empty.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 + send_log "cmp ${testfile}empty.o ${copyfile}empty.o\n" + verbose "cmp ${testfile}empty.o ${copyfile}empty.o" + set src1 ${testfile}empty.o + set src2 ${copyfile}empty.o set status [remote_exec build cmp "${src1} ${src2}"] set exec_output [lindex $status 1] set exec_output [prune_warnings $exec_output] diff --git a/binutils/testsuite/binutils-all/dw2-3.S b/binutils/testsuite/binutils-all/dw2-3.S new file mode 100644 index 00000000000..c033e4dfd32 --- /dev/null +++ b/binutils/testsuite/binutils-all/dw2-3.S @@ -0,0 +1,316 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2004-2015 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 . */ + +/* Test a minimal file containing DWARF-2 information. This test also + serves as a skeleton for other DWARF-2 tests. Most other tests will + not be this extensively itemized and commented... */ + +/* Dummy function to provide debug information for. */ + + .text +.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_int2_in_cu2 /* 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 */ + + /* This type is named "int1" and not "int" to ensure it is unique, + and thus we can easily ensure we expand this CU and not some + other CU with "int". */ +.Ltype_int1_in_cu1: + .uleb128 3 /* Abbrev: DW_TAG_base_type */ + .ascii "int1\0" /* DW_AT_name */ + .byte 4 /* DW_AT_byte_size */ + .byte 5 /* DW_AT_encoding */ + +.Ltype_const_int1_in_cu1: + .uleb128 4 /* Abbrev: DW_TAG_const_type */ + .4byte .Ltype_int1_in_cu1-.Lcu1_begin /* DW_AT_type */ + + .uleb128 5 /* Abbrev: DW_TAG_variable */ + .ascii "one\0" /* DW_AT_name */ + .4byte .Ltype_const_int1_in_cu1-.Lcu1_begin /* DW_AT_type */ + .byte 1 /* DW_AT_const_value */ + + .byte 0 /* End of children of CU */ + +.Lcu1_end: + + /* Second compilation unit. */ +.Lcu2_begin: + /* CU header */ + .4byte .Lcu2_end - .Lcu2_start /* Length of Compilation Unit */ +.Lcu2_start: + .2byte 2 /* DWARF Version */ + .4byte .Labbrev2_begin /* Offset into abbrev section */ + .byte 4 /* Pointer size */ + + /* CU die */ + .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ + .ascii "file1.txt\0" /* DW_AT_name */ + .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ + .byte 1 /* DW_AT_language (C) */ + + /* This type is named "int2" and not "int" to ensure it is unique, + and thus we can easily ensure we expand this CU and not some + other CU with "int". */ +.Ltype_int2_in_cu2: + .uleb128 2 /* Abbrev: DW_TAG_base_type */ + .ascii "int2\0" /* DW_AT_name */ + .byte 4 /* DW_AT_byte_size */ + .byte 5 /* DW_AT_encoding */ + +.Ltype_const_int2_in_cu2: + .uleb128 3 /* Abbrev: DW_TAG_const_type */ + .4byte .Ltype_int2_in_cu2-.Lcu2_begin /* DW_AT_type */ + + .uleb128 4 /* Abbrev: DW_TAG_variable */ + .ascii "two\0" /* DW_AT_name */ + .4byte .Ltype_const_int2_in_cu2-.Lcu2_begin /* DW_AT_type */ + .byte 2 /* DW_AT_const_value */ + + .byte 0 /* End of children of CU */ + +.Lcu2_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 0x10 /* DW_FORM_ref_addr */ + .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 */ + + .uleb128 4 /* Abbrev code */ + .uleb128 0x26 /* DW_TAG_const_type */ + .byte 0x0 /* DW_children_no */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + + .uleb128 5 /* Abbrev code */ + .uleb128 0x34 /* DW_TAG_variable */ + .byte 0x0 /* DW_children_no */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x1c /* DW_AT_const_value */ + .uleb128 0xb /* DW_FORM_data1 */ + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + +.Labbrev2_begin: + .uleb128 1 /* Abbrev code */ + .uleb128 0x11 /* DW_TAG_compile_unit */ + .byte 1 /* has_children */ + .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 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 */ + + .uleb128 3 /* Abbrev code */ + .uleb128 0x26 /* DW_TAG_const_type */ + .byte 0x0 /* DW_children_no */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + + .uleb128 4 /* Abbrev code */ + .uleb128 0x34 /* DW_TAG_variable */ + .byte 0x0 /* DW_children_no */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x1c /* DW_AT_const_value */ + .uleb128 0xb /* DW_FORM_data1 */ + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + +/* 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: diff --git a/binutils/testsuite/binutils-all/dw2-3.W b/binutils/testsuite/binutils-all/dw2-3.W new file mode 100644 index 00000000000..0d0fe6afbbe --- /dev/null +++ b/binutils/testsuite/binutils-all/dw2-3.W @@ -0,0 +1,156 @@ + +.*: +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>: Abbrev Number: 1 \(DW_TAG_compile_unit\) + 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 + + diff --git a/binutils/testsuite/binutils-all/libdw2-compressed.out b/binutils/testsuite/binutils-all/libdw2-compressed.out index 6c1f7f5ef2f..ccee796764b 100644 --- a/binutils/testsuite/binutils-all/libdw2-compressed.out +++ b/binutils/testsuite/binutils-all/libdw2-compressed.out @@ -2,4 +2,6 @@ .* ZLIB.* #... .* ZLIB.* +#... + .* ZLIB.* #pass diff --git a/binutils/testsuite/binutils-all/libdw2.out b/binutils/testsuite/binutils-all/libdw2.out index 457774c05dd..1255cf39906 100644 --- a/binutils/testsuite/binutils-all/libdw2.out +++ b/binutils/testsuite/binutils-all/libdw2.out @@ -10,4 +10,10 @@ \[[ 0-9]+\] \.debug_line[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ [^Z]* #... \[[ 0-9]+\] \.debug_abbrev[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ [^Z]* +#... + \[[ 0-9]+\] \.debug_info[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ [^Z]* +#... + \[[ 0-9]+\] \.debug_abbrev[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ [^Z]* +#... + \[[ 0-9]+\] \.debug_line[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ [^Z]* #pass -- 2.30.2