[Lldb-commits] [lldb] 011e7bc - Revert "[lldb] Fix handling of `DW_AT_decl_file` according to D91014"

Jan Kratochvil via lldb-commits lldb-commits at lists.llvm.org
Mon Mar 1 11:46:17 PST 2021


Author: Jan Kratochvil
Date: 2021-03-01T20:45:30+01:00
New Revision: 011e7bcaa3194ed4ca3fec48263f5ef69fc1813c

URL: https://github.com/llvm/llvm-project/commit/011e7bcaa3194ed4ca3fec48263f5ef69fc1813c
DIFF: https://github.com/llvm/llvm-project/commit/011e7bcaa3194ed4ca3fec48263f5ef69fc1813c.diff

LOG: Revert "[lldb] Fix handling of `DW_AT_decl_file` according to D91014"

This reverts commit 7ec7876feda412b6edad0d83565395ef2fd5a004.

Non-x86_64 non-Linux bots broke by the testcase.

Added: 
    

Modified: 
    lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
    lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp

Removed: 
    lldb/test/Shell/SymbolFile/DWARF/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu1.s
    lldb/test/Shell/SymbolFile/DWARF/Inputs/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu2.s


################################################################################
diff  --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
index af01a8f53518..188a667ca564 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -2201,8 +2201,7 @@ size_t DWARFASTParserClang::ParseChildEnumerators(
             case DW_AT_description:
             default:
             case DW_AT_decl_file:
-              decl.SetFile(attributes.CompileUnitAtIndex(i)->GetFile(
-                  form_value.Unsigned()));
+              decl.SetFile(die.GetCU()->GetFile(form_value.Unsigned()));
               break;
             case DW_AT_decl_line:
               decl.SetLine(form_value.Unsigned());

diff  --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 587550961ec9..7d273cb7df1b 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -3126,8 +3126,8 @@ VariableSP SymbolFileDWARF::ParseVariableDIE(const SymbolContext &sc,
       continue;
     switch (attr) {
     case DW_AT_decl_file:
-      decl.SetFile(
-          attributes.CompileUnitAtIndex(i)->GetFile(form_value.Unsigned()));
+      decl.SetFile(sc.comp_unit->GetSupportFiles().GetFileSpecAtIndex(
+          form_value.Unsigned()));
       break;
     case DW_AT_decl_line:
       decl.SetLine(form_value.Unsigned());

diff  --git a/lldb/test/Shell/SymbolFile/DWARF/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu1.s b/lldb/test/Shell/SymbolFile/DWARF/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu1.s
deleted file mode 100644
index c0998a1711aa..000000000000
--- a/lldb/test/Shell/SymbolFile/DWARF/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu1.s
+++ /dev/null
@@ -1,170 +0,0 @@
-# Check that DW_AT_decl_file of DW_AT_variable which is inherited by
-# DW_AT_abstract_origin from a 
diff erent DW_TAG_compile_unit is using the
-# DW_TAG_compile_unit->DW_AT_stmt_list where the DW_AT_decl_file is located (and
-# not where the DW_AT_abstract_origin is located).
-# DW_TAG_variable in CU 1 is using DW_AT_decl_file 3.
-# CU 1 has files: 
-# file_names[  1]: name: "inlinevarother.h"
-# file_names[  2]: name: "inlinevar1.c"
-# file_names[  3]: name: "inlinevar.h"
-# CU 2 has files: 
-# file_names[  1]: name: "inlinevar2.c"
-# file_names[  2]: name: "inlinevar.h"
-
-# REQUIRES: x86
-
-// RUN: %clang -o %t --target=x86_64-pc-linux %s \
-// RUN:   %S/Inputs/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu2.s
-
-# RUN: %lldb %t \
-# RUN:   -o 'b other' -o r -o disas -o 'frame variable --show-declaration' \
-# RUN:   -o exit | FileCheck %s
-
-# CHECK: inlinevar.h:2: (int) var = {{.*}}
-# Unfixed LLDB did show only: (int) var = {{.*}}
-
-	.text
-	.file	"inlinevar1.c"
-	.file	1 "" "./inlinevarother.h"
-	.globl	main                            # -- Begin function main
-	.type	main, at function
-main:                                   # @main
-.Lfunc_begin1:
-	.file	2 "" "inlinevar1.c"
-	.loc	2 4 0                           # inlinevar1.c:4:0
-.Ltmp2:
-	.file	3 "" "./inlinevar.h"
-	.loc	3 2 16 prologue_end             # ./inlinevar.h:2:16
-	movl	$42, %eax 
-	pushq	%rax
-	.loc	3 3 10                          # ./inlinevar.h:3:10
-.Ltmp3:
-	.loc	2 5 20                          # inlinevar1.c:5:20
-	callq	other
-	popq	%rcx
-	.loc	2 5 19                          # inlinevar1.c:5:19
-	addl	%ecx, %eax
-	.loc	2 5 3                           # inlinevar1.c:5:3
-	retq
-.Ltmp4:
-.Lfunc_end1:
-	.size	main, .Lfunc_end1-main
-                                        # -- End function
-	.section	.debug_abbrev,"", at progbits
-	.byte	1                               # Abbreviation Code
-	.byte	17                              # DW_TAG_compile_unit
-	.byte	1                               # DW_CHILDREN_yes
-	.byte	37                              # DW_AT_producer
-	.byte	14                              # DW_FORM_strp
-	.byte	19                              # DW_AT_language
-	.byte	5                               # DW_FORM_data2
-	.byte	3                               # DW_AT_name
-	.byte	14                              # DW_FORM_strp
-	.byte	16                              # DW_AT_stmt_list
-	.byte	23                              # DW_FORM_sec_offset
-	.byte	27                              # DW_AT_comp_dir
-	.byte	14                              # DW_FORM_strp
-	.byte	17                              # DW_AT_low_pc
-	.byte	1                               # DW_FORM_addr
-	.byte	18                              # DW_AT_high_pc
-	.byte	6                               # DW_FORM_data4
-	.byte	0                               # EOM(1)
-	.byte	0                               # EOM(2)
-	.byte	3                               # Abbreviation Code
-	.byte	46                              # DW_TAG_subprogram
-	.byte	1                               # DW_CHILDREN_yes
-	.byte	3                               # DW_AT_name
-	.byte	14                              # DW_FORM_strp
-	.byte	58                              # DW_AT_decl_file
-	.byte	11                              # DW_FORM_data1
-	.byte	59                              # DW_AT_decl_line
-	.byte	11                              # DW_FORM_data1
-	.byte	73                              # DW_AT_type
-	.byte	19                              # DW_FORM_ref4
-	.byte	32                              # DW_AT_inline
-	.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	14                              # DW_FORM_strp
-	.byte	58                              # DW_AT_decl_file
-	.byte	11                              # DW_FORM_data1
-	.byte	59                              # DW_AT_decl_line
-	.byte	11                              # DW_FORM_data1
-	.byte	73                              # DW_AT_type
-	.byte	19                              # DW_FORM_ref4
-	.byte	0                               # EOM(1)
-	.byte	0                               # EOM(2)
-	.byte	5                               # Abbreviation Code
-	.byte	36                              # DW_TAG_base_type
-	.byte	0                               # DW_CHILDREN_no
-	.byte	3                               # DW_AT_name
-	.byte	14                              # DW_FORM_strp
-	.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	0                               # EOM(3)
-	.section	.debug_info,"", at progbits
-.Lcu_begin0:
-	.long	.Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
-.Ldebug_info_start0:
-	.short	4                               # DWARF version number
-	.long	.debug_abbrev                   # Offset Into Abbrev. Section
-	.byte	8                               # Address Size (in bytes)
-	.byte	1                               # Abbrev [1] DW_TAG_compile_unit
-	.long	.Linfo_string0                  # DW_AT_producer
-	.short	0xc                             # DW_AT_language
-	.long	.Linfo_string1                  # DW_AT_name
-	.long	.Lline_table_start0             # DW_AT_stmt_list
-	.long	.Linfo_string2                  # DW_AT_comp_dir
-	.quad	.Lfunc_begin1                   # DW_AT_low_pc
-	.long	.Lfunc_end1-.Lfunc_begin1       # DW_AT_high_pc
-	.globl	debuginfo_func_inlined
-debuginfo_func_inlined:
-.Lfunc_inlined:
-	.byte	3                               # Abbrev [3] DW_TAG_subprogram
-	.long	.Linfo_string4                  # DW_AT_name
-	.byte	3                               # DW_AT_decl_file
-	.byte	1                               # DW_AT_decl_line
-	.long	.Ltype_int-.Lcu_begin0          # DW_AT_type
-	.byte	1                               # DW_AT_inline
-	.globl	debuginfo_var_var
-debuginfo_var_var:
-.Lvar_var:
-	.byte	4                               # Abbrev [4] DW_TAG_variable
-	.long	.Linfo_string6                  # DW_AT_name
-	.byte	3                               # DW_AT_decl_file
-	.byte	2                               # DW_AT_decl_line
-	.long	.Ltype_int-.Lcu_begin0          # DW_AT_type
-	.byte	0                               # End Of Children Mark
-.Ltype_int:
-	.byte	5                               # Abbrev [5] DW_TAG_base_type
-	.long	.Linfo_string5                  # DW_AT_name
-	.byte	5                               # DW_AT_encoding
-	.byte	4                               # DW_AT_byte_size
-	.byte	0                               # End Of Children Mark
-.Ldebug_info_end0:
-	.section	.debug_str,"MS", at progbits,1
-.Linfo_string0:
-	.asciz	"clang version 11.0.0 + hand coding"
-.Linfo_string1:
-	.asciz	"inlinevar1.c"
-.Linfo_string2:
-	.asciz	""
-.Linfo_string4:
-	.asciz	"inlined"
-.Linfo_string5:
-	.asciz	"int"
-.Linfo_string6:
-	.asciz	"var"
-	.section	".note.GNU-stack","", at progbits
-	.addrsig
-	.addrsig_sym other
-	.section	.debug_line,"", at progbits
-.Lline_table_start0:

diff  --git a/lldb/test/Shell/SymbolFile/DWARF/Inputs/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu2.s b/lldb/test/Shell/SymbolFile/DWARF/Inputs/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu2.s
deleted file mode 100644
index 6a8dfa3eb63f..000000000000
--- a/lldb/test/Shell/SymbolFile/DWARF/Inputs/DW_TAG_variable-DW_AT_decl_file-DW_AT_abstract_origin-crosscu2.s
+++ /dev/null
@@ -1,160 +0,0 @@
-	.text
-	.file	"inlinevar2.c"
-	.globl	other                       # -- Begin function other
-	.type	other, at function
-other:                              # @other
-.Lfunc_begin0:
-	.file	1 "" "inlinevar2.c"
-	.loc	1 3 0                           # inlinevar2.c:3:0
-.Ltmp0:
-	.file	2 "" "./inlinevar.h"
-	.loc	2 2 16 prologue_end             # ./inlinevar.h:2:16
-	movl	$42, %eax
-	.loc	2 3 10                          # ./inlinevar.h:3:10
-	.loc	1 3 41                          # inlinevar2.c:3:41
-	retq
-.Ltmp1:
-.Ltmp2:
-.Lfunc_end0:
-	.size	other, .Lfunc_end0-other
-                                        # -- End function
-	.section	.debug_abbrev,"", at progbits
-	.byte	1                               # Abbreviation Code
-	.byte	17                              # DW_TAG_compile_unit
-	.byte	1                               # DW_CHILDREN_yes
-	.byte	37                              # DW_AT_producer
-	.byte	14                              # DW_FORM_strp
-	.byte	19                              # DW_AT_language
-	.byte	5                               # DW_FORM_data2
-	.byte	3                               # DW_AT_name
-	.byte	14                              # DW_FORM_strp
-	.byte	16                              # DW_AT_stmt_list
-	.byte	23                              # DW_FORM_sec_offset
-	.byte	27                              # DW_AT_comp_dir
-	.byte	14                              # DW_FORM_strp
-	.byte	17                              # DW_AT_low_pc
-	.byte	1                               # DW_FORM_addr
-	.byte	18                              # DW_AT_high_pc
-	.byte	6                               # DW_FORM_data4
-	.byte	0                               # EOM(1)
-	.byte	0                               # EOM(2)
-	.byte	4                               # Abbreviation Code
-	.byte	36                              # DW_TAG_base_type
-	.byte	0                               # DW_CHILDREN_no
-	.byte	3                               # DW_AT_name
-	.byte	14                              # DW_FORM_strp
-	.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	6                               # Abbreviation Code
-	.byte	46                              # DW_TAG_subprogram
-	.byte	1                               # DW_CHILDREN_yes
-	.byte	17                              # DW_AT_low_pc
-	.byte	1                               # DW_FORM_addr
-	.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	14                              # DW_FORM_strp
-	.byte	58                              # DW_AT_decl_file
-	.byte	11                              # DW_FORM_data1
-	.byte	59                              # DW_AT_decl_line
-	.byte	11                              # DW_FORM_data1
-	.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	7                               # Abbreviation Code
-	.byte	29                              # DW_TAG_inlined_subroutine
-	.byte	1                               # DW_CHILDREN_yes
-	.byte	49                              # DW_AT_abstract_origin
-	.byte	0x10                            # DW_FORM_ref_addr
-	.byte	17                              # DW_AT_low_pc
-	.byte	1                               # DW_FORM_addr
-	.byte	18                              # DW_AT_high_pc
-	.byte	6                               # DW_FORM_data4
-	.byte	88                              # DW_AT_call_file
-	.byte	11                              # DW_FORM_data1
-	.byte	89                              # DW_AT_call_line
-	.byte	11                              # DW_FORM_data1
-	.byte	87                              # DW_AT_call_column
-	.byte	11                              # DW_FORM_data1
-	.byte	0                               # EOM(1)
-	.byte	0                               # EOM(2)
-	.byte	8                               # Abbreviation Code
-	.byte	52                              # DW_TAG_variable
-	.byte	0                               # DW_CHILDREN_no
-	.byte	2                               # DW_AT_location
-	.byte	24                              # DW_FORM_exprloc
-	.byte	49                              # DW_AT_abstract_origin
-	.byte	0x10                            # DW_FORM_ref_addr
-	.byte	0                               # EOM(1)
-	.byte	0                               # EOM(2)
-	.byte	0                               # EOM(3)
-	.section	.debug_info,"", at progbits
-.Lcu_begin0:
-	.long	.Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
-.Ldebug_info_start0:
-	.short	4                               # DWARF version number
-	.long	.debug_abbrev                   # Offset Into Abbrev. Section
-	.byte	8                               # Address Size (in bytes)
-	.byte	1                               # Abbrev [1] DW_TAG_compile_unit
-	.long	.Linfo_string0                  # DW_AT_producer
-	.short	0xc                             # DW_AT_language
-	.long	.Linfo_string1                  # DW_AT_name
-	.long	.Lline_table_start0             # DW_AT_stmt_list
-	.long	.Linfo_string2                  # DW_AT_comp_dir
-	.quad	.Lfunc_begin0                   # DW_AT_low_pc
-	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
-.Ltype_int:
-	.byte	4                               # Abbrev [4] DW_TAG_base_type
-	.long	.Linfo_string5                  # DW_AT_name
-	.byte	5                               # DW_AT_encoding
-	.byte	4                               # DW_AT_byte_size
-	.byte	6                               # Abbrev [6] DW_TAG_subprogram
-	.quad	.Lfunc_begin0                   # DW_AT_low_pc
-	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
-	.byte	1                               # DW_AT_frame_base
-	.byte	86
-	.long	.Linfo_string8                  # DW_AT_name
-	.byte	1                               # DW_AT_decl_file
-	.byte	3                               # DW_AT_decl_line
-	.long	.Ltype_int-.Lcu_begin0          # DW_AT_type
-                                        # DW_AT_external
-	.byte	7                               # Abbrev [7] DW_TAG_inlined_subroutine
-	.long	debuginfo_func_inlined          # DW_AT_abstract_origin
-	.quad	.Ltmp0                          # DW_AT_low_pc
-	.long	.Ltmp1-.Ltmp0                   # DW_AT_high_pc
-	.byte	1                               # DW_AT_call_file
-	.byte	3                               # DW_AT_call_line
-	.byte	48                              # DW_AT_call_column
-	.byte	8                               # Abbrev [8] DW_TAG_variable
-	.byte	2                               # DW_AT_location
-	.byte	145
-	.byte	124
-	.long	debuginfo_var_var               # DW_AT_abstract_origin
-	.byte	0                               # End Of Children Mark
-	.byte	0                               # End Of Children Mark
-	.byte	0                               # End Of Children Mark
-.Ldebug_info_end0:
-	.section	.debug_str,"MS", at progbits,1
-.Linfo_string0:
-	.asciz	"clang version 11.0.0 + hand coding"
-.Linfo_string1:
-	.asciz	"inlinevar2.c"
-.Linfo_string2:
-	.asciz	""
-.Linfo_string5:
-	.asciz	"int"
-.Linfo_string8:
-	.asciz	"other"
-	.section	".note.GNU-stack","", at progbits
-	.addrsig
-	.section	.debug_line,"", at progbits
-.Lline_table_start0:


        


More information about the lldb-commits mailing list