diff --git a/lld/test/wasm/debuginfo.test b/lld/test/wasm/debuginfo.test --- a/lld/test/wasm/debuginfo.test +++ b/lld/test/wasm/debuginfo.test @@ -44,9 +44,23 @@ CHECK-NEXT: DW_AT_language (DW_LANG_C99) CHECK-NEXT: DW_AT_name ("hi_foo.c") +CHECK: DW_TAG_subprogram +CHECK-NEXT: DW_AT_low_pc +CHECK-NEXT: DW_AT_high_pc +CHECK-NEXT: DW_AT_frame_base +CHECK-NEXT: DW_AT_name ("foo") +CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c") +CHECK-NEXT: DW_AT_decl_line (3) + +CHECK: DW_TAG_formal_parameter +CHECK-NEXT: DW_AT_location (DW_OP_WASM_location 0x0 0x0, DW_OP_stack_value) +CHECK-NEXT: DW_AT_name ("p") +CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c") +CHECK-NEXT: DW_AT_decl_line (3) + CHECK: DW_TAG_variable CHECK-NEXT: DW_AT_name ("y") -CHECK-NEXT: DW_AT_type (0x000000ac "int[2]") +CHECK-NEXT: DW_AT_type (0x000000d4 "int[2]") CHECK-NEXT: DW_AT_external (true) CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c") CHECK-NEXT: DW_AT_decl_line (1) @@ -68,23 +82,9 @@ CHECK: DW_TAG_variable CHECK-NEXT: DW_AT_name ("z") -CHECK-NEXT: DW_AT_type (0x000000ac "int[2]") +CHECK-NEXT: DW_AT_type (0x000000d4 "int[2]") CHECK-NEXT: DW_AT_external (true) CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c") CHECK-NEXT: DW_AT_decl_line (8) CHECK-NEXT: DW_AT_location (DW_OP_addr 0xffffffff) -CHECK: DW_TAG_subprogram -CHECK-NEXT: DW_AT_low_pc -CHECK-NEXT: DW_AT_high_pc -CHECK-NEXT: DW_AT_frame_base -CHECK-NEXT: DW_AT_name ("foo") -CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c") -CHECK-NEXT: DW_AT_decl_line (3) - -CHECK: DW_TAG_formal_parameter -CHECK-NEXT: DW_AT_location (DW_OP_WASM_location 0x0 0x0, DW_OP_stack_value) -CHECK-NEXT: DW_AT_name ("p") -CHECK-NEXT: DW_AT_decl_file ("{{.*}}hi_foo.c") -CHECK-NEXT: DW_AT_decl_line (3) - diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1169,14 +1169,6 @@ assert(MMI->hasDebugInfo() && "DebugInfoAvailabilty unexpectedly not initialized"); SingleCU = NumDebugCUs == 1; - DenseMap> - GVMap; - for (const GlobalVariable &Global : M->globals()) { - SmallVector GVs; - Global.getDebugInfo(GVs); - for (auto *GVE : GVs) - GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()}); - } // Create the symbol that designates the start of the unit's contribution // to the string offsets table. In a split DWARF scenario, only the skeleton @@ -1211,24 +1203,6 @@ DwarfCompileUnit &CU = getOrCreateDwarfCompileUnit(CUNode); - // Global Variables. - for (auto *GVE : CUNode->getGlobalVariables()) { - // Don't bother adding DIGlobalVariableExpressions listed in the CU if we - // already know about the variable and it isn't adding a constant - // expression. - auto &GVMapEntry = GVMap[GVE->getVariable()]; - auto *Expr = GVE->getExpression(); - if (!GVMapEntry.size() || (Expr && Expr->isConstant())) - GVMapEntry.push_back({nullptr, Expr}); - } - - DenseSet Processed; - for (auto *GVE : CUNode->getGlobalVariables()) { - DIGlobalVariable *GV = GVE->getVariable(); - if (Processed.insert(GV).second) - CU.getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV])); - } - for (auto *Ty : CUNode->getEnumTypes()) { assert(!isa_and_nonnull(Ty->getScope()) && "Unexpected function-local entity in 'enums' CU field."); @@ -1419,9 +1393,45 @@ assert(CurFn == nullptr); assert(CurMI == nullptr); - for (const auto &P : CUMap) { - const auto *CUNode = cast(P.first); - DwarfCompileUnit *CU = &*P.second; + // Collect global variables info. + DenseMap> + GVMap; + for (const GlobalVariable &Global : MMI->getModule()->globals()) { + SmallVector GVs; + Global.getDebugInfo(GVs); + for (auto *GVE : GVs) + GVMap[GVE->getVariable()].push_back({&Global, GVE->getExpression()}); + } + + for (DICompileUnit *CUNode : MMI->getModule()->debug_compile_units()) { + DwarfCompileUnit *CU = CUMap.lookup(CUNode); + + // If the CU hasn't been emitted yet, create it here unless it is empty. + if (!CU) { + if (CUNode->getImportedEntities().empty() && + CUNode->getEnumTypes().empty() && + CUNode->getRetainedTypes().empty() && + CUNode->getGlobalVariables().empty() && CUNode->getMacros().empty()) + continue; + CU = &getOrCreateDwarfCompileUnit(CUNode); + } + + // Emit Global Variables. + for (auto *GVE : CUNode->getGlobalVariables()) { + // Don't bother adding DIGlobalVariableExpressions listed in the CU if we + // already know about the variable and it isn't adding a constant + // expression. + auto &GVMapEntry = GVMap[GVE->getVariable()]; + auto *Expr = GVE->getExpression(); + if (!GVMapEntry.size() || (Expr && Expr->isConstant())) + GVMapEntry.push_back({nullptr, Expr}); + } + DenseSet Processed; + for (auto *GVE : CUNode->getGlobalVariables()) { + DIGlobalVariable *GV = GVE->getVariable(); + if (Processed.insert(GV).second) + CU->getOrCreateGlobalVariableDIE(GV, sortGlobalExprs(GVMap[GV])); + } // Emit imported entities. for (auto *IE : CUNode->getImportedEntities()) { diff --git a/llvm/test/DebugInfo/AMDGPU/variable-locations.ll b/llvm/test/DebugInfo/AMDGPU/variable-locations.ll --- a/llvm/test/DebugInfo/AMDGPU/variable-locations.ll +++ b/llvm/test/DebugInfo/AMDGPU/variable-locations.ll @@ -13,22 +13,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) -; CHECK: {{.*}}DW_TAG_variable -; CHECK-NEXT: DW_AT_name {{.*}}"GlobA" -; CHECK-NEXT: DW_AT_type -; CHECK-NEXT: DW_AT_external -; CHECK-NEXT: DW_AT_decl_file -; CHECK-NEXT: DW_AT_decl_line -; CHECK-NEXT: DW_AT_location [DW_FORM_block1] (DW_OP_addr 0x0) @GlobA = common addrspace(1) global i32 0, align 4, !dbg !0 - -; CHECK: {{.*}}DW_TAG_variable -; CHECK-NEXT: DW_AT_name {{.*}}"GlobB" -; CHECK-NEXT: DW_AT_type -; CHECK-NEXT: DW_AT_external -; CHECK-NEXT: DW_AT_decl_file -; CHECK-NEXT: DW_AT_decl_line -; CHECK-NEXT: DW_AT_location [DW_FORM_block1] (DW_OP_addr 0x0) @GlobB = common addrspace(1) global i32 0, align 4, !dbg !6 ; CHECK: {{.*}}DW_TAG_subprogram @@ -78,12 +63,28 @@ !llvm.ident = !{!12} !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) + +; CHECK: {{.*}}DW_TAG_variable +; CHECK-NEXT: DW_AT_name {{.*}}"GlobA" +; CHECK-NEXT: DW_AT_type +; CHECK-NEXT: DW_AT_external +; CHECK-NEXT: DW_AT_decl_file +; CHECK-NEXT: DW_AT_decl_line +; CHECK-NEXT: DW_AT_location [DW_FORM_block1] (DW_OP_addr 0x0) !1 = distinct !DIGlobalVariable(name: "GlobA", scope: !2, file: !3, line: 1, type: !8, isLocal: false, isDefinition: true) !2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 5.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5) !3 = !DIFile(filename: "variable-locations.cl", directory: "/some/random/directory") !4 = !{} !5 = !{!0, !6} !6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression()) + +; CHECK: {{.*}}DW_TAG_variable +; CHECK-NEXT: DW_AT_name {{.*}}"GlobB" +; CHECK-NEXT: DW_AT_type +; CHECK-NEXT: DW_AT_external +; CHECK-NEXT: DW_AT_decl_file +; CHECK-NEXT: DW_AT_decl_line +; CHECK-NEXT: DW_AT_location [DW_FORM_block1] (DW_OP_addr 0x0) !7 = distinct !DIGlobalVariable(name: "GlobB", scope: !2, file: !3, line: 2, type: !8, isLocal: false, isDefinition: true) !8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) !9 = !{i32 2, i32 0} diff --git a/llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll b/llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll --- a/llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll +++ b/llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll @@ -33,9 +33,12 @@ ; CHECK: DW_TAG_compile_unit ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name ("a.cpp") +; CHECK: DW_TAG_subprogram +; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name ("func") source_filename = "test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll" +target triple = "x86_64-unknown-linux-gnu" @x = global ptr @_Z4funci, align 8, !dbg !0 @y = global ptr @_Z4funci, align 8, !dbg !7 diff --git a/llvm/test/DebugInfo/Generic/debug-names-linkage-name.ll b/llvm/test/DebugInfo/Generic/debug-names-linkage-name.ll --- a/llvm/test/DebugInfo/Generic/debug-names-linkage-name.ll +++ b/llvm/test/DebugInfo/Generic/debug-names-linkage-name.ll @@ -11,9 +11,9 @@ ; We should have all three linkage names in the .debug_info and .debug_names ; ALL: .debug_info contents: -; ALL: DW_AT_linkage_name ("_ZN1n1vE") ; ALL: DW_AT_linkage_name ("_Z1fi") ; ALL: DW_AT_linkage_name ("_Z1gi") +; ALL: DW_AT_linkage_name ("_ZN1n1vE") ; ALL: .debug_names contents: ; ALL: String: {{.*}} "_Z1fi" ; ALL: String: {{.*}} "_Z1gi" diff --git a/llvm/test/DebugInfo/Generic/namespace.ll b/llvm/test/DebugInfo/Generic/namespace.ll --- a/llvm/test/DebugInfo/Generic/namespace.ll +++ b/llvm/test/DebugInfo/Generic/namespace.ll @@ -13,11 +13,6 @@ ; CHECK-NOT: DW_AT_decl_file ; CHECK-NOT: DW_AT_decl_line -; CHECK: [[I:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable -; CHECK: DW_AT_name ("i") -; CHECK: [[VAR_FWD:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable -; CHECK: DW_AT_name ("var_fwd") - ; CHECK: [[FOO:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type ; CHECK: DW_AT_name ("foo") ; CHECK: DW_AT_declaration @@ -37,6 +32,11 @@ ; CHECK: DW_AT_name ("func_fwd") ; CHECK-NOT: DW_AT_declaration +; CHECK: [[I:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable +; CHECK: DW_AT_name ("i") +; CHECK: [[VAR_FWD:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable +; CHECK: DW_AT_name ("var_fwd") + ; CHECK: [[BAZ:0x[0-9a-f]*]]:{{.*}}DW_TAG_typedef ; CHECK: DW_AT_name ("baz") @@ -56,7 +56,6 @@ ; CHECK: DW_TAG_imported_declaration ; CHECK: NULL -; CHECK: DW_TAG_base_type ; CHECK: DW_TAG_subprogram ; CHECK: DW_TAG_subprogram @@ -122,6 +121,7 @@ ; CHECK: NULL ; CHECK: DW_TAG_subprogram +; CHECK: DW_TAG_base_type ; CHECK: DW_TAG_imported_module ; CHECK: DW_AT_decl_file ([[F2:.*]]) ; CHECK: DW_AT_decl_line (18) diff --git a/llvm/test/DebugInfo/MSP430/global-var.ll b/llvm/test/DebugInfo/MSP430/global-var.ll --- a/llvm/test/DebugInfo/MSP430/global-var.ll +++ b/llvm/test/DebugInfo/MSP430/global-var.ll @@ -4,7 +4,7 @@ ; CHECK: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("global_var") -; CHECK-NEXT: DW_AT_type ({{0x[0-9]+}} "char") +; CHECK-NEXT: DW_AT_type ({{0x[0-9a-f]+}} "char") ; CHECK-NEXT: DW_AT_external (true) ; CHECK-NEXT: DW_AT_decl_file ("/tmp{{[/\\]}}global-var.c") ; CHECK-NEXT: DW_AT_decl_line (1) diff --git a/llvm/test/DebugInfo/NVPTX/debug-addr-class.ll b/llvm/test/DebugInfo/NVPTX/debug-addr-class.ll --- a/llvm/test/DebugInfo/NVPTX/debug-addr-class.ll +++ b/llvm/test/DebugInfo/NVPTX/debug-addr-class.ll @@ -106,36 +106,6 @@ ; CHECK-NEXT:.b8 0 // EOM(1) ; CHECK-NEXT:.b8 0 // EOM(2) ; CHECK-NEXT:.b8 2 // Abbreviation Code -; CHECK-NEXT:.b8 52 // DW_TAG_variable -; CHECK-NEXT:.b8 0 // DW_CHILDREN_no -; CHECK-NEXT:.b8 3 // DW_AT_name -; CHECK-NEXT:.b8 8 // DW_FORM_string -; CHECK-NEXT:.b8 73 // DW_AT_type -; CHECK-NEXT:.b8 19 // DW_FORM_ref4 -; CHECK-NEXT:.b8 63 // DW_AT_external -; CHECK-NEXT:.b8 12 // DW_FORM_flag -; CHECK-NEXT:.b8 58 // DW_AT_decl_file -; CHECK-NEXT:.b8 11 // DW_FORM_data1 -; CHECK-NEXT:.b8 59 // DW_AT_decl_line -; CHECK-NEXT:.b8 11 // DW_FORM_data1 -; CHECK-NEXT:.b8 51 // DW_AT_address_class -; CHECK-NEXT:.b8 11 // DW_FORM_data1 -; CHECK-NEXT:.b8 2 // DW_AT_location -; CHECK-NEXT:.b8 10 // DW_FORM_block1 -; CHECK-NEXT:.b8 0 // EOM(1) -; CHECK-NEXT:.b8 0 // EOM(2) -; CHECK-NEXT:.b8 3 // Abbreviation Code -; CHECK-NEXT:.b8 36 // DW_TAG_base_type -; CHECK-NEXT:.b8 0 // DW_CHILDREN_no -; CHECK-NEXT:.b8 3 // DW_AT_name -; CHECK-NEXT:.b8 8 // DW_FORM_string -; CHECK-NEXT:.b8 62 // DW_AT_encoding -; CHECK-NEXT:.b8 11 // DW_FORM_data1 -; CHECK-NEXT:.b8 11 // DW_AT_byte_size -; CHECK-NEXT:.b8 11 // DW_FORM_data1 -; CHECK-NEXT:.b8 0 // EOM(1) -; CHECK-NEXT:.b8 0 // EOM(2) -; CHECK-NEXT:.b8 4 // Abbreviation Code ; CHECK-NEXT:.b8 46 // DW_TAG_subprogram ; CHECK-NEXT:.b8 1 // DW_CHILDREN_yes ; CHECK-NEXT:.b8 17 // DW_AT_low_pc @@ -157,7 +127,7 @@ ; CHECK-NEXT:.b8 12 // DW_FORM_flag ; CHECK-NEXT:.b8 0 // EOM(1) ; CHECK-NEXT:.b8 0 // EOM(2) -; CHECK-NEXT:.b8 5 // Abbreviation Code +; CHECK-NEXT:.b8 3 // Abbreviation Code ; CHECK-NEXT:.b8 5 // DW_TAG_formal_parameter ; CHECK-NEXT:.b8 0 // DW_CHILDREN_no ; CHECK-NEXT:.b8 3 // DW_AT_name @@ -170,6 +140,36 @@ ; CHECK-NEXT:.b8 19 // DW_FORM_ref4 ; CHECK-NEXT:.b8 0 // EOM(1) ; CHECK-NEXT:.b8 0 // EOM(2) +; CHECK-NEXT:.b8 4 // Abbreviation Code +; CHECK-NEXT:.b8 52 // DW_TAG_variable +; CHECK-NEXT:.b8 0 // DW_CHILDREN_no +; CHECK-NEXT:.b8 3 // DW_AT_name +; CHECK-NEXT:.b8 8 // DW_FORM_string +; CHECK-NEXT:.b8 73 // DW_AT_type +; CHECK-NEXT:.b8 19 // DW_FORM_ref4 +; CHECK-NEXT:.b8 63 // DW_AT_external +; CHECK-NEXT:.b8 12 // DW_FORM_flag +; CHECK-NEXT:.b8 58 // DW_AT_decl_file +; CHECK-NEXT:.b8 11 // DW_FORM_data1 +; CHECK-NEXT:.b8 59 // DW_AT_decl_line +; CHECK-NEXT:.b8 11 // DW_FORM_data1 +; CHECK-NEXT:.b8 51 // DW_AT_address_class +; CHECK-NEXT:.b8 11 // DW_FORM_data1 +; CHECK-NEXT:.b8 2 // DW_AT_location +; CHECK-NEXT:.b8 10 // DW_FORM_block1 +; CHECK-NEXT:.b8 0 // EOM(1) +; CHECK-NEXT:.b8 0 // EOM(2) +; CHECK-NEXT:.b8 5 // Abbreviation Code +; CHECK-NEXT:.b8 36 // DW_TAG_base_type +; CHECK-NEXT:.b8 0 // DW_CHILDREN_no +; CHECK-NEXT:.b8 3 // DW_AT_name +; CHECK-NEXT:.b8 8 // DW_FORM_string +; CHECK-NEXT:.b8 62 // DW_AT_encoding +; CHECK-NEXT:.b8 11 // DW_FORM_data1 +; CHECK-NEXT:.b8 11 // DW_AT_byte_size +; CHECK-NEXT:.b8 11 // DW_FORM_data1 +; CHECK-NEXT:.b8 0 // EOM(1) +; CHECK-NEXT:.b8 0 // EOM(2) ; CHECK-NEXT:.b8 6 // Abbreviation Code ; CHECK-NEXT:.b8 15 // DW_TAG_pointer_type ; CHECK-NEXT:.b8 0 // DW_CHILDREN_no @@ -259,46 +259,7 @@ ; CHECK-NEXT:.b8 0 ; CHECK-NEXT:.b64 $L__func_begin0 // DW_AT_low_pc ; CHECK-NEXT:.b64 $L__func_end0 // DW_AT_high_pc -; CHECK-NEXT:.b8 2 // Abbrev [2] 0x65:0x1a DW_TAG_variable -; CHECK-NEXT:.b8 71 // DW_AT_name -; CHECK-NEXT:.b8 76 -; CHECK-NEXT:.b8 79 -; CHECK-NEXT:.b8 66 -; CHECK-NEXT:.b8 65 -; CHECK-NEXT:.b8 76 -; CHECK-NEXT:.b8 0 -; CHECK-NEXT:.b32 127 // DW_AT_type -; CHECK-NEXT:.b8 1 // DW_AT_external -; CHECK-NEXT:.b8 1 // DW_AT_decl_file -; CHECK-NEXT:.b8 3 // DW_AT_decl_line -; CHECK-NEXT:.b8 5 // DW_AT_address_class -; CHECK-NEXT:.b8 9 // DW_AT_location -; CHECK-NEXT:.b8 3 -; CHECK-NEXT:.b64 GLOBAL -; CHECK-NEXT:.b8 3 // Abbrev [3] 0x7f:0x7 DW_TAG_base_type -; CHECK-NEXT:.b8 105 // DW_AT_name -; CHECK-NEXT:.b8 110 -; CHECK-NEXT:.b8 116 -; CHECK-NEXT:.b8 0 -; CHECK-NEXT:.b8 5 // DW_AT_encoding -; CHECK-NEXT:.b8 4 // DW_AT_byte_size -; CHECK-NEXT:.b8 2 // Abbrev [2] 0x86:0x1a DW_TAG_variable -; CHECK-NEXT:.b8 83 // DW_AT_name -; CHECK-NEXT:.b8 72 -; CHECK-NEXT:.b8 65 -; CHECK-NEXT:.b8 82 -; CHECK-NEXT:.b8 69 -; CHECK-NEXT:.b8 68 -; CHECK-NEXT:.b8 0 -; CHECK-NEXT:.b32 127 // DW_AT_type -; CHECK-NEXT:.b8 1 // DW_AT_external -; CHECK-NEXT:.b8 1 // DW_AT_decl_file -; CHECK-NEXT:.b8 4 // DW_AT_decl_line -; CHECK-NEXT:.b8 8 // DW_AT_address_class -; CHECK-NEXT:.b8 9 // DW_AT_location -; CHECK-NEXT:.b8 3 -; CHECK-NEXT:.b64 SHARED -; CHECK-NEXT:.b8 4 // Abbrev [4] 0xa0:0x45 DW_TAG_subprogram +; CHECK-NEXT:.b8 2 // Abbrev [2] 0x65:0x45 DW_TAG_subprogram ; CHECK-NEXT:.b64 $L__func_begin0 // DW_AT_low_pc ; CHECK-NEXT:.b64 $L__func_end0 // DW_AT_high_pc ; CHECK-NEXT:.b8 1 // DW_AT_frame_base @@ -316,32 +277,71 @@ ; CHECK-NEXT:.b8 1 // DW_AT_decl_file ; CHECK-NEXT:.b8 6 // DW_AT_decl_line ; CHECK-NEXT:.b8 1 // DW_AT_external -; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc0:0x9 DW_TAG_formal_parameter +; CHECK-NEXT:.b8 3 // Abbrev [3] 0x85:0x9 DW_TAG_formal_parameter ; CHECK-NEXT:.b8 97 // DW_AT_name ; CHECK-NEXT:.b8 0 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file ; CHECK-NEXT:.b8 6 // DW_AT_decl_line ; CHECK-NEXT:.b32 229 // DW_AT_type -; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc9:0x9 DW_TAG_formal_parameter +; CHECK-NEXT:.b8 3 // Abbrev [3] 0x8e:0x9 DW_TAG_formal_parameter ; CHECK-NEXT:.b8 120 // DW_AT_name ; CHECK-NEXT:.b8 0 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file ; CHECK-NEXT:.b8 6 // DW_AT_decl_line ; CHECK-NEXT:.b32 238 // DW_AT_type -; CHECK-NEXT:.b8 5 // Abbrev [5] 0xd2:0x9 DW_TAG_formal_parameter +; CHECK-NEXT:.b8 3 // Abbrev [3] 0x97:0x9 DW_TAG_formal_parameter ; CHECK-NEXT:.b8 121 // DW_AT_name ; CHECK-NEXT:.b8 0 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file ; CHECK-NEXT:.b8 6 // DW_AT_decl_line ; CHECK-NEXT:.b32 238 // DW_AT_type -; CHECK-NEXT:.b8 5 // Abbrev [5] 0xdb:0x9 DW_TAG_formal_parameter +; CHECK-NEXT:.b8 3 // Abbrev [3] 0xa0:0x9 DW_TAG_formal_parameter ; CHECK-NEXT:.b8 105 // DW_AT_name ; CHECK-NEXT:.b8 0 ; CHECK-NEXT:.b8 1 // DW_AT_decl_file ; CHECK-NEXT:.b8 6 // DW_AT_decl_line -; CHECK-NEXT:.b32 127 // DW_AT_type +; CHECK-NEXT:.b32 196 // DW_AT_type ; CHECK-NEXT:.b8 0 // End Of Children Mark -; CHECK-NEXT:.b8 3 // Abbrev [3] 0xe5:0x9 DW_TAG_base_type +; CHECK-NEXT:.b8 4 // Abbrev [4] 0xaa:0x1a DW_TAG_variable +; CHECK-NEXT:.b8 71 // DW_AT_name +; CHECK-NEXT:.b8 76 +; CHECK-NEXT:.b8 79 +; CHECK-NEXT:.b8 66 +; CHECK-NEXT:.b8 65 +; CHECK-NEXT:.b8 76 +; CHECK-NEXT:.b8 0 +; CHECK-NEXT:.b32 196 // DW_AT_type +; CHECK-NEXT:.b8 1 // DW_AT_external +; CHECK-NEXT:.b8 1 // DW_AT_decl_file +; CHECK-NEXT:.b8 3 // DW_AT_decl_line +; CHECK-NEXT:.b8 5 // DW_AT_address_class +; CHECK-NEXT:.b8 9 // DW_AT_location +; CHECK-NEXT:.b8 3 +; CHECK-NEXT:.b64 GLOBAL +; CHECK-NEXT:.b8 5 // Abbrev [5] 0xc4:0x7 DW_TAG_base_type +; CHECK-NEXT:.b8 105 // DW_AT_name +; CHECK-NEXT:.b8 110 +; CHECK-NEXT:.b8 116 +; CHECK-NEXT:.b8 0 +; CHECK-NEXT:.b8 5 // DW_AT_encoding +; CHECK-NEXT:.b8 4 // DW_AT_byte_size +; CHECK-NEXT:.b8 4 // Abbrev [4] 0xcb:0x1a DW_TAG_variable +; CHECK-NEXT:.b8 83 // DW_AT_name +; CHECK-NEXT:.b8 72 +; CHECK-NEXT:.b8 65 +; CHECK-NEXT:.b8 82 +; CHECK-NEXT:.b8 69 +; CHECK-NEXT:.b8 68 +; CHECK-NEXT:.b8 0 +; CHECK-NEXT:.b32 196 // DW_AT_type +; CHECK-NEXT:.b8 1 // DW_AT_external +; CHECK-NEXT:.b8 1 // DW_AT_decl_file +; CHECK-NEXT:.b8 4 // DW_AT_decl_line +; CHECK-NEXT:.b8 8 // DW_AT_address_class +; CHECK-NEXT:.b8 9 // DW_AT_location +; CHECK-NEXT:.b8 3 +; CHECK-NEXT:.b64 SHARED +; CHECK-NEXT:.b8 5 // Abbrev [5] 0xe5:0x9 DW_TAG_base_type ; CHECK-NEXT:.b8 102 // DW_AT_name ; CHECK-NEXT:.b8 108 ; CHECK-NEXT:.b8 111 diff --git a/llvm/test/DebugInfo/PowerPC/strict-dwarf.ll b/llvm/test/DebugInfo/PowerPC/strict-dwarf.ll --- a/llvm/test/DebugInfo/PowerPC/strict-dwarf.ll +++ b/llvm/test/DebugInfo/PowerPC/strict-dwarf.ll @@ -15,17 +15,17 @@ ; 3: DwarfUnit::addUInt() ; 4: addUInt(Block, (dwarf::Attribute)0, Form, Integer); +; CHECK: DW_AT_noreturn ; CHECK: DW_AT_name ("var") ; CHECK-NOT: DW_TAG_ ; CHECK: DW_AT_alignment ; CHECK: DW_AT_location (DW_OP_addr 0x0) -; CHECK: DW_AT_noreturn ; +; STRICT-NOT: DW_AT_noreturn ; STRICT: DW_AT_name ("var") ; STRICT-NOT: DW_AT_alignment ; STRICT-NOT: DW_TAG_ ; STRICT: DW_AT_location (DW_OP_addr 0x0) -; STRICT-NOT: DW_AT_noreturn @_ZL3var = internal global i32 0, align 16, !dbg !0 diff --git a/llvm/test/DebugInfo/WebAssembly/tls_pic_globals.ll b/llvm/test/DebugInfo/WebAssembly/tls_pic_globals.ll --- a/llvm/test/DebugInfo/WebAssembly/tls_pic_globals.ll +++ b/llvm/test/DebugInfo/WebAssembly/tls_pic_globals.ll @@ -128,42 +128,42 @@ ; CHECK: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("external_var0") ; CHECK: DW_AT_external (true) -; NOPIC: DW_AT_location (DW_OP_addrx 0x0) -; PIC: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x0, DW_OP_plus) - -; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name ("external_var1") -; CHECK: DW_AT_external (true) ; NOPIC: DW_AT_location (DW_OP_addrx 0x1) ; PIC: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x1, DW_OP_plus) ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name ("internal_var0") +; CHECK-NEXT: DW_AT_name ("external_var1") +; CHECK: DW_AT_external (true) ; NOPIC: DW_AT_location (DW_OP_addrx 0x2) ; PIC: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x2, DW_OP_plus) ; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name ("internal_var1") +; CHECK-NEXT: DW_AT_name ("internal_var0") ; NOPIC: DW_AT_location (DW_OP_addrx 0x3) ; PIC: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x3, DW_OP_plus) +; CHECK: DW_TAG_variable +; CHECK-NEXT: DW_AT_name ("internal_var1") +; NOPIC: DW_AT_location (DW_OP_addrx 0x4) +; PIC: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x4, DW_OP_plus) + ; CHECK: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("external_tls_var0") ; CHECK: DW_AT_external (true) -; CHECK: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x4, DW_OP_plus) +; CHECK: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x5, DW_OP_plus) ; CHECK: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("external_tls_var1") ; CHECK: DW_AT_external (true) -; CHECK: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x5, DW_OP_plus) +; CHECK: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x6, DW_OP_plus) ; CHECK: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("internal_tls_var0") -; CHECK: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x6, DW_OP_plus) +; CHECK: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x7, DW_OP_plus) ; CHECK: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("internal_tls_var1") -; CHECK: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x7, DW_OP_plus) +; CHECK: DW_AT_location (DW_OP_WASM_location 0x3 0x{{[0-9]+}}, DW_OP_addrx 0x8, DW_OP_plus) ; In non-split DWARF, .debug_info section contains relocations referring to ; __stack_pointer, __tls_base, and __memory_base (if used) diff --git a/llvm/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll b/llvm/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll --- a/llvm/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll +++ b/llvm/test/DebugInfo/X86/2011-09-26-GlobalVarContext.ll @@ -46,17 +46,17 @@ ; CHECK: DW_TAG_variable ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB") +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "LOC") ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo{{[/\\]}}test.c") +; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo{{[/\\]}}test.c") ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_decl_line [DW_FORM_data1] (1) +; CHECK: DW_AT_decl_line [DW_FORM_data1] (4) ; CHECK: DW_TAG_variable ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "LOC") +; CHECK: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "GLB") ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo{{[/\\]}}test.c") +; CHECK: DW_AT_decl_file [DW_FORM_data1] ("/work/llvm/vanilla/test/DebugInfo{{[/\\]}}test.c") ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_decl_line [DW_FORM_data1] (4) +; CHECK: DW_AT_decl_line [DW_FORM_data1] (1) diff --git a/llvm/test/DebugInfo/X86/DW_AT_calling-convention.ll b/llvm/test/DebugInfo/X86/DW_AT_calling-convention.ll --- a/llvm/test/DebugInfo/X86/DW_AT_calling-convention.ll +++ b/llvm/test/DebugInfo/X86/DW_AT_calling-convention.ll @@ -21,10 +21,6 @@ ; CHECK: .debug_info contents: -; CHECK: DW_TAG_subroutine_type [[subroutine_abbrev]] * -; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] {{.*}} -; CHECK-NEXT: DW_AT_calling_convention [DW_FORM_data1] (DW_CC_BORLAND_msfastcall) - ; CHECK: DW_TAG_subprogram [{{.*}}] * ; CHECK: DW_AT_low_pc ; CHECK: DW_AT_high_pc @@ -37,6 +33,10 @@ ; CHECK: DW_AT_type ; CHECK: DW_AT_external +; CHECK: DW_TAG_subroutine_type [[subroutine_abbrev]] * +; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] {{.*}} +; CHECK-NEXT: DW_AT_calling_convention [DW_FORM_data1] (DW_CC_BORLAND_msfastcall) + ; ModuleID = 't.cpp' source_filename = "t.cpp" target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" diff --git a/llvm/test/DebugInfo/X86/align_cpp11.ll b/llvm/test/DebugInfo/X86/align_cpp11.ll --- a/llvm/test/DebugInfo/X86/align_cpp11.ll +++ b/llvm/test/DebugInfo/X86/align_cpp11.ll @@ -33,20 +33,6 @@ ; auto Lambda = [i](){}; ; } -; CHECK: DW_TAG_class_type -; CHECK: DW_AT_name{{.*}}"C0" -; CHECK: DW_AT_alignment{{.*}}64 - -; CHECK: DW_TAG_variable -; CHECK: DW_AT_name{{.*}}"s" -; CHECK: DW_AT_alignment{{.*}}2048 - -; CHECK: DW_TAG_structure_type -; CHECK: DW_TAG_member -; CHECK: DW_TAG_member -; CHECK: DW_AT_name{{.*}}"xx" -; CHECK: DW_AT_alignment{{.*}}128 - ; CHECK: DW_TAG_enumeration_type ; CHECK: DW_AT_alignment{{.*}}16 ; CHECK: DW_TAG_enumerator @@ -68,6 +54,20 @@ ; CHECK: DW_TAG_subprogram ; CHECK: DW_TAG_formal_parameter +; CHECK: DW_TAG_class_type +; CHECK: DW_AT_name{{.*}}"C0" +; CHECK: DW_AT_alignment{{.*}}64 + +; CHECK: DW_TAG_variable +; CHECK: DW_AT_name{{.*}}"s" +; CHECK: DW_AT_alignment{{.*}}2048 + +; CHECK: DW_TAG_structure_type +; CHECK: DW_TAG_member +; CHECK: DW_TAG_member +; CHECK: DW_AT_name{{.*}}"xx" +; CHECK: DW_AT_alignment{{.*}}128 + ; CHECK: DW_TAG_class_type ; CHECK: DW_AT_name{{.*}}"C1" ; CHECK: DW_TAG_member diff --git a/llvm/test/DebugInfo/X86/align_objc.ll b/llvm/test/DebugInfo/X86/align_objc.ll --- a/llvm/test/DebugInfo/X86/align_objc.ll +++ b/llvm/test/DebugInfo/X86/align_objc.ll @@ -16,7 +16,14 @@ ; } ; CHECK: DW_TAG_compile_unit + +; CHECK: DW_TAG_subprogram +; CHECK: DW_TAG_variable +; CHECK: DW_TAG_variable +; CHECK: DW_AT_name{{.*}}"i" +; CHECK: DW_AT_alignment{{.*}}32 ; CHECK: DW_TAG_variable + ; CHECK: DW_TAG_typedef ; CHECK: DW_AT_name{{.*}}"S0" @@ -25,12 +32,6 @@ ; CHECK: DW_TAG_member ; CHECK: DW_TAG_base_type -; CHECK: DW_TAG_subprogram -; CHECK: DW_TAG_variable -; CHECK: DW_TAG_variable -; CHECK: DW_AT_name{{.*}}"i" -; CHECK: DW_AT_alignment{{.*}}32 - ; CHECK: DW_TAG_typedef ; CHECK: DW_AT_name{{.*}}"S1" ; CHECK: DW_TAG_structure_type diff --git a/llvm/test/DebugInfo/X86/arange-and-stub.ll b/llvm/test/DebugInfo/X86/arange-and-stub.ll --- a/llvm/test/DebugInfo/X86/arange-and-stub.ll +++ b/llvm/test/DebugInfo/X86/arange-and-stub.ll @@ -5,7 +5,7 @@ ; CHECK: .L_ZTId.DW.stub: ; CHECK: .data -; CHECK-NEXT: .Lsec_end0: +; CHECK-NEXT: .Lsec_end1: source_filename = "test/DebugInfo/X86/arange-and-stub.ll" target triple = "x86_64-linux-gnu" diff --git a/llvm/test/DebugInfo/X86/containing-type-extension-rust.ll b/llvm/test/DebugInfo/X86/containing-type-extension-rust.ll --- a/llvm/test/DebugInfo/X86/containing-type-extension-rust.ll +++ b/llvm/test/DebugInfo/X86/containing-type-extension-rust.ll @@ -2,6 +2,7 @@ ; RUN: llvm-dwarfdump -v -debug-info %t | FileCheck %s ; Check that any type can have a vtable holder. +; CHECK: DW_TAG_structure_type ; CHECK: [[SP:.*]]: DW_TAG_structure_type ; CHECK-NOT: TAG ; CHECK: DW_AT_containing_type [DW_FORM_ref4] ({{.*}} "f64") diff --git a/llvm/test/DebugInfo/X86/debug-info-access.ll b/llvm/test/DebugInfo/X86/debug-info-access.ll --- a/llvm/test/DebugInfo/X86/debug-info-access.ll +++ b/llvm/test/DebugInfo/X86/debug-info-access.ll @@ -74,6 +74,10 @@ ; F f; ; H h; +; CHECK: DW_TAG_subprogram +; CHECK: DW_AT_name {{.*}}"free") +; CHECK-NOT: DW_AT_accessibility + ; CHECK: DW_TAG_member ; CHECK: DW_AT_name {{.*}}"union_priv") ; CHECK-NOT: DW_TAG @@ -142,10 +146,6 @@ ; CHECK: DW_AT_name ("I") ; CHECK: DW_AT_accessibility (DW_ACCESS_private) -; CHECK: DW_TAG_subprogram -; CHECK: DW_AT_name {{.*}}"free") -; CHECK-NOT: DW_AT_accessibility - %union.U = type { i32 } %struct.A = type { i8 } %class.B = type { i32 } diff --git a/llvm/test/DebugInfo/X86/debug-info-static-member.ll b/llvm/test/DebugInfo/X86/debug-info-static-member.ll --- a/llvm/test/DebugInfo/X86/debug-info-static-member.ll +++ b/llvm/test/DebugInfo/X86/debug-info-static-member.ll @@ -105,6 +105,8 @@ ; (for variables) or DW_AT_const_value (for constants). ; ; PRESENT: .debug_info contents: +; PRESENT: DW_TAG_subprogram +; PRESENT: DW_TAG_variable ; PRESENT: DW_TAG_variable ; PRESENT-NEXT: DW_AT_specification {{.*}} "a" ; PRESENT-NEXT: DW_AT_location @@ -155,6 +157,8 @@ ; For Darwin gdb: ; DARWINP: .debug_info contents: +; DARWINP: DW_TAG_subprogram +; DARWINP: DW_TAG_variable ; DARWINP: DW_TAG_variable ; DARWINP-NEXT: DW_AT_specification {{.*}} "a" ; DARWINP-NEXT: DW_AT_location diff --git a/llvm/test/DebugInfo/X86/dwarf-aranges.ll b/llvm/test/DebugInfo/X86/dwarf-aranges.ll --- a/llvm/test/DebugInfo/X86/dwarf-aranges.ll +++ b/llvm/test/DebugInfo/X86/dwarf-aranges.ll @@ -8,22 +8,22 @@ ; -- alignment -- ; CHECK-NEXT: .zero 4,255 +; - it should have made one span covering all functions in this CU. +; CHECK-NEXT: .quad .Lfunc_begin0 +; CHECK-NEXT: .quad .Lsec_end0-.Lfunc_begin0 + ; - it should have made one span covering all vars in this CU. ; CHECK-NEXT: .quad some_data -; CHECK-NEXT: .quad .Lsec_end0-some_data +; CHECK-NEXT: .quad .Lsec_end1-some_data ; - it should have made one span covering all vars in this CU. ; CHECK-NEXT: .quad some_other -; CHECK-NEXT: .quad .Lsec_end1-some_other +; CHECK-NEXT: .quad .Lsec_end2-some_other ; - it should have made one span for each symbol. ; CHECK-NEXT: .quad some_bss ; CHECK-NEXT: .quad 4 -; - it should have made one span covering all functions in this CU. -; CHECK-NEXT: .quad .Lfunc_begin0 -; CHECK-NEXT: .quad .Lsec_end2-.Lfunc_begin0 - ; -- finish -- ; CHECK-NEXT: # ARange terminator diff --git a/llvm/test/DebugInfo/X86/dwarf-linkage-names.ll b/llvm/test/DebugInfo/X86/dwarf-linkage-names.ll --- a/llvm/test/DebugInfo/X86/dwarf-linkage-names.ll +++ b/llvm/test/DebugInfo/X86/dwarf-linkage-names.ll @@ -17,10 +17,10 @@ ; This assumes the variable will appear before the function. ; LINKAGE1: .section .debug_info -; LINKAGE1: DW_TAG_variable +; LINKAGE1: DW_TAG_subprogram ; LINKAGE1-NOT: DW_TAG ; LINKAGE1: {{DW_AT_(MIPS_)?linkage_name}} -; LINKAGE1: DW_TAG_subprogram +; LINKAGE1: DW_TAG_variable ; LINKAGE1-NOT: DW_TAG ; LINKAGE1: {{DW_AT_(MIPS_)?linkage_name}} ; LINKAGE1: .section diff --git a/llvm/test/DebugInfo/X86/dwarfdump-DIImportedEntity_elements.ll b/llvm/test/DebugInfo/X86/dwarfdump-DIImportedEntity_elements.ll --- a/llvm/test/DebugInfo/X86/dwarfdump-DIImportedEntity_elements.ll +++ b/llvm/test/DebugInfo/X86/dwarfdump-DIImportedEntity_elements.ll @@ -3,21 +3,21 @@ ; RUN: llc %s -filetype=obj -o - | llvm-dwarfdump - | FileCheck %s -; CHECK: [[MYMOD:0x[0-9a-f]+]]: DW_TAG_module -; CHECK: DW_AT_name ("mymod") -; CHECK: [[VAR1:0x[0-9a-f]+]]: DW_TAG_variable -; CHECK: DW_AT_name ("var1") - ; CHECK: DW_TAG_subprogram ; CHECK: DW_AT_name ("main") ; CHECK: DW_TAG_subprogram ; CHECK: DW_AT_name ("use_renamed") ; CHECK: DW_TAG_imported_module -; CHECK: DW_AT_import ([[MYMOD]]) +; CHECK: DW_AT_import ([[MYMOD:0x[0-9a-f]+]]) ; CHECK: DW_TAG_imported_declaration -; CHECK: DW_AT_import ([[VAR1]]) +; CHECK: DW_AT_import ([[VAR1:0x[0-9a-f]+]]) ; CHECK: DW_AT_name ("var4") +; CHECK: [[MYMOD]]: DW_TAG_module +; CHECK: DW_AT_name ("mymod") +; CHECK: [[VAR1]]: DW_TAG_variable +; CHECK: DW_AT_name ("var1") + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;This test case is generated from ;;module mymod diff --git a/llvm/test/DebugInfo/X86/generate-odr-hash.ll b/llvm/test/DebugInfo/X86/generate-odr-hash.ll --- a/llvm/test/DebugInfo/X86/generate-odr-hash.ll +++ b/llvm/test/DebugInfo/X86/generate-odr-hash.ll @@ -61,6 +61,14 @@ ; CHECK-NEXT: DW_AT_declaration ; CHECK-NEXT: DW_AT_signature {{.*}} (0xb04af47397402e77) +; CHECK: [[WOMBAT:^0x........]]: DW_TAG_structure_type +; CHECK-NEXT: DW_AT_declaration +; CHECK-NEXT: DW_AT_signature {{.*}} (0xfd756cee88f8a118) + +; CHECK: DW_TAG_structure_type + +; CHECK: DW_TAG_structure_type + ; Ensure the CU-local type 'walrus' is not placed in a type unit. ; CHECK: [[WALRUS:^0x........]]: DW_TAG_structure_type ; CHECK-NEXT: DW_AT_name{{.*}}"walrus" @@ -68,10 +76,6 @@ ; CHECK-NEXT: DW_AT_decl_file ; CHECK-NEXT: DW_AT_decl_line -; CHECK: [[WOMBAT:^0x........]]: DW_TAG_structure_type -; CHECK-NEXT: DW_AT_declaration -; CHECK-NEXT: DW_AT_signature {{.*}} (0xfd756cee88f8a118) - ; SINGLE-LABEL: .debug_types contents: ; FISSION: .debug_types.dwo contents: diff --git a/llvm/test/DebugInfo/X86/gnu-public-names.ll b/llvm/test/DebugInfo/X86/gnu-public-names.ll --- a/llvm/test/DebugInfo/X86/gnu-public-names.ll +++ b/llvm/test/DebugInfo/X86/gnu-public-names.ll @@ -71,6 +71,7 @@ ; ASM-NEXT: .asciz "global_variable" # External Name ; ASM: .section .debug_gnu_pubtypes +; ASM: .long 109 # DIE offset ; ASM: .byte 16 # Attributes: TYPE, EXTERNAL ; ASM-NEXT: .asciz "C" # External Name @@ -79,8 +80,28 @@ ; CHECK: DW_AT_GNU_pubnames (true) ; CHECK-NOT: DW_AT_GNU_pubtypes [ -; CHECK: [[STATIC_MEM_VAR:0x[0-9a-f]+]]: DW_TAG_variable -; CHECK: DW_AT_specification {{.*}} "static_member_variable" +; CHECK: DW_TAG_enumeration +; CHECK: [[UNNAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator +; CHECK: DW_AT_name ("unnamed_enum_enumerator") +; CHECK: NULL + +; CHECK: [[UNSIGNED_INT:0x[0-9a-f]+]]: DW_TAG_base_type +; CHECK: DW_AT_name ("unsigned int") + +; CHECK: [[NAMED_ENUM:0x[0-9a-f]+]]: DW_TAG_enumeration +; CHECK: DW_AT_name ("named_enum") +; CHECK: [[NAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator +; CHECK: DW_AT_name ("named_enum_enumerator") +; CHECK: NULL + +; CHECK: [[NAMED_ENUM_CLASS:0x[0-9a-f]+]]: DW_TAG_enumeration +; CHECK: DW_AT_name ("named_enum_class") +; CHECK: [[NAMED_ENUM_CLASS_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator +; CHECK: DW_AT_name ("named_enum_class_enumerator") +; CHECK: NULL + +; CHECK: [[INT:0x[0-9a-f]+]]: DW_TAG_base_type +; CHECK: DW_AT_name ("int") ; CHECK: [[C:0x[0-9a-f]+]]: DW_TAG_structure_type ; CHECK: DW_AT_name ("C") @@ -96,15 +117,25 @@ ; CHECK: DW_AT_name ("static_member_function") ; CHECK: NULL -; CHECK: [[INT:0x[0-9a-f]+]]: DW_TAG_base_type -; CHECK: DW_AT_name ("int") ; CHECK: DW_TAG_pointer_type -; CHECK: [[GLOB_VAR:0x[0-9a-f]+]]: DW_TAG_variable -; CHECK: DW_AT_name ("global_variable") +; CHECK: [[MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: DW_AT_specification {{.*}} "_ZN1C15member_functionEv" +; CHECK: DW_TAG_formal_parameter +; CHECK: NULL + +; CHECK: [[STATIC_MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: DW_AT_specification {{.*}} "_ZN1C22static_member_functionEv" + +; CHECK: [[GLOBAL_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: DW_AT_linkage_name +; CHECK: DW_AT_name ("global_function") ; CHECK: [[NS:0x[0-9a-f]+]]: DW_TAG_namespace ; CHECK: DW_AT_name ("ns") +; CHECK: [[GLOB_NS_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: DW_AT_linkage_name +; CHECK: DW_AT_name ("global_namespace_function") ; CHECK: [[GLOB_NS_VAR:0x[0-9a-f]+]]: DW_TAG_variable ; CHECK: DW_AT_name ("global_namespace_variable") ; CHECK-NOT: DW_AT_specification @@ -119,9 +150,6 @@ ; CHECK: DW_AT_name ("D") ; CHECK: DW_TAG_member ; CHECK: NULL -; CHECK: [[GLOB_NS_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK: DW_AT_linkage_name -; CHECK: DW_AT_name ("global_namespace_function") ; CHECK: DW_TAG_variable ; CHECK: NULL @@ -132,6 +160,16 @@ ; CHECK: DW_AT_location ; CHECK: NULL +; CHECK: [[GLOBAL_F7:0x[0-9a-f]+]]: DW_TAG_subprogram +; CHECK: DW_AT_linkage_name +; CHECK: DW_AT_name ("f7") + +; CHECK: [[STATIC_MEM_VAR:0x[0-9a-f]+]]: DW_TAG_variable +; CHECK: DW_AT_specification {{.*}} "static_member_variable" + +; CHECK: [[GLOB_VAR:0x[0-9a-f]+]]: DW_TAG_variable +; CHECK: DW_AT_name ("global_variable") + ; CHECK: [[ANON:.*]]: DW_TAG_namespace ; CHECK-NOT: DW_AT_name ; CHECK: [[ANON_I:.*]]: DW_TAG_variable @@ -152,45 +190,10 @@ ; CHECK: NULL ; CHECK: NULL -; CHECK: DW_TAG_enumeration -; CHECK: [[UNNAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator -; CHECK: DW_AT_name ("unnamed_enum_enumerator") -; CHECK: NULL - -; CHECK: [[UNSIGNED_INT:0x[0-9a-f]+]]: DW_TAG_base_type -; CHECK: DW_AT_name ("unsigned int") - -; CHECK: [[NAMED_ENUM:0x[0-9a-f]+]]: DW_TAG_enumeration -; CHECK: DW_AT_name ("named_enum") -; CHECK: [[NAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator -; CHECK: DW_AT_name ("named_enum_enumerator") -; CHECK: NULL - -; CHECK: [[NAMED_ENUM_CLASS:0x[0-9a-f]+]]: DW_TAG_enumeration -; CHECK: DW_AT_name ("named_enum_class") -; CHECK: [[NAMED_ENUM_CLASS_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator -; CHECK: DW_AT_name ("named_enum_class_enumerator") -; CHECK: NULL - -; CHECK: [[MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK: DW_AT_specification {{.*}} "_ZN1C15member_functionEv" -; CHECK: DW_TAG_formal_parameter -; CHECK: NULL - -; CHECK: [[STATIC_MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK: DW_AT_specification {{.*}} "_ZN1C22static_member_functionEv" - -; CHECK: [[GLOBAL_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK: DW_AT_linkage_name -; CHECK: DW_AT_name ("global_function") - -; CHECK: [[GLOBAL_F7:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK: DW_AT_linkage_name -; CHECK: DW_AT_name ("f7") - ; CHECK: DW_TAG_imported_declaration ; CHECK: DW_TAG_pointer_type ; CHECK: DW_TAG_pointer_type + ; CHECK: NULL ; CHECK-LABEL: .debug_gnu_pubnames contents: @@ -200,16 +203,16 @@ ; CHECK-NEXT: [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function" ; CHECK-NEXT: [[OUTER]] EXTERNAL TYPE "outer" ; CHECK-NEXT: [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable" -; CHECK-NEXT: [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable" +; CHECK-NEXT: [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE "named_enum_class_enumerator" ; CHECK-NEXT: [[UNNAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "unnamed_enum_enumerator" ; CHECK-NEXT: [[GLOBAL_F7]] EXTERNAL FUNCTION "f7" +; CHECK-NEXT: [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable" ; CHECK-NEXT: [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)" ; FIXME: GCC produces enumerators as EXTERNAL, not STATIC -; CHECK-NEXT: [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE "named_enum_class_enumerator" ; CHECK-NEXT: [[GLOBAL_FUNC]] EXTERNAL FUNCTION "global_function" ; CHECK-NEXT: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function" -; CHECK-NEXT: [[NS]] EXTERNAL TYPE "ns" ; CHECK-NEXT: [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "named_enum_enumerator" +; CHECK-NEXT: [[NS]] EXTERNAL TYPE "ns" ; CHECK-NEXT: [[ANON]] EXTERNAL TYPE "(anonymous namespace)" ; CHECK-NEXT: [[OUTER_ANON_C]] STATIC VARIABLE "outer::(anonymous namespace)::c" ; CHECK-NEXT: [[D_VAR]] EXTERNAL VARIABLE "ns::d" @@ -227,9 +230,9 @@ ; CHECK-LABEL: debug_gnu_pubtypes contents: ; CHECK: Offset Linkage Kind Name ; CHECK-NEXT: [[INT]] STATIC TYPE "int" -; CHECK-NEXT: [[C]] EXTERNAL TYPE "C" ; CHECK-NEXT: [[UNSIGNED_INT]] STATIC TYPE "unsigned int" ; CHECK-NEXT: [[NAMED_ENUM]] EXTERNAL TYPE "named_enum" +; CHECK-NEXT: [[C]] EXTERNAL TYPE "C" ; CHECK-NEXT: [[NAMED_ENUM_CLASS]] EXTERNAL TYPE "named_enum_class" ; CHECK-NEXT: [[D]] EXTERNAL TYPE "ns::D" diff --git a/llvm/test/DebugInfo/X86/linkage-name.ll b/llvm/test/DebugInfo/X86/linkage-name.ll --- a/llvm/test/DebugInfo/X86/linkage-name.ll +++ b/llvm/test/DebugInfo/X86/linkage-name.ll @@ -1,7 +1,7 @@ ; RUN: llc -mtriple=x86_64-macosx %s -o %t -filetype=obj ; RUN: llvm-dwarfdump -v -debug-info %t | FileCheck %s -; CHECK: DW_TAG_subprogram [9] * +; CHECK: DW_TAG_subprogram [8] * ; CHECK-NOT: DW_AT_{{(MIPS_)?}}linkage_name ; CHECK: DW_AT_specification diff --git a/llvm/test/DebugInfo/X86/namelist1.ll b/llvm/test/DebugInfo/X86/namelist1.ll --- a/llvm/test/DebugInfo/X86/namelist1.ll +++ b/llvm/test/DebugInfo/X86/namelist1.ll @@ -4,10 +4,11 @@ ; RUN: llc -O0 -mtriple=x86_64-unknown-linux-gnu %s -filetype=obj -o %t.o ; RUN: llvm-dwarfdump %t.o | FileCheck %s ; -; CHECK: [[ITEM1:0x.+]]: DW_TAG_variable -; CHECK: DW_AT_name ("a") ; CHECK: [[ITEM2:0x.+]]: DW_TAG_variable ; CHECK: DW_AT_name ("b") +; CHECK: DW_TAG_variable +; CHECK: [[ITEM1:0x.+]]: DW_TAG_variable +; CHECK: DW_AT_name ("a") ; CHECK: DW_TAG_namelist ; CHECK: DW_AT_name ("nml") ; CHECK: DW_TAG_namelist_item diff --git a/llvm/test/DebugInfo/X86/prototyped.ll b/llvm/test/DebugInfo/X86/prototyped.ll --- a/llvm/test/DebugInfo/X86/prototyped.ll +++ b/llvm/test/DebugInfo/X86/prototyped.ll @@ -24,11 +24,11 @@ ; void (*x)(void); ; void y(void) { } -; CHECK: DW_TAG_subroutine_type +; CHECK: DW_TAG_subprogram ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_prototyped (true) -; CHECK: DW_TAG_subprogram +; CHECK: DW_TAG_subroutine_type ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_prototyped (true) diff --git a/llvm/test/DebugInfo/X86/ref_addr_relocation.ll b/llvm/test/DebugInfo/X86/ref_addr_relocation.ll --- a/llvm/test/DebugInfo/X86/ref_addr_relocation.ll +++ b/llvm/test/DebugInfo/X86/ref_addr_relocation.ll @@ -33,12 +33,12 @@ ; Make sure we use relocation for ref_addr on non-darwin platforms. ; CHECK: DW_TAG_compile_unit +; CHECK: DW_TAG_structure_type ; CHECK: DW_TAG_variable ; ELF-ASM: .long [[TYPE:.*]] # DW_AT_type ; DARWIN-ASM2: .long [[TYPE:.*]] ## DW_AT_type ; DARWIN-ASM4: .long [[TYPE:.*]] ## DW_AT_type ; COFF-ASM: .long [[TYPE:.*]] # DW_AT_type -; CHECK: DW_TAG_structure_type ; CHECK: cu_begin1 ; CHECK: DW_TAG_compile_unit ; CHECK-NOT: DW_TAG_structure_type @@ -60,9 +60,9 @@ ; CHECK-DWARF: DW_AT_type [DW_FORM_ref_addr] {{.*}}[[ADDR]] ; CHECK-DWARF2: DW_TAG_compile_unit +; CHECK-DWARF2: [[ADDR:.*]]: DW_TAG_structure_type ; CHECK-DWARF2: DW_TAG_variable -; CHECK-DWARF2: DW_AT_type [DW_FORM_ref4] {{.*}} => {[[ADDR:.*]]} -; CHECK-DWARF2: [[ADDR]]: DW_TAG_structure_type +; CHECK-DWARF2: DW_AT_type [DW_FORM_ref4] {{.*}} => {[[ADDR]]} source_filename = "test/DebugInfo/X86/ref_addr_relocation.ll" diff --git a/llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll b/llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll --- a/llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll +++ b/llvm/test/DebugInfo/X86/string-offsets-multiple-cus.ll @@ -42,21 +42,21 @@ ; TYPEUNITS-NOT: NULL ; TYPEUNITS: DW_TAG_enumerator ; TYPEUNITS-NOT: {{DW_TAG|NULL}} -; TYPEUNITS: DW_AT_name [DW_FORM_strx1] (indexed (00000005) string = "b") +; TYPEUNITS: DW_AT_name [DW_FORM_strx1] (indexed (00000004) string = "b") ; TYPEUNITS-NOT: contents: ; TYPEUNITS: DW_TAG_type_unit ; TYPEUNITS-NOT: {{DW_TAG|NULL}} ; TYPEUNITS: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x[[CU1_STROFF]]) ; TYPEUNITS-NOT: NULL ; TYPEUNITS: DW_TAG_enumeration_type -; TYPEUNITS: DW_AT_name [DW_FORM_strx1] (indexed (0000000d) string = "E2") +; TYPEUNITS: DW_AT_name [DW_FORM_strx1] (indexed (0000000b) string = "E2") ; TYPEUNITS-NOT: contents: ; TYPEUNITS: DW_TAG_type_unit ; TYPEUNITS-NOT: {{DW_TAG|NULL}} ; TYPEUNITS: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x[[CU1_STROFF]]) ; TYPEUNITS-NOT: NULL ; TYPEUNITS: DW_TAG_enumeration_type -; TYPEUNITS: DW_AT_name [DW_FORM_strx1] (indexed (00000013) string = "E3") +; TYPEUNITS: DW_AT_name [DW_FORM_strx1] (indexed (00000010) string = "E3") ; CU 1 ; BOTH-NOT: .contents: @@ -70,20 +70,20 @@ ; BOTH: DW_TAG_compile_unit ; BOTH-NOT: {{DW_TAG|NULL}} ; BOTH: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x[[CU1_STROFF]]) -; BOTH-NOT: NULL +; DEFUALT: NULL ; BOTH: DW_TAG_variable ; BOTH-NOT: {{DW_TAG|NULL}} -; BOTH: DW_AT_name [DW_FORM_strx1] (indexed (00000009) string = "glob2") +; BOTH: DW_AT_name [DW_FORM_strx1] (indexed (00000012) string = "glob2") ; ; CU 3 ; BOTH-NOT: contents: ; BOTH: DW_TAG_compile_unit ; BOTH-NOT: {{DW_TAG|NULL}} ; BOTH: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x[[CU1_STROFF]]) -; BOTH-NOT: NULL +; DEFAULT: NULL ; BOTH: DW_TAG_variable ; BOTH-NOT: {{DW_TAG|NULL}} -; BOTH: DW_AT_name [DW_FORM_strx1] (indexed (0000000f) string = "glob3") +; BOTH: DW_AT_name [DW_FORM_strx1] (indexed (00000013) string = "glob3") ; ; Extract the offset of a string to verify that it is referenced in the string ; offsets section. @@ -104,7 +104,16 @@ ; BOTH-NEXT: {{.*:}} ; BOTH-NEXT: {{.*:}} ; BOTH-NEXT: {{.*:}} -; The string with index 9 should be "glob2" +; BOTH-NEXT: {{.*:}} +; BOTH-NEXT: {{.*:}} +; BOTH-NEXT: {{.*:}} +; BOTH-NEXT: {{.*:}} +; BOTH-NEXT: {{.*:}} +; BOTH-NEXT: {{.*:}} +; BOTH-NEXT: {{.*:}} +; BOTH-NEXT: {{.*:}} +; BOTH-NEXT: {{.*:}} +; The string with index 12 should be "glob2" ; BOTH-NEXT: {{.*:}} [[GLOB2OFF]] ; ; ModuleID = 'test.bc' diff --git a/llvm/test/DebugInfo/X86/string-offsets-table.ll b/llvm/test/DebugInfo/X86/string-offsets-table.ll --- a/llvm/test/DebugInfo/X86/string-offsets-table.ll +++ b/llvm/test/DebugInfo/X86/string-offsets-table.ll @@ -72,11 +72,11 @@ ; SPLIT-NOT: contents: ; SPLIT: DW_TAG_enumerator ; SPLIT-NOT: {{DW_TAG|NULL}} -; SPLIT: DW_AT_name [DW_FORM_strx1] (indexed (00000001) string = "a") +; SPLIT: DW_AT_name [DW_FORM_strx1] (indexed (00000000) string = "a") ; SPLIT-NOT: contents: ; SPLIT: DW_TAG_enumerator ; SPLIT-NOT: {{DW_TAG|NULL}} -; SPLIT: DW_AT_name [DW_FORM_strx1] (indexed (00000002) string = "b") +; SPLIT: DW_AT_name [DW_FORM_strx1] (indexed (00000001) string = "b") ; ; Extract the string offsets referenced in the main file by the skeleton unit. ; SPLIT: .debug_str contents: diff --git a/llvm/test/DebugInfo/X86/template.ll b/llvm/test/DebugInfo/X86/template.ll --- a/llvm/test/DebugInfo/X86/template.ll +++ b/llvm/test/DebugInfo/X86/template.ll @@ -15,26 +15,10 @@ ; VERIFY-NOT: error: -; CHECK: [[INT:0x[0-9a-f]*]]:{{ *}}DW_TAG_base_type -; CHECK-NEXT: DW_AT_name{{.*}} = "int" - -; CHECK: DW_TAG_structure_type -; CHECK: DW_AT_name{{.*}}"y_impl" -; CHECK-NOT: {{TAG|NULL}} -; CHECK: DW_TAG_template_type_parameter - -; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name{{.*}}"var" -; CHECK-NOT: NULL -; CHECK: DW_TAG_template_type_parameter -; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]} -; CHECK-NEXT: DW_AT_name{{.*}}= "T" - - ; CHECK: DW_AT_name{{.*}}"func<3, &glbl, y_impl, nullptr, E, 1, 2>" ; CHECK-NOT: NULL ; CHECK: DW_TAG_template_value_parameter -; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]} +; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT:0x[0-9a-f]*]]} ; CHECK-NEXT: DW_AT_name{{.*}}= "x" ; CHECK-NEXT: DW_AT_const_value [DW_FORM_sdata]{{.*}}(3) @@ -71,6 +55,21 @@ ; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]} ; CHECK-NEXT: DW_AT_const_value [DW_FORM_sdata]{{.*}}(2) +; CHECK: [[INT]]:{{ *}}DW_TAG_base_type +; CHECK-NEXT: DW_AT_name{{.*}} = "int" + +; CHECK: DW_TAG_structure_type +; CHECK: DW_AT_name{{.*}}"y_impl" +; CHECK-NOT: {{TAG|NULL}} +; CHECK: DW_TAG_template_type_parameter + +; CHECK: DW_TAG_variable +; CHECK-NEXT: DW_AT_name{{.*}}"var" +; CHECK-NOT: NULL +; CHECK: DW_TAG_template_type_parameter +; CHECK-NEXT: DW_AT_type{{.*}}=> {[[INT]]} +; CHECK-NEXT: DW_AT_name{{.*}}= "T" + ; CHECK: [[INTPTR]]:{{ *}}DW_TAG_pointer_type ; CHECK-NEXT: DW_AT_type{{.*}} => {[[INT]]} diff --git a/llvm/test/DebugInfo/X86/tls.ll b/llvm/test/DebugInfo/X86/tls.ll --- a/llvm/test/DebugInfo/X86/tls.ll +++ b/llvm/test/DebugInfo/X86/tls.ll @@ -30,33 +30,45 @@ ; that here instead of raw assembly printing ; FISSION: .section .debug_info.dwo, -; 3 bytes of data in this DW_FORM_exprloc representation of the location of 'tls' -; FISSION: .byte 3{{ *}}# DW_AT_location -; DW_OP_GNU_const_index (0xfx == 252) to refer to the debug_addr table -; FISSION-NEXT: .byte 252 -; an index of zero into the debug_addr table -; FISSION-NEXT: .byte 0 - ; SINGLE: .section .debug_info, ; DARWIN: .section {{.*}}debug_info, +; SINGLE-64: DW_TAG_variable ; 10 bytes of data in this DW_FORM_exprloc representation of the location of 'tls' ; SINGLE-64: .byte 10 # DW_AT_location ; DW_OP_const8u (0x0e == 14) of address ; SINGLE-64-NEXT: .byte 14 ; SINGLE-64-NEXT: .quad tls@DTPOFF +; DARWIN: DW_TAG_variable ; DARWIN: .byte 10 ## DW_AT_location ; DW_OP_const8u (0x0e == 14) of address ; DARWIN-NEXT: .byte 14 ; DARWIN-NEXT: .quad _tls +; SINGLE-32: DW_TAG_variable ; 6 bytes of data in 32-bit mode ; SINGLE-32: .byte 6 # DW_AT_location ; DW_OP_const4u (0x0e == 12) of address ; SINGLE-32-NEXT: .byte 12 ; SINGLE-32-NEXT: .long tls@DTPOFF +; FISSION: DW_TAG_template_value_parameter +; FISSION: .byte 3 # DW_AT_location +; DW_OP_GNU_addr_index +; FISSION-NEXT: .byte 251 +; FISSION-NEXT: .byte 2 +; DW_OP_stack_value +; FISSION-NEXT: .byte 159 + +; FISSION: DW_TAG_variable +; 3 bytes of data in this DW_FORM_exprloc representation of the location of 'tls' +; FISSION: .byte 3{{ *}}# DW_AT_location +; DW_OP_GNU_const_index (0xfx == 252) to refer to the debug_addr table +; FISSION-NEXT: .byte 252 +; an index of 1 into the debug_addr table +; FISSION-NEXT: .byte 1 + ; DW_OP_GNU_push_tls_address ; GNUOP-NEXT: .byte 224 ; DW_OP_form_tls_address @@ -66,19 +78,12 @@ ; FISSION: .byte 2 # DW_AT_location ; DW_OP_GNU_addr_index ; FISSION-NEXT: .byte 251 -; FISSION-NEXT: .byte 1 - -; FISSION: DW_TAG_template_value_parameter -; FISSION: .byte 3 # DW_AT_location -; DW_OP_GNU_addr_index -; FISSION-NEXT: .byte 251 -; FISSION-NEXT: .byte 1 -; DW_OP_stack_value -; FISSION-NEXT: .byte 159 +; FISSION-NEXT: .byte 2 ; check that the expected TLS address description is the first thing in the debug_addr section ; FISSION: .section .debug_addr ; FISSION-NEXT: .Laddr_table_base0: +; FISSION-NEXT: .quad .Lfunc_begin0 ; FISSION-NEXT: .quad tls@DTPOFF ; FISSION-NEXT: .quad glbl ; FISSION-NOT: .quad glbl diff --git a/llvm/test/DebugInfo/X86/tu-to-non-tu.ll b/llvm/test/DebugInfo/X86/tu-to-non-tu.ll --- a/llvm/test/DebugInfo/X86/tu-to-non-tu.ll +++ b/llvm/test/DebugInfo/X86/tu-to-non-tu.ll @@ -90,11 +90,29 @@ ; CHECK: DW_TAG_structure_type ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name {{.*}}"tu_ref_non_tu" +; CHECK: DW_AT_name {{.*}}"non_tu" ; CHECK: DW_TAG_structure_type ; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name {{.*}}"non_tu" +; CHECK: DW_AT_name {{.*}}"_STN|templ_non_tu|" + +; CHECK: DW_TAG_structure_type +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name ("templ_non_tu") +; CHECK-NOT: DW_TAG +; CHECK: DW_TAG_template_type_parameter +; CHECK-NEXT: DW_AT_type {{.*}}"long" + +; CHECK: DW_TAG_structure_type +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name ("_STN|templ_non_tu|") +; CHECK-NOT: DW_TAG +; CHECK: DW_TAG_template_type_parameter +; CHECK-NEXT: DW_AT_type {{.*}}"bool" + +; CHECK: DW_TAG_structure_type +; CHECK-NOT: DW_TAG +; CHECK: DW_AT_name {{.*}}"tu_ref_non_tu" ; CHECK: DW_TAG_structure_type ; CHECK-NOT: DW_TAG @@ -115,29 +133,14 @@ ; CHECK: DW_TAG_structure_type ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name {{.*}}"ref_templ_non_tu" -; CHECK: DW_TAG_structure_type -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name {{.*}}"_STN|templ_non_tu|" ; CHECK: DW_TAG_structure_type ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name {{.*}}"ref_templ_non_tu_simple" -; CHECK: DW_TAG_structure_type -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name ("templ_non_tu") -; CHECK-NOT: DW_TAG -; CHECK: DW_TAG_template_type_parameter -; CHECK-NEXT: DW_AT_type {{.*}}"long" ; CHECK: DW_TAG_structure_type ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name {{.*}}"ref_templ_non_tu_mangled" -; CHECK: DW_TAG_structure_type -; CHECK-NOT: DW_TAG -; CHECK: DW_AT_name ("_STN|templ_non_tu|") -; CHECK-NOT: DW_TAG -; CHECK: DW_TAG_template_type_parameter -; CHECK-NEXT: DW_AT_type {{.*}}"bool" ; CHECK: DW_TAG_class_type ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_name {{.*}}"ref_internal_template" diff --git a/llvm/test/DebugInfo/X86/vla-global.ll b/llvm/test/DebugInfo/X86/vla-global.ll --- a/llvm/test/DebugInfo/X86/vla-global.ll +++ b/llvm/test/DebugInfo/X86/vla-global.ll @@ -1,4 +1,7 @@ ; RUN: llc -mtriple=x86_64-apple-darwin %s -o - -filetype=obj | llvm-dwarfdump - | FileCheck %s +; CHECK: DW_TAG_subprogram +; CHECK: DW_TAG_variable +; CHECK: DW_TAG_variable ; CHECK: 0x00000[[G:.*]]: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("g") ; CHECK: DW_TAG_array_type diff --git a/llvm/test/DebugInfo/attr-btf_tag.ll b/llvm/test/DebugInfo/attr-btf_tag.ll --- a/llvm/test/DebugInfo/attr-btf_tag.ll +++ b/llvm/test/DebugInfo/attr-btf_tag.ll @@ -42,37 +42,6 @@ !llvm.module.flags = !{!10, !11, !12, !13, !14} !llvm.ident = !{!15} -!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) -!1 = distinct !DIGlobalVariable(name: "g1", scope: !2, file: !3, line: 8, type: !6, isLocal: false, isDefinition: true, annotations: !7) - -; CHECK: DW_TAG_variable -; CHECK-NEXT: DW_AT_name ("g1") -; CHECK: DW_TAG_LLVM_annotation -; CHECK-NEXT: DW_AT_name ("btf_decl_tag") -; CHECK-NEXT: DW_AT_const_value ("tag1") -; CHECK-EMPTY: -; CHECK-NEXT: DW_TAG_LLVM_annotation -; CHECK-NEXT: DW_AT_name ("btf_decl_tag") -; CHECK-NEXT: DW_AT_const_value ("tag2") -; CHECK-EMPTY: -; CHECK-NEXT: NULL - -!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 13.0.0 (https://github.com/llvm/llvm-project.git 305231a4f71b68945b4dd92925c76ff49e377c86)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, splitDebugInlining: false, nameTableKind: None) -!3 = !DIFile(filename: "t.c", directory: "/tmp/home/yhs/work/tests/llvm/btf_tag") -!4 = !{} -!5 = !{!0} -!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!7 = !{!8, !9} -!8 = !{!"btf_decl_tag", !"tag1"} -!9 = !{!"btf_decl_tag", !"tag2"} -!10 = !{i32 7, !"Dwarf Version", i32 4} -!11 = !{i32 2, !"Debug Info Version", i32 3} -!12 = !{i32 1, !"wchar_size", i32 4} -!13 = !{i32 7, !"uwtable", i32 1} -!14 = !{i32 7, !"frame-pointer", i32 2} -!15 = !{!"clang version 13.0.0 (https://github.com/llvm/llvm-project.git 305231a4f71b68945b4dd92925c76ff49e377c86)"} -!16 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 10, type: !17, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !4, annotations: !7) - ; CHECK: DW_TAG_subprogram ; CHECK: DW_AT_name ("foo") ; CHECK: DW_TAG_formal_parameter @@ -96,12 +65,17 @@ ; CHECK-EMPTY: ; CHECK-NEXT: NULL -!17 = !DISubroutineType(types: !18) -!18 = !{!6, !19} -!19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64) -!20 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1", file: !3, line: 4, size: 32, elements: !21, annotations: !7) -!21 = !{!22} -!22 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !20, file: !3, line: 5, baseType: !6, size: 32, annotations: !7) +; CHECK: DW_TAG_variable +; CHECK-NEXT: DW_AT_name ("g1") +; CHECK: DW_TAG_LLVM_annotation +; CHECK-NEXT: DW_AT_name ("btf_decl_tag") +; CHECK-NEXT: DW_AT_const_value ("tag1") +; CHECK-EMPTY: +; CHECK-NEXT: DW_TAG_LLVM_annotation +; CHECK-NEXT: DW_AT_name ("btf_decl_tag") +; CHECK-NEXT: DW_AT_const_value ("tag2") +; CHECK-EMPTY: +; CHECK-NEXT: NULL ; CHECK: DW_TAG_structure_type ; CHECK-NEXT: DW_AT_name ("t1") @@ -127,6 +101,29 @@ ; CHECK-EMPTY: ; CHECK-NEXT: NULL +!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) +!1 = distinct !DIGlobalVariable(name: "g1", scope: !2, file: !3, line: 8, type: !6, isLocal: false, isDefinition: true, annotations: !7) +!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 13.0.0 (https://github.com/llvm/llvm-project.git 305231a4f71b68945b4dd92925c76ff49e377c86)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5, splitDebugInlining: false, nameTableKind: None) +!3 = !DIFile(filename: "t.c", directory: "/tmp/home/yhs/work/tests/llvm/btf_tag") +!4 = !{} +!5 = !{!0} +!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +!7 = !{!8, !9} +!8 = !{!"btf_decl_tag", !"tag1"} +!9 = !{!"btf_decl_tag", !"tag2"} +!10 = !{i32 7, !"Dwarf Version", i32 4} +!11 = !{i32 2, !"Debug Info Version", i32 3} +!12 = !{i32 1, !"wchar_size", i32 4} +!13 = !{i32 7, !"uwtable", i32 1} +!14 = !{i32 7, !"frame-pointer", i32 2} +!15 = !{!"clang version 13.0.0 (https://github.com/llvm/llvm-project.git 305231a4f71b68945b4dd92925c76ff49e377c86)"} +!16 = distinct !DISubprogram(name: "foo", scope: !3, file: !3, line: 10, type: !17, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !4, annotations: !7) +!17 = !DISubroutineType(types: !18) +!18 = !{!6, !19} +!19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64) +!20 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1", file: !3, line: 4, size: 32, elements: !21, annotations: !7) +!21 = !{!22} +!22 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !20, file: !3, line: 5, baseType: !6, size: 32, annotations: !7) !23 = !DILocalVariable(name: "arg", arg: 1, scope: !16, file: !3, line: 10, type: !19, annotations: !7) !24 = !DILocation(line: 10, column: 48, scope: !16) !25 = !DILocation(line: 11, column: 10, scope: !16) diff --git a/llvm/test/MC/WebAssembly/debug-info.ll b/llvm/test/MC/WebAssembly/debug-info.ll --- a/llvm/test/MC/WebAssembly/debug-info.ll +++ b/llvm/test/MC/WebAssembly/debug-info.ll @@ -154,20 +154,20 @@ ; CHECK-NEXT: 0x16 R_WASM_SECTION_OFFSET_I32 .debug_line 0 ; CHECK-NEXT: 0x1A R_WASM_SECTION_OFFSET_I32 .debug_str 62 ; CHECK-NEXT: 0x1E R_WASM_FUNCTION_OFFSET_I32 f2 0 -; CHECK-NEXT: 0x27 R_WASM_SECTION_OFFSET_I32 .debug_str 105 -; CHECK-NEXT: 0x33 R_WASM_MEMORY_ADDR_I32 foo 0 -; CHECK-NEXT: 0x3D R_WASM_SECTION_OFFSET_I32 .debug_str 109 -; CHECK-NEXT: 0x44 R_WASM_SECTION_OFFSET_I32 .debug_str 113 -; CHECK-NEXT: 0x50 R_WASM_MEMORY_ADDR_I32 ptr2 0 -; CHECK-NEXT: 0x5B R_WASM_FUNCTION_OFFSET_I32 f2 0 -; CHECK-NEXT: 0x66 R_WASM_GLOBAL_INDEX_I32 __stack_pointer -; CHECK-NEXT: 0x6B R_WASM_SECTION_OFFSET_I32 .debug_str 118 +; CHECK-NEXT: 0x27 R_WASM_FUNCTION_OFFSET_I32 f2 0 +; CHECK-NEXT: 0x32 R_WASM_GLOBAL_INDEX_I32 __stack_pointer +; CHECK-NEXT: 0x37 R_WASM_SECTION_OFFSET_I32 .debug_str 118 +; CHECK-NEXT: 0x3E R_WASM_SECTION_OFFSET_I32 .debug_str 105 +; CHECK-NEXT: 0x4A R_WASM_MEMORY_ADDR_I32 foo 0 +; CHECK-NEXT: 0x54 R_WASM_SECTION_OFFSET_I32 .debug_str 109 +; CHECK-NEXT: 0x5B R_WASM_SECTION_OFFSET_I32 .debug_str 113 +; CHECK-NEXT: 0x67 R_WASM_MEMORY_ADDR_I32 ptr2 0 ; CHECK-NEXT: } ; CHECK-NEXT: Section (10) .debug_aranges { ; CHECK-NEXT: 0x6 R_WASM_SECTION_OFFSET_I32 .debug_info 0 -; CHECK-NEXT: 0x10 R_WASM_MEMORY_ADDR_I32 foo 0 -; CHECK-NEXT: 0x18 R_WASM_MEMORY_ADDR_I32 ptr2 0 -; CHECK-NEXT: 0x20 R_WASM_FUNCTION_OFFSET_I32 f2 0 +; CHECK-NEXT: 0x10 R_WASM_FUNCTION_OFFSET_I32 f2 0 +; CHECK-NEXT: 0x18 R_WASM_MEMORY_ADDR_I32 foo 0 +; CHECK-NEXT: 0x20 R_WASM_MEMORY_ADDR_I32 ptr2 0 ; CHECK-NEXT: } ; CHECK-NEXT: Section (12) .debug_pubnames { ; CHECK-NEXT: 0x6 R_WASM_SECTION_OFFSET_I32 .debug_info 0 diff --git a/llvm/test/MC/WebAssembly/debug-info64.ll b/llvm/test/MC/WebAssembly/debug-info64.ll --- a/llvm/test/MC/WebAssembly/debug-info64.ll +++ b/llvm/test/MC/WebAssembly/debug-info64.ll @@ -160,20 +160,20 @@ ; CHECK-NEXT: 0x16 R_WASM_SECTION_OFFSET_I32 .debug_line 0 ; CHECK-NEXT: 0x1A R_WASM_SECTION_OFFSET_I32 .debug_str 62 ; CHECK-NEXT: 0x1E R_WASM_FUNCTION_OFFSET_I64 f2 0 -; CHECK-NEXT: 0x2B R_WASM_SECTION_OFFSET_I32 .debug_str 105 -; CHECK-NEXT: 0x37 R_WASM_MEMORY_ADDR_I64 foo 0 -; CHECK-NEXT: 0x45 R_WASM_SECTION_OFFSET_I32 .debug_str 109 -; CHECK-NEXT: 0x4C R_WASM_SECTION_OFFSET_I32 .debug_str 113 -; CHECK-NEXT: 0x58 R_WASM_MEMORY_ADDR_I64 ptr2 0 -; CHECK-NEXT: 0x67 R_WASM_FUNCTION_OFFSET_I64 f2 0 -; CHECK-NEXT: 0x76 R_WASM_GLOBAL_INDEX_I32 __stack_pointer -; CHECK-NEXT: 0x7B R_WASM_SECTION_OFFSET_I32 .debug_str 118 +; CHECK-NEXT: 0x2B R_WASM_FUNCTION_OFFSET_I64 f2 0 +; CHECK-NEXT: 0x3A R_WASM_GLOBAL_INDEX_I32 __stack_pointer +; CHECK-NEXT: 0x3F R_WASM_SECTION_OFFSET_I32 .debug_str 118 +; CHECK-NEXT: 0x46 R_WASM_SECTION_OFFSET_I32 .debug_str 105 +; CHECK-NEXT: 0x52 R_WASM_MEMORY_ADDR_I64 foo 0 +; CHECK-NEXT: 0x60 R_WASM_SECTION_OFFSET_I32 .debug_str 109 +; CHECK-NEXT: 0x67 R_WASM_SECTION_OFFSET_I32 .debug_str 113 +; CHECK-NEXT: 0x73 R_WASM_MEMORY_ADDR_I64 ptr2 0 ; CHECK-NEXT: } ; CHECK-NEXT: Section (10) .debug_aranges { ; CHECK-NEXT: 0x6 R_WASM_SECTION_OFFSET_I32 .debug_info 0 -; CHECK-NEXT: 0x10 R_WASM_MEMORY_ADDR_I64 foo 0 -; CHECK-NEXT: 0x20 R_WASM_MEMORY_ADDR_I64 ptr2 0 -; CHECK-NEXT: 0x30 R_WASM_FUNCTION_OFFSET_I64 f2 0 +; CHECK-NEXT: 0x10 R_WASM_FUNCTION_OFFSET_I64 f2 0 +; CHECK-NEXT: 0x20 R_WASM_MEMORY_ADDR_I64 foo 0 +; CHECK-NEXT: 0x30 R_WASM_MEMORY_ADDR_I64 ptr2 0 ; CHECK-NEXT: } ; CHECK-NEXT: Section (12) .debug_pubnames { ; CHECK-NEXT: 0x6 R_WASM_SECTION_OFFSET_I32 .debug_info 0 diff --git a/llvm/test/MC/WebAssembly/dwarfdump.ll b/llvm/test/MC/WebAssembly/dwarfdump.ll --- a/llvm/test/MC/WebAssembly/dwarfdump.ll +++ b/llvm/test/MC/WebAssembly/dwarfdump.ll @@ -15,46 +15,46 @@ ; CHECK-NEXT: DW_AT_low_pc (0x00000002) ; CHECK-NEXT: DW_AT_high_pc (0x00000004) -; CHECK: 0x00000026: DW_TAG_variable +; CHECK: 0x00000026: DW_TAG_subprogram +; CHECK-NEXT: DW_AT_low_pc (0x00000002) +; CHECK-NEXT: DW_AT_high_pc (0x00000004) +; CHECK-NEXT: DW_AT_frame_base (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value) +; CHECK-NEXT: DW_AT_name ("f2") +; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c") +; CHECK-NEXT: DW_AT_decl_line (2) +; CHECK-NEXT: DW_AT_prototyped (true) +; CHECK-NEXT: DW_AT_external (true) + +; CHECK: 0x0000003d: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("foo") -; CHECK-NEXT: DW_AT_type (0x00000037 "int *") +; CHECK-NEXT: DW_AT_type (0x0000004e "int *") ; CHECK-NEXT: DW_AT_external (true) ; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c") ; CHECK-NEXT: DW_AT_decl_line (4) ; CHECK-NEXT: DW_AT_location (DW_OP_addr 0x0) -; CHECK: 0x00000037: DW_TAG_pointer_type -; CHECK-NEXT: DW_AT_type (0x0000003c "int") +; CHECK: 0x0000004e: DW_TAG_pointer_type +; CHECK-NEXT: DW_AT_type (0x00000053 "int") -; CHECK: 0x0000003c: DW_TAG_base_type +; CHECK: 0x00000053: DW_TAG_base_type ; CHECK-NEXT: DW_AT_name ("int") ; CHECK-NEXT: DW_AT_encoding (DW_ATE_signed) ; CHECK-NEXT: DW_AT_byte_size (0x04) -; CHECK: 0x00000043: DW_TAG_variable +; CHECK: 0x0000005a: DW_TAG_variable ; CHECK-NEXT: DW_AT_name ("ptr2") -; CHECK-NEXT: DW_AT_type (0x00000054 "void (*)()") +; CHECK-NEXT: DW_AT_type (0x0000006b "void (*)()") ; CHECK-NEXT: DW_AT_external (true) ; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c") ; CHECK-NEXT: DW_AT_decl_line (5) ; CHECK-NEXT: DW_AT_location (DW_OP_addr 0x4) -; CHECK: 0x00000054: DW_TAG_pointer_type -; CHECK-NEXT: DW_AT_type (0x00000059 "void ()") +; CHECK: 0x0000006b: DW_TAG_pointer_type +; CHECK-NEXT: DW_AT_type (0x00000070 "void ()") -; CHECK: 0x00000059: DW_TAG_subroutine_type +; CHECK: 0x00000070: DW_TAG_subroutine_type ; CHECK-NEXT: DW_AT_prototyped (true) -; CHECK: 0x0000005a: DW_TAG_subprogram -; CHECK-NEXT: DW_AT_low_pc (0x00000002) -; CHECK-NEXT: DW_AT_high_pc (0x00000004) -; CHECK-NEXT: DW_AT_frame_base (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value) -; CHECK-NEXT: DW_AT_name ("f2") -; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c") -; CHECK-NEXT: DW_AT_decl_line (2) -; CHECK-NEXT: DW_AT_prototyped (true) -; CHECK-NEXT: DW_AT_external (true) - ; CHECK: 0x00000071: NULL @@ -66,48 +66,48 @@ ; SPLIT-NEXT: DW_AT_language (DW_LANG_C99) ; SPLIT-NEXT: DW_AT_name ("test.c") ; SPLIT-NEXT: DW_AT_GNU_dwo_name ("{{.*}}dwarfdump.ll.tmp.dwo") -; SPLIT-NEXT: DW_AT_GNU_dwo_id (0xad3151f12153fa17) +; SPLIT-NEXT: DW_AT_GNU_dwo_id (0x0642bb5dada25ca6) -; SPLIT: 0x00000019: DW_TAG_variable +; SPLIT: 0x00000019: DW_TAG_subprogram +; SPLIT-NEXT: DW_AT_low_pc (indexed (00000000) address = ) +; SPLIT-NEXT: DW_AT_high_pc (0x00000002) +; SPLIT-NEXT: DW_AT_frame_base (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value) +; SPLIT-NEXT: DW_AT_name ("f2") +; SPLIT-NEXT: DW_AT_decl_file (0x01) +; SPLIT-NEXT: DW_AT_decl_line (2) +; SPLIT-NEXT: DW_AT_prototyped (true) +; SPLIT-NEXT: DW_AT_external (true) + +; SPLIT: 0x0000002a: DW_TAG_variable ; SPLIT-NEXT: DW_AT_name ("foo") -; SPLIT-NEXT: DW_AT_type (0x00000024 "int *") +; SPLIT-NEXT: DW_AT_type (0x00000035 "int *") ; SPLIT-NEXT: DW_AT_external (true) ; SPLIT-NEXT: DW_AT_decl_file (0x01) ; SPLIT-NEXT: DW_AT_decl_line (4) -; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x0) +; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x1) -; SPLIT: 0x00000024: DW_TAG_pointer_type -; SPLIT-NEXT: DW_AT_type (0x00000029 "int") +; SPLIT: 0x00000035: DW_TAG_pointer_type +; SPLIT-NEXT: DW_AT_type (0x0000003a "int") -; SPLIT: 0x00000029: DW_TAG_base_type +; SPLIT: 0x0000003a: DW_TAG_base_type ; SPLIT-NEXT: DW_AT_name ("int") ; SPLIT-NEXT: DW_AT_encoding (DW_ATE_signed) ; SPLIT-NEXT: DW_AT_byte_size (0x04) -; SPLIT: 0x0000002d: DW_TAG_variable +; SPLIT: 0x0000003e: DW_TAG_variable ; SPLIT-NEXT: DW_AT_name ("ptr2") -; SPLIT-NEXT: DW_AT_type (0x00000038 "void (*)()") +; SPLIT-NEXT: DW_AT_type (0x00000049 "void (*)()") ; SPLIT-NEXT: DW_AT_external (true) ; SPLIT-NEXT: DW_AT_decl_file (0x01) ; SPLIT-NEXT: DW_AT_decl_line (5) -; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x1) +; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x2) -; SPLIT: 0x00000038: DW_TAG_pointer_type -; SPLIT-NEXT: DW_AT_type (0x0000003d "void ()") +; SPLIT: 0x00000049: DW_TAG_pointer_type +; SPLIT-NEXT: DW_AT_type (0x0000004e "void ()") -; SPLIT: 0x0000003d: DW_TAG_subroutine_type +; SPLIT: 0x0000004e: DW_TAG_subroutine_type ; SPLIT-NEXT: DW_AT_prototyped (true) -; SPLIT: 0x0000003e: DW_TAG_subprogram -; SPLIT-NEXT: DW_AT_low_pc (indexed (00000002) address = ) -; SPLIT-NEXT: DW_AT_high_pc (0x00000002) -; SPLIT-NEXT: DW_AT_frame_base (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value) -; SPLIT-NEXT: DW_AT_name ("f2") -; SPLIT-NEXT: DW_AT_decl_file (0x01) -; SPLIT-NEXT: DW_AT_decl_line (2) -; SPLIT-NEXT: DW_AT_prototyped (true) -; SPLIT-NEXT: DW_AT_external (true) - ; SPLIT: 0x0000004f: NULL diff --git a/llvm/test/MC/WebAssembly/dwarfdump64.ll b/llvm/test/MC/WebAssembly/dwarfdump64.ll --- a/llvm/test/MC/WebAssembly/dwarfdump64.ll +++ b/llvm/test/MC/WebAssembly/dwarfdump64.ll @@ -14,46 +14,46 @@ ; CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002) ; CHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] (0x00000002) -; CHECK: 0x0000002a: DW_TAG_variable +; CHECK: 0x0000002a: DW_TAG_subprogram +; CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002) +; CHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] (0x00000002) +; CHECK-NEXT: DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value) +; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("f2") +; CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c") +; CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1] (2) +; CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present] (true) +; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true) + +; CHECK: 0x00000045: DW_TAG_variable ; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("foo") -; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000003f "int *") +; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000005a "int *") ; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true) ; CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c") ; CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1] (4) ; CHECK-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x0) -; CHECK: 0x0000003f: DW_TAG_pointer_type -; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000044 "int") +; CHECK: 0x0000005a: DW_TAG_pointer_type +; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000005f "int") -; CHECK: 0x00000044: DW_TAG_base_type +; CHECK: 0x0000005f: DW_TAG_base_type ; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("int") ; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) ; CHECK-NEXT: DW_AT_byte_size [DW_FORM_data1] (0x04) -; CHECK: 0x0000004b: DW_TAG_variable +; CHECK: 0x00000066: DW_TAG_variable ; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("ptr2") -; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000060 "void (*)()") +; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x0000007b "void (*)()") ; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true) ; CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c") ; CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1] (5) ; CHECK-NEXT: DW_AT_location [DW_FORM_exprloc] (DW_OP_addr 0x8) -; CHECK: 0x00000060: DW_TAG_pointer_type -; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000065 "void ()") +; CHECK: 0x0000007b: DW_TAG_pointer_type +; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (0x00000080 "void ()") -; CHECK: 0x00000065: DW_TAG_subroutine_type +; CHECK: 0x00000080: DW_TAG_subroutine_type ; CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present] (true) -; CHECK: 0x00000066: DW_TAG_subprogram -; CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000002) -; CHECK-NEXT: DW_AT_high_pc [DW_FORM_data4] (0x00000002) -; CHECK-NEXT: DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value) -; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ("f2") -; CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1] ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c") -; CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1] (2) -; CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present] (true) -; CHECK-NEXT: DW_AT_external [DW_FORM_flag_present] (true) - ; CHECK: 0x00000081: NULL target triple = "wasm64-unknown-unknown"