From: "Natarajan, Kavitha" <Kavitha.Natarajan@amd.com>
To: "binutils@sourceware.org" <binutils@sourceware.org>
Cc: "George, Jini Susan" <JiniSusan.George@amd.com>
Subject: [PATCH] Binutils support for DWARF-5 DW_OP_addrx
Date: Thu, 28 Apr 2022 10:14:33 +0000 [thread overview]
Message-ID: <DM4PR12MB57967946925D3DEC0E9D6437F7FD9@DM4PR12MB5796.namprd12.prod.outlook.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 26933 bytes --]
[Public]
Hi,
When an executable is compiled with -gdwarf-5 option, bintools such as objdump, readelf
do not recognize some of the new DWARF-5 tags. The below binutils patch is to support one
of the new DWARF-5 operation encoding tag DW_OP_addrx.
Before patch:
<1><86>: Abbrev Number: 3 (DW_TAG_variable)
<87> DW_AT_name : (indexed string: 0xc): uni_lang_p
<88> DW_AT_type : <0x4a>
<8c> DW_AT_external : 1
<8c> DW_AT_decl_file : 0
<8d> DW_AT_decl_line : 64
<8e> DW_AT_location : 2 byte block: a1 4 ((Unknown location op 0xa1))
After patch:
<1><86>: Abbrev Number: 3 (DW_TAG_variable)
<87> DW_AT_name : (indexed string: 0xc): uni_lang_p
<88> DW_AT_type : <0x4a>
<8c> DW_AT_external : 1
<8c> DW_AT_decl_file : 0
<8d> DW_AT_decl_line : 64
<8e> DW_AT_location : (DW_OP_addrx <0x4>)
Generated .s file with clang to test this feature as gcc does not emit this tag.
Please review.
Regards,
Kavitha
======================================================================
Binutils tools objdump and readelf to support new dwarf-5
operation encoding, such as, DW_OP_addrx.
Added test points in objdump.exp and readlef.exp.
---
binutils/dwarf.c | 11 +-
binutils/testsuite/binutils-all/objdump.exp | 48 ++-
binutils/testsuite/binutils-all/readelf.exp | 62 +++
binutils/testsuite/binutils-all/testprog.s | 426 ++++++++++++++++++++
4 files changed, 543 insertions(+), 4 deletions(-)
create mode 100644 binutils/testsuite/binutils-all/testprog.s
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index bc862f77c04..fc754f4f73d 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -1721,6 +1721,10 @@ decode_location_expression (unsigned char * data,
printf ("DW_OP_GNU_parameter_ref: <0x%s>",
dwarf_vmatoa ("x", cu_offset + uvalue));
break;
+ case DW_OP_addrx:
+ READ_ULEB (uvalue, data, end);
+ printf ("DW_OP_addrx <0x%s>", dwarf_vmatoa ("x", uvalue));
+ break;
case DW_OP_GNU_addr_index:
READ_ULEB (uvalue, data, end);
printf ("DW_OP_GNU_addr_index <0x%s>", dwarf_vmatoa ("x", uvalue));
@@ -2661,9 +2665,10 @@ read_and_display_attr_value (unsigned long attribute,
uvalue = check_uvalue (block_start, uvalue, end);
- if (do_loc)
- data = block_start + uvalue;
- else
+ data = block_start + uvalue;
+
+ /* DW_OP_addrx has only the index and not address. */
+ if (!do_loc && ((unsigned)(*block_start) != DW_OP_addrx))
data = display_block (block_start, uvalue, end, delimiter);
break;
diff --git a/binutils/testsuite/binutils-all/objdump.exp b/binutils/testsuite/binutils-all/objdump.exp
index 0f160ae5a06..f0a4611dd1f 100644
--- a/binutils/testsuite/binutils-all/objdump.exp
+++ b/binutils/testsuite/binutils-all/objdump.exp
@@ -513,6 +513,52 @@ if { ![is_elf_format] } then {
}
}
+# Test objdump -Wi on a file containing dwarf-5 encodings information.
+
+if { ![is_elf_format] } then {
+ unsupported "objdump DW_OP_addrx test"
+} elseif { ![binutils_assemble $srcdir/$subdir/testprog.s tmpdir/testprog.${obj}] } then {
+ fail "objdump DW_OP_addrx test"
+} else {
+ if [is_remote host] {
+ set op_testfile [remote_download host tmpdir/testprog.${obj}]
+ } else {
+ set op_testfile tmpdir/testprog.${obj}
+ }
+
+ set got [remote_exec host "$OBJDUMP $OBJDUMPFLAGS -Wi $op_testfile" "" "/dev/null" "objdump.out"]
+
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ fail "objdump -Wi (reason: unexpected output)"
+ send_log $got
+ send_log "\n"
+ }
+
+ set output [remote_upload host objdump.out]
+
+ if ![file size $output] then {
+ # If the output file is empty, then this target does not
+ # generate dwarf2 output. This is not a failure.
+ verbose "No output from 'objdump -wi'"
+ untested "objdump -wi"
+ return
+ }
+
+ # Search for strings that should be in the output.
+ set sought ".*\(DW_OP_addrx <0\).*"
+
+ set lines [grep $output $sought]
+ if ![llength $lines] then {
+ fail "objdump -Wi: missing: $sought"
+ send_log objdump.out
+ return
+ } else {
+ pass "objdump -Wi for DW_OP_addrx"
+ }
+
+ file_on_host delete $output
+}
+
proc test_build_id_debuglink {} {
global srcdir
global subdir
@@ -522,7 +568,7 @@ proc test_build_id_debuglink {} {
global OBJDUMP
global CFLAGS_FOR_TARGET
global exe
-
+
set test "build-id-debuglink"
# Use a fixed build-id.
diff --git a/binutils/testsuite/binutils-all/readelf.exp b/binutils/testsuite/binutils-all/readelf.exp
index 8ff756e506f..db0fe88cef7 100644
--- a/binutils/testsuite/binutils-all/readelf.exp
+++ b/binutils/testsuite/binutils-all/readelf.exp
@@ -214,6 +214,67 @@ proc readelf_wi_test {} {
pass "readelf -wi"
}
+# Testing the "readelf -wi" option for dwarf-5 specific information.
+# readelf_wi_test_5{} can be merged to readelf_wi_test{} once gcc
+# supports dwarf-5 encodings.
+
+proc readelf_wi_test_5 {} {
+ global READELF
+ global READELFFLAGS
+ global srcdir
+ global subdir
+
+ # Compile the second test file.
+ if {![binutils_assemble $srcdir/$subdir/testprog.s tmpdir/testprog.o]} {
+ verbose "Unable to assemble test file."
+ untested "readelf -wi (dwarf-5)"
+ return
+ }
+
+ # Download it.
+ set tempfile [remote_download host tmpdir/testprog.o]
+
+ # Run "readelf -wi" on it.
+ set got [remote_exec host "$READELF $READELFFLAGS -wi $tempfile" "" "/dev/null" "readelf.out"]
+
+ # Upload the results.
+ set output [remote_upload host readelf.out]
+
+ file_on_host delete $tempfile
+
+ # Strip any superflous warnings.
+ set got [prune_readelf_wi_warnings [lindex $got 1]]
+
+ if ![string match "" $got] then {
+ fail "readelf $READELFFLAGS -wi (dwarf-5) (reason: unexpected output)"
+ send_log $got
+ send_log "\n"
+ return
+ }
+
+ if ![file size $output] then {
+ # If the output file is empty, then this target does not
+ # generate dwarf2 output. This is not a failure.
+ verbose "No output from 'readelf -wi (dwarf-5)'"
+ untested "readelf -wi (dwarf-5)"
+ return
+ }
+
+ # Search for strings that should be in the output.
+ set sought ".*\(DW_OP_addrx <0\).*"
+
+ set lines [grep $output $sought]
+ if ![llength $lines] then {
+ fail "readelf -wi (dwarf-5): missing: $sought"
+ send_log readelf.out
+ return
+ } else {
+ pass "readelf -wi (dwarf-5)"
+ }
+
+ file_on_host delete $output
+}
+
# This tests "readelf -wa", but on a file with a compressed
# .debug_abbrev section.
@@ -390,6 +451,7 @@ if {![binutils_assemble $srcdir/$subdir/mangled.s tmpdir/mangled.o]} then {
}
readelf_wi_test
+readelf_wi_test_5
readelf_compressed_wa_test
readelf_dump_test
diff --git a/binutils/testsuite/binutils-all/testprog.s b/binutils/testsuite/binutils-all/testprog.s
new file mode 100644
index 00000000000..9db95e24ac2
--- /dev/null
+++ b/binutils/testsuite/binutils-all/testprog.s
@@ -0,0 +1,426 @@
+# Generated from testprog.c
+# clang -gdwarf-5 -S testprog.c -fno-addrsig
+
+ .text
+ .file "testprog.c"
+ .file 0 "/home/kavitha/workarea/binutils-gdb-amd/binutils/testsuite/binutils-all" "testprog.c" md5 0x1a2591dc3647301324c8184161bb46ff
+ .globl fn # -- Begin function fn
+ .p2align 4, 0x90
+ .type fn,@function
+fn: # @fn
+.Lfunc_begin0:
+ .loc 0 13 0 # testprog.c:13:0
+ .cfi_startproc
+# %bb.0:
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset %rbp, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register %rbp
+.Ltmp0:
+ .loc 0 14 3 prologue_end # testprog.c:14:3
+ movl $3, %eax
+ popq %rbp
+ .cfi_def_cfa %rsp, 8
+ retq
+.Ltmp1:
+.Lfunc_end0:
+ .size fn, .Lfunc_end0-fn
+ .cfi_endproc
+ # -- End function
+ .globl main # -- Begin function main
+ .p2align 4, 0x90
+ .type main,@function
+main: # @main
+.Lfunc_begin1:
+ .loc 0 19 0 # testprog.c:19:0
+ .cfi_startproc
+# %bb.0:
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset %rbp, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register %rbp
+ subq $16, %rsp
+ movl $0, -4(%rbp)
+.Ltmp2:
+ .loc 0 20 14 prologue_end # testprog.c:20:14
+ cmpl $0, common
+ .loc 0 21 7 # testprog.c:21:7
+ jne .LBB1_4
+# %bb.1:
+ .loc 0 21 17 is_stmt 0 # testprog.c:21:17
+ cmpl $1, global
+ .loc 0 22 7 is_stmt 1 # testprog.c:22:7
+ jne .LBB1_4
+# %bb.2:
+ .loc 0 22 16 is_stmt 0 # testprog.c:22:16
+ cmpl $2, local
+ .loc 0 23 7 is_stmt 1 # testprog.c:23:7
+ jne .LBB1_4
+# %bb.3:
+ .loc 0 23 10 is_stmt 0 # testprog.c:23:10
+ movl $string, %edi
+ movl $.L.str, %esi
+ callq strcmp
+ .loc 0 23 36 # testprog.c:23:36
+ cmpl $0, %eax
+.Ltmp3:
+ .loc 0 20 7 is_stmt 1 # testprog.c:20:7
+ je .LBB1_5
+.LBB1_4:
+.Ltmp4:
+ .loc 0 25 7 # testprog.c:25:7
+ movabsq $.L.str.1, %rdi
+ movb $0, %al
+ callq printf
+ .loc 0 26 7 # testprog.c:26:7
+ movl $1, -4(%rbp)
+ jmp .LBB1_6
+.Ltmp5:
+.LBB1_5:
+ .loc 0 29 3 # testprog.c:29:3
+ movabsq $.L.str.2, %rdi
+ movb $0, %al
+ callq printf
+ .loc 0 30 3 # testprog.c:30:3
+ movl $0, -4(%rbp)
+.LBB1_6:
+ .loc 0 31 1 # testprog.c:31:1
+ movl -4(%rbp), %eax
+ addq $16, %rsp
+ popq %rbp
+ .cfi_def_cfa %rsp, 8
+ retq
+.Ltmp6:
+.Lfunc_end1:
+ .size main, .Lfunc_end1-main
+ .cfi_endproc
+ # -- End function
+ .type global,@object # @global
+ .data
+ .globl global
+ .p2align 2
+global:
+ .long 1 # 0x1
+ .size global, 4
+
+ .type common,@object # @common
+ .bss
+ .globl common
+ .p2align 2
+common:
+ .long 0 # 0x0
+ .size common, 4
+
+ .type local,@object # @local
+ .data
+ .p2align 2
+local:
+ .long 2 # 0x2
+ .size local, 4
+
+ .type string,@object # @string
+ .section .rodata,"a",@progbits
+string:
+ .asciz "string"
+ .size string, 7
+
+ .type .L.str,@object # @.str
+ .section .rodata.str1.1,"aMS",@progbits,1
+.L.str:
+ .asciz "string"
+ .size .L.str, 7
+
+ .type .L.str.1,@object # @.str.1
+.L.str.1:
+ .asciz "failed\n"
+ .size .L.str.1, 8
+
+ .type .L.str.2,@object # @.str.2
+.L.str.2:
+ .asciz "ok\n"
+ .size .L.str.2, 4
+
+ .section .debug_abbrev,"",@progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 1 # DW_CHILDREN_yes
+ .byte 37 # DW_AT_producer
+ .byte 37 # DW_FORM_strx1
+ .byte 19 # DW_AT_language
+ .byte 5 # DW_FORM_data2
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 114 # DW_AT_str_offsets_base
+ .byte 23 # DW_FORM_sec_offset
+ .byte 16 # DW_AT_stmt_list
+ .byte 23 # DW_FORM_sec_offset
+ .byte 27 # DW_AT_comp_dir
+ .byte 37 # DW_FORM_strx1
+ .byte 17 # DW_AT_low_pc
+ .byte 27 # DW_FORM_addrx
+ .byte 18 # DW_AT_high_pc
+ .byte 6 # DW_FORM_data4
+ .byte 115 # DW_AT_addr_base
+ .byte 23 # DW_FORM_sec_offset
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 2 # Abbreviation Code
+ .byte 52 # DW_TAG_variable
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 63 # DW_AT_external
+ .byte 25 # DW_FORM_flag_present
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 2 # DW_AT_location
+ .byte 24 # DW_FORM_exprloc
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 3 # Abbreviation Code
+ .byte 36 # DW_TAG_base_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 62 # DW_AT_encoding
+ .byte 11 # DW_FORM_data1
+ .byte 11 # DW_AT_byte_size
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 4 # Abbreviation Code
+ .byte 52 # DW_TAG_variable
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 2 # DW_AT_location
+ .byte 24 # DW_FORM_exprloc
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 5 # Abbreviation Code
+ .byte 1 # DW_TAG_array_type
+ .byte 1 # DW_CHILDREN_yes
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 6 # Abbreviation Code
+ .byte 33 # DW_TAG_subrange_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 55 # DW_AT_count
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 7 # Abbreviation Code
+ .byte 38 # DW_TAG_const_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 8 # Abbreviation Code
+ .byte 36 # DW_TAG_base_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 11 # DW_AT_byte_size
+ .byte 11 # DW_FORM_data1
+ .byte 62 # DW_AT_encoding
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 9 # Abbreviation Code
+ .byte 46 # DW_TAG_subprogram
+ .byte 0 # DW_CHILDREN_no
+ .byte 17 # DW_AT_low_pc
+ .byte 27 # DW_FORM_addrx
+ .byte 18 # DW_AT_high_pc
+ .byte 6 # DW_FORM_data4
+ .byte 64 # DW_AT_frame_base
+ .byte 24 # DW_FORM_exprloc
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 39 # DW_AT_prototyped
+ .byte 25 # DW_FORM_flag_present
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 63 # DW_AT_external
+ .byte 25 # DW_FORM_flag_present
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_info,"",@progbits
+.Lcu_begin0:
+ .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
+.Ldebug_info_start0:
+ .short 5 # DWARF version number
+ .byte 1 # DWARF Unit Type
+ .byte 8 # Address Size (in bytes)
+ .long .debug_abbrev # Offset Into Abbrev. Section
+ .byte 1 # Abbrev [1] 0xc:0x7f DW_TAG_compile_unit
+ .byte 0 # DW_AT_producer
+ .short 12 # DW_AT_language
+ .byte 1 # DW_AT_name
+ .long .Lstr_offsets_base0 # DW_AT_str_offsets_base
+ .long .Lline_table_start0 # DW_AT_stmt_list
+ .byte 2 # DW_AT_comp_dir
+ .byte 4 # DW_AT_low_pc
+ .long .Lfunc_end1-.Lfunc_begin0 # DW_AT_high_pc
+ .long .Laddr_table_base0 # DW_AT_addr_base
+ .byte 2 # Abbrev [2] 0x23:0xb DW_TAG_variable
+ .byte 3 # DW_AT_name
+ .long 46 # DW_AT_type
+ # DW_AT_external
+ .byte 0 # DW_AT_decl_file
+ .byte 7 # DW_AT_decl_line
+ .byte 2 # DW_AT_location
+ .byte 161
+ .byte 0
+ .byte 3 # Abbrev [3] 0x2e:0x4 DW_TAG_base_type
+ .byte 4 # DW_AT_name
+ .byte 5 # DW_AT_encoding
+ .byte 4 # DW_AT_byte_size
+ .byte 2 # Abbrev [2] 0x32:0xb DW_TAG_variable
+ .byte 5 # DW_AT_name
+ .long 46 # DW_AT_type
+ # DW_AT_external
+ .byte 0 # DW_AT_decl_file
+ .byte 6 # DW_AT_decl_line
+ .byte 2 # DW_AT_location
+ .byte 161
+ .byte 1
+ .byte 4 # Abbrev [4] 0x3d:0xb DW_TAG_variable
+ .byte 6 # DW_AT_name
+ .long 46 # DW_AT_type
+ .byte 0 # DW_AT_decl_file
+ .byte 8 # DW_AT_decl_line
+ .byte 2 # DW_AT_location
+ .byte 161
+ .byte 2
+ .byte 4 # Abbrev [4] 0x48:0xb DW_TAG_variable
+ .byte 7 # DW_AT_name
+ .long 83 # DW_AT_type
+ .byte 0 # DW_AT_decl_file
+ .byte 9 # DW_AT_decl_line
+ .byte 2 # DW_AT_location
+ .byte 161
+ .byte 3
+ .byte 5 # Abbrev [5] 0x53:0xc DW_TAG_array_type
+ .long 95 # DW_AT_type
+ .byte 6 # Abbrev [6] 0x58:0x6 DW_TAG_subrange_type
+ .long 104 # DW_AT_type
+ .byte 7 # DW_AT_count
+ .byte 0 # End Of Children Mark
+ .byte 7 # Abbrev [7] 0x5f:0x5 DW_TAG_const_type
+ .long 100 # DW_AT_type
+ .byte 3 # Abbrev [3] 0x64:0x4 DW_TAG_base_type
+ .byte 8 # DW_AT_name
+ .byte 6 # DW_AT_encoding
+ .byte 1 # DW_AT_byte_size
+ .byte 8 # Abbrev [8] 0x68:0x4 DW_TAG_base_type
+ .byte 9 # DW_AT_name
+ .byte 8 # DW_AT_byte_size
+ .byte 7 # DW_AT_encoding
+ .byte 9 # Abbrev [9] 0x6c:0xf DW_TAG_subprogram
+ .byte 4 # DW_AT_low_pc
+ .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
+ .byte 1 # DW_AT_frame_base
+ .byte 86
+ .byte 10 # DW_AT_name
+ .byte 0 # DW_AT_decl_file
+ .byte 12 # DW_AT_decl_line
+ # DW_AT_prototyped
+ .long 46 # DW_AT_type
+ # DW_AT_external
+ .byte 9 # Abbrev [9] 0x7b:0xf DW_TAG_subprogram
+ .byte 5 # DW_AT_low_pc
+ .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc
+ .byte 1 # DW_AT_frame_base
+ .byte 86
+ .byte 11 # DW_AT_name
+ .byte 0 # DW_AT_decl_file
+ .byte 18 # DW_AT_decl_line
+ # DW_AT_prototyped
+ .long 46 # DW_AT_type
+ # DW_AT_external
+ .byte 0 # End Of Children Mark
+.Ldebug_info_end0:
+ .section .debug_str_offsets,"",@progbits
+ .long 52 # Length of String Offsets Set
+ .short 5
+ .short 0
+.Lstr_offsets_base0:
+ .section .debug_str,"MS",@progbits,1
+.Linfo_string0:
+ .asciz "Ubuntu clang version 12.0.0-3ubuntu1~20.04.5" # string offset=0
+.Linfo_string1:
+ .asciz "testprog.c" # string offset=45
+.Linfo_string2:
+ .asciz "/home/kavitha/workarea/binutils-gdb-amd/binutils/testsuite/binutils-all" # string offset=56
+.Linfo_string3:
+ .asciz "global" # string offset=128
+.Linfo_string4:
+ .asciz "int" # string offset=135
+.Linfo_string5:
+ .asciz "common" # string offset=139
+.Linfo_string6:
+ .asciz "local" # string offset=146
+.Linfo_string7:
+ .asciz "string" # string offset=152
+.Linfo_string8:
+ .asciz "char" # string offset=159
+.Linfo_string9:
+ .asciz "__ARRAY_SIZE_TYPE__" # string offset=164
+.Linfo_string10:
+ .asciz "fn" # string offset=184
+.Linfo_string11:
+ .asciz "main" # string offset=187
+ .section .debug_str_offsets,"",@progbits
+ .long .Linfo_string0
+ .long .Linfo_string1
+ .long .Linfo_string2
+ .long .Linfo_string3
+ .long .Linfo_string4
+ .long .Linfo_string5
+ .long .Linfo_string6
+ .long .Linfo_string7
+ .long .Linfo_string8
+ .long .Linfo_string9
+ .long .Linfo_string10
+ .long .Linfo_string11
+ .section .debug_addr,"",@progbits
+ .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution
+.Ldebug_addr_start0:
+ .short 5 # DWARF version number
+ .byte 8 # Address size
+ .byte 0 # Segment selector size
+.Laddr_table_base0:
+ .quad global
+ .quad common
+ .quad local
+ .quad string
+ .quad .Lfunc_begin0
+ .quad .Lfunc_begin1
+.Ldebug_addr_end0:
+ .ident "Ubuntu clang version 12.0.0-3ubuntu1~20.04.5"
+ .section ".note.GNU-stack","",@progbits
+ .section .debug_line,"",@progbits
+.Lline_table_start0:
--
[-- Attachment #2: 0001-Binutils support for DWARF-5 DW_OP_addrx.patch --]
[-- Type: application/octet-stream, Size: 24490 bytes --]
Binutils tools objdump and readelf to support new dwarf-5
operation encoding, such as, DW_OP_addrx.
Added test points in objdump.exp and readlef.exp.
---
binutils/dwarf.c | 11 +-
binutils/testsuite/binutils-all/objdump.exp | 48 ++-
binutils/testsuite/binutils-all/readelf.exp | 62 +++
binutils/testsuite/binutils-all/testprog.s | 426 ++++++++++++++++++++
4 files changed, 543 insertions(+), 4 deletions(-)
create mode 100644 binutils/testsuite/binutils-all/testprog.s
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index bc862f77c04..fc754f4f73d 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -1721,6 +1721,10 @@ decode_location_expression (unsigned char * data,
printf ("DW_OP_GNU_parameter_ref: <0x%s>",
dwarf_vmatoa ("x", cu_offset + uvalue));
break;
+ case DW_OP_addrx:
+ READ_ULEB (uvalue, data, end);
+ printf ("DW_OP_addrx <0x%s>", dwarf_vmatoa ("x", uvalue));
+ break;
case DW_OP_GNU_addr_index:
READ_ULEB (uvalue, data, end);
printf ("DW_OP_GNU_addr_index <0x%s>", dwarf_vmatoa ("x", uvalue));
@@ -2661,9 +2665,10 @@ read_and_display_attr_value (unsigned long attribute,
uvalue = check_uvalue (block_start, uvalue, end);
- if (do_loc)
- data = block_start + uvalue;
- else
+ data = block_start + uvalue;
+
+ /* DW_OP_addrx has only the index and not address. */
+ if (!do_loc && ((unsigned)(*block_start) != DW_OP_addrx))
data = display_block (block_start, uvalue, end, delimiter);
break;
diff --git a/binutils/testsuite/binutils-all/objdump.exp b/binutils/testsuite/binutils-all/objdump.exp
index 0f160ae5a06..f0a4611dd1f 100644
--- a/binutils/testsuite/binutils-all/objdump.exp
+++ b/binutils/testsuite/binutils-all/objdump.exp
@@ -513,6 +513,52 @@ if { ![is_elf_format] } then {
}
}
+# Test objdump -Wi on a file containing dwarf-5 encodings information.
+
+if { ![is_elf_format] } then {
+ unsupported "objdump DW_OP_addrx test"
+} elseif { ![binutils_assemble $srcdir/$subdir/testprog.s tmpdir/testprog.${obj}] } then {
+ fail "objdump DW_OP_addrx test"
+} else {
+ if [is_remote host] {
+ set op_testfile [remote_download host tmpdir/testprog.${obj}]
+ } else {
+ set op_testfile tmpdir/testprog.${obj}
+ }
+
+ set got [remote_exec host "$OBJDUMP $OBJDUMPFLAGS -Wi $op_testfile" "" "/dev/null" "objdump.out"]
+
+ if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+ fail "objdump -Wi (reason: unexpected output)"
+ send_log $got
+ send_log "\n"
+ }
+
+ set output [remote_upload host objdump.out]
+
+ if ![file size $output] then {
+ # If the output file is empty, then this target does not
+ # generate dwarf2 output. This is not a failure.
+ verbose "No output from 'objdump -wi'"
+ untested "objdump -wi"
+ return
+ }
+
+ # Search for strings that should be in the output.
+ set sought ".*\(DW_OP_addrx <0\).*"
+
+ set lines [grep $output $sought]
+ if ![llength $lines] then {
+ fail "objdump -Wi: missing: $sought"
+ send_log objdump.out
+ return
+ } else {
+ pass "objdump -Wi for DW_OP_addrx"
+ }
+
+ file_on_host delete $output
+}
+
proc test_build_id_debuglink {} {
global srcdir
global subdir
@@ -522,7 +568,7 @@ proc test_build_id_debuglink {} {
global OBJDUMP
global CFLAGS_FOR_TARGET
global exe
-
+
set test "build-id-debuglink"
# Use a fixed build-id.
diff --git a/binutils/testsuite/binutils-all/readelf.exp b/binutils/testsuite/binutils-all/readelf.exp
index 8ff756e506f..db0fe88cef7 100644
--- a/binutils/testsuite/binutils-all/readelf.exp
+++ b/binutils/testsuite/binutils-all/readelf.exp
@@ -214,6 +214,67 @@ proc readelf_wi_test {} {
pass "readelf -wi"
}
+# Testing the "readelf -wi" option for dwarf-5 specific information.
+# readelf_wi_test_5{} can be merged to readelf_wi_test{} once gcc
+# supports dwarf-5 encodings.
+
+proc readelf_wi_test_5 {} {
+ global READELF
+ global READELFFLAGS
+ global srcdir
+ global subdir
+
+ # Compile the second test file.
+ if {![binutils_assemble $srcdir/$subdir/testprog.s tmpdir/testprog.o]} {
+ verbose "Unable to assemble test file."
+ untested "readelf -wi (dwarf-5)"
+ return
+ }
+
+ # Download it.
+ set tempfile [remote_download host tmpdir/testprog.o]
+
+ # Run "readelf -wi" on it.
+ set got [remote_exec host "$READELF $READELFFLAGS -wi $tempfile" "" "/dev/null" "readelf.out"]
+
+ # Upload the results.
+ set output [remote_upload host readelf.out]
+
+ file_on_host delete $tempfile
+
+ # Strip any superflous warnings.
+ set got [prune_readelf_wi_warnings [lindex $got 1]]
+
+ if ![string match "" $got] then {
+ fail "readelf $READELFFLAGS -wi (dwarf-5) (reason: unexpected output)"
+ send_log $got
+ send_log "\n"
+ return
+ }
+
+ if ![file size $output] then {
+ # If the output file is empty, then this target does not
+ # generate dwarf2 output. This is not a failure.
+ verbose "No output from 'readelf -wi (dwarf-5)'"
+ untested "readelf -wi (dwarf-5)"
+ return
+ }
+
+ # Search for strings that should be in the output.
+ set sought ".*\(DW_OP_addrx <0\).*"
+
+ set lines [grep $output $sought]
+ if ![llength $lines] then {
+ fail "readelf -wi (dwarf-5): missing: $sought"
+ send_log readelf.out
+ return
+ } else {
+ pass "readelf -wi (dwarf-5)"
+ }
+
+ file_on_host delete $output
+}
+
# This tests "readelf -wa", but on a file with a compressed
# .debug_abbrev section.
@@ -390,6 +451,7 @@ if {![binutils_assemble $srcdir/$subdir/mangled.s tmpdir/mangled.o]} then {
}
readelf_wi_test
+readelf_wi_test_5
readelf_compressed_wa_test
readelf_dump_test
diff --git a/binutils/testsuite/binutils-all/testprog.s b/binutils/testsuite/binutils-all/testprog.s
new file mode 100644
index 00000000000..9db95e24ac2
--- /dev/null
+++ b/binutils/testsuite/binutils-all/testprog.s
@@ -0,0 +1,426 @@
+# Generated from testprog.c
+# clang -gdwarf-5 -S testprog.c -fno-addrsig
+
+ .text
+ .file "testprog.c"
+ .file 0 "/home/kavitha/workarea/binutils-gdb-amd/binutils/testsuite/binutils-all" "testprog.c" md5 0x1a2591dc3647301324c8184161bb46ff
+ .globl fn # -- Begin function fn
+ .p2align 4, 0x90
+ .type fn,@function
+fn: # @fn
+.Lfunc_begin0:
+ .loc 0 13 0 # testprog.c:13:0
+ .cfi_startproc
+# %bb.0:
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset %rbp, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register %rbp
+.Ltmp0:
+ .loc 0 14 3 prologue_end # testprog.c:14:3
+ movl $3, %eax
+ popq %rbp
+ .cfi_def_cfa %rsp, 8
+ retq
+.Ltmp1:
+.Lfunc_end0:
+ .size fn, .Lfunc_end0-fn
+ .cfi_endproc
+ # -- End function
+ .globl main # -- Begin function main
+ .p2align 4, 0x90
+ .type main,@function
+main: # @main
+.Lfunc_begin1:
+ .loc 0 19 0 # testprog.c:19:0
+ .cfi_startproc
+# %bb.0:
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset %rbp, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register %rbp
+ subq $16, %rsp
+ movl $0, -4(%rbp)
+.Ltmp2:
+ .loc 0 20 14 prologue_end # testprog.c:20:14
+ cmpl $0, common
+ .loc 0 21 7 # testprog.c:21:7
+ jne .LBB1_4
+# %bb.1:
+ .loc 0 21 17 is_stmt 0 # testprog.c:21:17
+ cmpl $1, global
+ .loc 0 22 7 is_stmt 1 # testprog.c:22:7
+ jne .LBB1_4
+# %bb.2:
+ .loc 0 22 16 is_stmt 0 # testprog.c:22:16
+ cmpl $2, local
+ .loc 0 23 7 is_stmt 1 # testprog.c:23:7
+ jne .LBB1_4
+# %bb.3:
+ .loc 0 23 10 is_stmt 0 # testprog.c:23:10
+ movl $string, %edi
+ movl $.L.str, %esi
+ callq strcmp
+ .loc 0 23 36 # testprog.c:23:36
+ cmpl $0, %eax
+.Ltmp3:
+ .loc 0 20 7 is_stmt 1 # testprog.c:20:7
+ je .LBB1_5
+.LBB1_4:
+.Ltmp4:
+ .loc 0 25 7 # testprog.c:25:7
+ movabsq $.L.str.1, %rdi
+ movb $0, %al
+ callq printf
+ .loc 0 26 7 # testprog.c:26:7
+ movl $1, -4(%rbp)
+ jmp .LBB1_6
+.Ltmp5:
+.LBB1_5:
+ .loc 0 29 3 # testprog.c:29:3
+ movabsq $.L.str.2, %rdi
+ movb $0, %al
+ callq printf
+ .loc 0 30 3 # testprog.c:30:3
+ movl $0, -4(%rbp)
+.LBB1_6:
+ .loc 0 31 1 # testprog.c:31:1
+ movl -4(%rbp), %eax
+ addq $16, %rsp
+ popq %rbp
+ .cfi_def_cfa %rsp, 8
+ retq
+.Ltmp6:
+.Lfunc_end1:
+ .size main, .Lfunc_end1-main
+ .cfi_endproc
+ # -- End function
+ .type global,@object # @global
+ .data
+ .globl global
+ .p2align 2
+global:
+ .long 1 # 0x1
+ .size global, 4
+
+ .type common,@object # @common
+ .bss
+ .globl common
+ .p2align 2
+common:
+ .long 0 # 0x0
+ .size common, 4
+
+ .type local,@object # @local
+ .data
+ .p2align 2
+local:
+ .long 2 # 0x2
+ .size local, 4
+
+ .type string,@object # @string
+ .section .rodata,"a",@progbits
+string:
+ .asciz "string"
+ .size string, 7
+
+ .type .L.str,@object # @.str
+ .section .rodata.str1.1,"aMS",@progbits,1
+.L.str:
+ .asciz "string"
+ .size .L.str, 7
+
+ .type .L.str.1,@object # @.str.1
+.L.str.1:
+ .asciz "failed\n"
+ .size .L.str.1, 8
+
+ .type .L.str.2,@object # @.str.2
+.L.str.2:
+ .asciz "ok\n"
+ .size .L.str.2, 4
+
+ .section .debug_abbrev,"",@progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 1 # DW_CHILDREN_yes
+ .byte 37 # DW_AT_producer
+ .byte 37 # DW_FORM_strx1
+ .byte 19 # DW_AT_language
+ .byte 5 # DW_FORM_data2
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 114 # DW_AT_str_offsets_base
+ .byte 23 # DW_FORM_sec_offset
+ .byte 16 # DW_AT_stmt_list
+ .byte 23 # DW_FORM_sec_offset
+ .byte 27 # DW_AT_comp_dir
+ .byte 37 # DW_FORM_strx1
+ .byte 17 # DW_AT_low_pc
+ .byte 27 # DW_FORM_addrx
+ .byte 18 # DW_AT_high_pc
+ .byte 6 # DW_FORM_data4
+ .byte 115 # DW_AT_addr_base
+ .byte 23 # DW_FORM_sec_offset
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 2 # Abbreviation Code
+ .byte 52 # DW_TAG_variable
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 63 # DW_AT_external
+ .byte 25 # DW_FORM_flag_present
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 2 # DW_AT_location
+ .byte 24 # DW_FORM_exprloc
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 3 # Abbreviation Code
+ .byte 36 # DW_TAG_base_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 62 # DW_AT_encoding
+ .byte 11 # DW_FORM_data1
+ .byte 11 # DW_AT_byte_size
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 4 # Abbreviation Code
+ .byte 52 # DW_TAG_variable
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 2 # DW_AT_location
+ .byte 24 # DW_FORM_exprloc
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 5 # Abbreviation Code
+ .byte 1 # DW_TAG_array_type
+ .byte 1 # DW_CHILDREN_yes
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 6 # Abbreviation Code
+ .byte 33 # DW_TAG_subrange_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 55 # DW_AT_count
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 7 # Abbreviation Code
+ .byte 38 # DW_TAG_const_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 8 # Abbreviation Code
+ .byte 36 # DW_TAG_base_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 11 # DW_AT_byte_size
+ .byte 11 # DW_FORM_data1
+ .byte 62 # DW_AT_encoding
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 9 # Abbreviation Code
+ .byte 46 # DW_TAG_subprogram
+ .byte 0 # DW_CHILDREN_no
+ .byte 17 # DW_AT_low_pc
+ .byte 27 # DW_FORM_addrx
+ .byte 18 # DW_AT_high_pc
+ .byte 6 # DW_FORM_data4
+ .byte 64 # DW_AT_frame_base
+ .byte 24 # DW_FORM_exprloc
+ .byte 3 # DW_AT_name
+ .byte 37 # DW_FORM_strx1
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 39 # DW_AT_prototyped
+ .byte 25 # DW_FORM_flag_present
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 63 # DW_AT_external
+ .byte 25 # DW_FORM_flag_present
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_info,"",@progbits
+.Lcu_begin0:
+ .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
+.Ldebug_info_start0:
+ .short 5 # DWARF version number
+ .byte 1 # DWARF Unit Type
+ .byte 8 # Address Size (in bytes)
+ .long .debug_abbrev # Offset Into Abbrev. Section
+ .byte 1 # Abbrev [1] 0xc:0x7f DW_TAG_compile_unit
+ .byte 0 # DW_AT_producer
+ .short 12 # DW_AT_language
+ .byte 1 # DW_AT_name
+ .long .Lstr_offsets_base0 # DW_AT_str_offsets_base
+ .long .Lline_table_start0 # DW_AT_stmt_list
+ .byte 2 # DW_AT_comp_dir
+ .byte 4 # DW_AT_low_pc
+ .long .Lfunc_end1-.Lfunc_begin0 # DW_AT_high_pc
+ .long .Laddr_table_base0 # DW_AT_addr_base
+ .byte 2 # Abbrev [2] 0x23:0xb DW_TAG_variable
+ .byte 3 # DW_AT_name
+ .long 46 # DW_AT_type
+ # DW_AT_external
+ .byte 0 # DW_AT_decl_file
+ .byte 7 # DW_AT_decl_line
+ .byte 2 # DW_AT_location
+ .byte 161
+ .byte 0
+ .byte 3 # Abbrev [3] 0x2e:0x4 DW_TAG_base_type
+ .byte 4 # DW_AT_name
+ .byte 5 # DW_AT_encoding
+ .byte 4 # DW_AT_byte_size
+ .byte 2 # Abbrev [2] 0x32:0xb DW_TAG_variable
+ .byte 5 # DW_AT_name
+ .long 46 # DW_AT_type
+ # DW_AT_external
+ .byte 0 # DW_AT_decl_file
+ .byte 6 # DW_AT_decl_line
+ .byte 2 # DW_AT_location
+ .byte 161
+ .byte 1
+ .byte 4 # Abbrev [4] 0x3d:0xb DW_TAG_variable
+ .byte 6 # DW_AT_name
+ .long 46 # DW_AT_type
+ .byte 0 # DW_AT_decl_file
+ .byte 8 # DW_AT_decl_line
+ .byte 2 # DW_AT_location
+ .byte 161
+ .byte 2
+ .byte 4 # Abbrev [4] 0x48:0xb DW_TAG_variable
+ .byte 7 # DW_AT_name
+ .long 83 # DW_AT_type
+ .byte 0 # DW_AT_decl_file
+ .byte 9 # DW_AT_decl_line
+ .byte 2 # DW_AT_location
+ .byte 161
+ .byte 3
+ .byte 5 # Abbrev [5] 0x53:0xc DW_TAG_array_type
+ .long 95 # DW_AT_type
+ .byte 6 # Abbrev [6] 0x58:0x6 DW_TAG_subrange_type
+ .long 104 # DW_AT_type
+ .byte 7 # DW_AT_count
+ .byte 0 # End Of Children Mark
+ .byte 7 # Abbrev [7] 0x5f:0x5 DW_TAG_const_type
+ .long 100 # DW_AT_type
+ .byte 3 # Abbrev [3] 0x64:0x4 DW_TAG_base_type
+ .byte 8 # DW_AT_name
+ .byte 6 # DW_AT_encoding
+ .byte 1 # DW_AT_byte_size
+ .byte 8 # Abbrev [8] 0x68:0x4 DW_TAG_base_type
+ .byte 9 # DW_AT_name
+ .byte 8 # DW_AT_byte_size
+ .byte 7 # DW_AT_encoding
+ .byte 9 # Abbrev [9] 0x6c:0xf DW_TAG_subprogram
+ .byte 4 # DW_AT_low_pc
+ .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
+ .byte 1 # DW_AT_frame_base
+ .byte 86
+ .byte 10 # DW_AT_name
+ .byte 0 # DW_AT_decl_file
+ .byte 12 # DW_AT_decl_line
+ # DW_AT_prototyped
+ .long 46 # DW_AT_type
+ # DW_AT_external
+ .byte 9 # Abbrev [9] 0x7b:0xf DW_TAG_subprogram
+ .byte 5 # DW_AT_low_pc
+ .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc
+ .byte 1 # DW_AT_frame_base
+ .byte 86
+ .byte 11 # DW_AT_name
+ .byte 0 # DW_AT_decl_file
+ .byte 18 # DW_AT_decl_line
+ # DW_AT_prototyped
+ .long 46 # DW_AT_type
+ # DW_AT_external
+ .byte 0 # End Of Children Mark
+.Ldebug_info_end0:
+ .section .debug_str_offsets,"",@progbits
+ .long 52 # Length of String Offsets Set
+ .short 5
+ .short 0
+.Lstr_offsets_base0:
+ .section .debug_str,"MS",@progbits,1
+.Linfo_string0:
+ .asciz "Ubuntu clang version 12.0.0-3ubuntu1~20.04.5" # string offset=0
+.Linfo_string1:
+ .asciz "testprog.c" # string offset=45
+.Linfo_string2:
+ .asciz "/home/kavitha/workarea/binutils-gdb-amd/binutils/testsuite/binutils-all" # string offset=56
+.Linfo_string3:
+ .asciz "global" # string offset=128
+.Linfo_string4:
+ .asciz "int" # string offset=135
+.Linfo_string5:
+ .asciz "common" # string offset=139
+.Linfo_string6:
+ .asciz "local" # string offset=146
+.Linfo_string7:
+ .asciz "string" # string offset=152
+.Linfo_string8:
+ .asciz "char" # string offset=159
+.Linfo_string9:
+ .asciz "__ARRAY_SIZE_TYPE__" # string offset=164
+.Linfo_string10:
+ .asciz "fn" # string offset=184
+.Linfo_string11:
+ .asciz "main" # string offset=187
+ .section .debug_str_offsets,"",@progbits
+ .long .Linfo_string0
+ .long .Linfo_string1
+ .long .Linfo_string2
+ .long .Linfo_string3
+ .long .Linfo_string4
+ .long .Linfo_string5
+ .long .Linfo_string6
+ .long .Linfo_string7
+ .long .Linfo_string8
+ .long .Linfo_string9
+ .long .Linfo_string10
+ .long .Linfo_string11
+ .section .debug_addr,"",@progbits
+ .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution
+.Ldebug_addr_start0:
+ .short 5 # DWARF version number
+ .byte 8 # Address size
+ .byte 0 # Segment selector size
+.Laddr_table_base0:
+ .quad global
+ .quad common
+ .quad local
+ .quad string
+ .quad .Lfunc_begin0
+ .quad .Lfunc_begin1
+.Ldebug_addr_end0:
+ .ident "Ubuntu clang version 12.0.0-3ubuntu1~20.04.5"
+ .section ".note.GNU-stack","",@progbits
+ .section .debug_line,"",@progbits
+.Lline_table_start0:
--
2.25.1
next reply other threads:[~2022-04-28 10:14 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-28 10:14 Natarajan, Kavitha [this message]
2022-04-29 14:21 ` Nick Clifton
2022-05-20 10:38 ` Natarajan, Kavitha
2022-05-25 15:13 ` Nick Clifton
2022-05-25 23:42 ` Alan Modra
2022-05-26 4:35 ` Natarajan, Kavitha
2022-05-26 7:19 ` Luis Machado
2022-05-26 8:04 ` Alan Modra
2022-05-26 8:06 ` Luis Machado
-- strict thread matches above, loose matches on Subject: below --
2022-04-27 10:33 Natarajan, Kavitha
2022-04-28 9:54 ` Nick Clifton
2022-04-28 10:19 ` Natarajan, Kavitha
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DM4PR12MB57967946925D3DEC0E9D6437F7FD9@DM4PR12MB5796.namprd12.prod.outlook.com \
--to=kavitha.natarajan@amd.com \
--cc=JiniSusan.George@amd.com \
--cc=binutils@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).