[llvm] r341311 - [DebugInfo] Have the verifier accept missing linkage names.

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 5 15:01:34 PDT 2018


That does seem like a rather long test - could it be smaller/simpler by
using C or C++ with clang and hand-modifying the LLVM IR to add a linkage
name for a structure?

On Mon, Sep 3, 2018 at 5:13 AM Jonas Devlieghere via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: jdevlieghere
> Date: Mon Sep  3 05:12:17 2018
> New Revision: 341311
>
> URL: http://llvm.org/viewvc/llvm-project?rev=341311&view=rev
> Log:
> [DebugInfo] Have the verifier accept missing linkage names.
>
> According to the standard, for the .debug_names (the "dwarf accelerator
> tables"):
>
> > If a subprogram or inlined subroutine is included, and has a
> > DW_AT_linkage_name attribute, there will be an additional index entry
> > for the linkage name.
>
> For Swift we generate DW_structure_types with a linkage name and the
> verifier was incorrectly rejecting this. This patch fixes that by only
> considering the linkage name in those particular cases. The test is the
> "reduced" debug info of the failing swift test on swift.org.
>
> Differential revision: https://reviews.llvm.org/D51420
>
> Added:
>     llvm/trunk/test/tools/llvm-dwarfdump/X86/verify_no_linkage_name.s
> Modified:
>     llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp
>
> Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp?rev=341311&r1=341310&r2=341311&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp Mon Sep  3 05:12:17
> 2018
> @@ -1059,16 +1059,19 @@ DWARFVerifier::verifyNameIndexAbbrevs(co
>    return NumErrors;
>  }
>
> -static SmallVector<StringRef, 2> getNames(const DWARFDie &DIE) {
> +static SmallVector<StringRef, 2> getNames(const DWARFDie &DIE,
> +                                          bool IncludeLinkageName = true)
> {
>    SmallVector<StringRef, 2> Result;
>    if (const char *Str = DIE.getName(DINameKind::ShortName))
>      Result.emplace_back(Str);
>    else if (DIE.getTag() == dwarf::DW_TAG_namespace)
>      Result.emplace_back("(anonymous namespace)");
>
> -  if (const char *Str = DIE.getName(DINameKind::LinkageName)) {
> -    if (Result.empty() || Result[0] != Str)
> -      Result.emplace_back(Str);
> +  if (IncludeLinkageName) {
> +    if (const char *Str = DIE.getName(DINameKind::LinkageName)) {
> +      if (Result.empty() || Result[0] != Str)
> +        Result.emplace_back(Str);
> +    }
>    }
>
>    return Result;
> @@ -1211,7 +1214,9 @@ unsigned DWARFVerifier::verifyNameIndexC
>    // "If a subprogram or inlined subroutine is included, and has a
>    // DW_AT_linkage_name attribute, there will be an additional index
> entry for
>    // the linkage name."
> -  auto EntryNames = getNames(Die);
> +  auto IncludeLinkageName = Die.getTag() == DW_TAG_subprogram ||
> +                            Die.getTag() == DW_TAG_inlined_subroutine;
> +  auto EntryNames = getNames(Die, IncludeLinkageName);
>    if (EntryNames.empty())
>      return 0;
>
>
> Added: llvm/trunk/test/tools/llvm-dwarfdump/X86/verify_no_linkage_name.s
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/verify_no_linkage_name.s?rev=341311&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-dwarfdump/X86/verify_no_linkage_name.s
> (added)
> +++ llvm/trunk/test/tools/llvm-dwarfdump/X86/verify_no_linkage_name.s Mon
> Sep  3 05:12:17 2018
> @@ -0,0 +1,646 @@
> +# This test generates a DW_TAG_structure_type with a linkage name. This
> linkage
> +# name will not be part of the accelerator table and the verifier should
> not
> +# complain about this.
> +#
> +# DW_TAG_structure_type
> +#   DW_AT_name    ("C")
> +#   DW_AT_linkage_name    ("$S4main1CCD")
> +#
> +# RUN: llvm-mc %s -filetype obj -triple x86_64-unknown-linux-gnu -o %t.o
> +# RUN: llvm-dwarfdump -debug-info %t.o | FileCheck %s
> +# RUN: llvm-dwarfdump -debug-names %t.o | FileCheck %s --check-prefix
> ACCEL
> +# RUN: llvm-dwarfdump -verify -debug-names %t.o
> +
> +# CHECK: DW_AT_name    ("Bool")
> +# CHECK-NEXT: DW_AT_linkage_name    ("$SSbD")
> +
> +# ACCEL-NOT: String: {{.*}} "$SSbD"
> +# ACCEL: String: {{.*}} "Bool"
> +# ACCEL-NOT: String: {{.*}} "$SSbD"
> +
> +       .text
> +       .file   "local-vars.swift.gyb.tmp.s"
> +       .protected      main
> +       .globl  main
> +       .p2align        4, 0x90
> +       .type   main, at function
> +main:
> +.Lfunc_begin0:
> +.Ltmp0:
> +.Ltmp1:
> +.Lfunc_end0:
> +.Lfunc_begin1:
> +.Ltmp2:
> +.Ltmp3:
> +.Ltmp4:
> +.Lfunc_end1:
> +.Lfunc_begin2:
> +.Ltmp5:
> +.Ltmp6:
> +.Ltmp7:
> +.Lfunc_end2:
> +.Lfunc_begin3:
> +.Ltmp8:
> +.Ltmp9:
> +.Ltmp10:
> +.Lfunc_end3:
> +.Lfunc_begin4:
> +.Ltmp11:
> +.Ltmp12:
> +.Lfunc_end4:
> +.Lfunc_begin5:
> +.Ltmp13:
> +.LBB5_2:
> +.Ltmp14:
> +.Lfunc_end5:
> +.L__unnamed_1:
> +.L__unnamed_2:
> +.L__unnamed_3:
> +       .section        .swift1_autolink_entries,"a", at progbits
> +       .p2align        3
> +.L_swift1_autolink_entries:
> +       .asciz  "-lswiftSwiftOnoneSupport\000-lswiftCore"
> +       .size   .L_swift1_autolink_entries, 37
> +
> +       .section        ".linker-options","e", at llvm_linker_options
> +       .section        .debug_str,"MS", at progbits,1
> +.Linfo_string0:
> +       .asciz  "Swift version 4.2-dev effective-4.1.50 (LLVM a4b1bcaa22,
> Clang 257fa19143, Swift 836ad071bd)"
> +.Linfo_string1:
> +       .asciz
> "/home/jonas/swift/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/test-linux-x86_64/DebugInfo/Output/local-vars.swift.gyb.tmp.swift"
> +.Linfo_string2:
> +       .asciz
> "/home/jonas/swift/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/test-linux-x86_64/DebugInfo"
> +.Linfo_string3:
> +       .asciz  "main"
> +.Linfo_string4:
> +       .asciz
> "/home/jonas/swift/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/test-linux-x86_64/DebugInfo/Output"
> +.Linfo_string5:
> +       .asciz  "Swift"
> +.Linfo_string6:
> +       .asciz
> "/home/jonas/swift/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/lib/swift/linux/x86_64/Swift.swiftmodule"
> +.Linfo_string7:
> +       .asciz  "SwiftOnoneSupport"
> +.Linfo_string8:
> +       .asciz
> "/home/jonas/swift/build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/lib/swift/linux/x86_64/SwiftOnoneSupport.swiftmodule"
> +.Linfo_string9:
> +       .asciz  "C"
> +.Linfo_string10:
> +       .asciz  "$S4main1CCD"
> +.Linfo_string11:
> +       .asciz  "init"
> +.Linfo_string12:
> +       .asciz  "$S4main1CCyACSicfc"
> +.Linfo_string13:
> +       .asciz  "isZero"
> +.Linfo_string14:
> +       .asciz  "$S4main1CC6isZeroSbyF"
> +.Linfo_string15:
> +       .asciz  "deinit"
> +.Linfo_string16:
> +       .asciz  "$S4main1CCfd"
> +.Linfo_string17:
> +       .asciz  "$S4main1CCfD"
> +.Linfo_string18:
> +       .asciz  "$S4main1CCMa"
> +.Linfo_string19:
> +       .asciz  "Int32"
> +.Linfo_string20:
> +       .asciz  "$Ss5Int32VD"
> +.Linfo_string21:
> +       .asciz  "Bool"
> +.Linfo_string22:
> +       .asciz  "$SSbD"
> +.Linfo_string23:
> +       .asciz  "$SBoD"
> +.Linfo_string24:
> +       .asciz  "$SytD"
> +.Linfo_string25:
> +       .asciz  "i"
> +.Linfo_string26:
> +       .asciz  "Int"
> +.Linfo_string27:
> +       .asciz  "$SSiD"
> +.Linfo_string28:
> +       .asciz  "self"
> +       .section        .debug_abbrev,"", at progbits
> +       .byte   1
> +       .byte   17
> +       .byte   1
> +       .byte   37
> +       .byte   14
> +       .byte   19
> +       .byte   5
> +       .byte   3
> +       .byte   14
> +       .byte   16
> +       .byte   23
> +       .byte   27
> +       .byte   14
> +       .ascii  "\345\177"
> +       .byte   11
> +       .byte   17
> +       .byte   1
> +       .byte   18
> +       .byte   6
> +       .byte   0
> +       .byte   0
> +       .byte   2
> +       .byte   30
> +       .byte   1
> +       .byte   3
> +       .byte   14
> +       .ascii  "\200|"
> +       .byte   14
> +       .byte   0
> +       .byte   0
> +       .byte   3
> +       .byte   46
> +       .byte   0
> +       .byte   17
> +       .byte   1
> +       .byte   18
> +       .byte   6
> +       .byte   64
> +       .byte   24
> +       .byte   110
> +       .byte   14
> +       .byte   3
> +       .byte   14
> +       .byte   58
> +       .byte   11
> +       .byte   59
> +       .byte   11
> +       .byte   73
> +       .byte   19
> +       .byte   63
> +       .byte   25
> +       .byte   0
> +       .byte   0
> +       .byte   4
> +       .byte   19
> +       .byte   1
> +       .byte   3
> +       .byte   14
> +       .byte   110
> +       .byte   14
> +       .byte   11
> +       .byte   11
> +       .byte   58
> +       .byte   11
> +       .byte   59
> +       .byte   11
> +       .ascii  "\346\177"
> +       .byte   11
> +       .byte   0
> +       .byte   0
> +       .byte   5
> +       .byte   46
> +       .byte   1
> +       .byte   17
> +       .byte   1
> +       .byte   18
> +       .byte   6
> +       .byte   64
> +       .byte   24
> +       .byte   110
> +       .byte   14
> +       .byte   3
> +       .byte   14
> +       .byte   58
> +       .byte   11
> +       .byte   59
> +       .byte   11
> +       .byte   73
> +       .byte   19
> +       .byte   63
> +       .byte   25
> +       .byte   0
> +       .byte   0
> +       .byte   6
> +       .byte   5
> +       .byte   0
> +       .byte   2
> +       .byte   24
> +       .byte   3
> +       .byte   14
> +       .byte   58
> +       .byte   11
> +       .byte   59
> +       .byte   11
> +       .byte   73
> +       .byte   19
> +       .byte   0
> +       .byte   0
> +       .byte   7
> +       .byte   5
> +       .byte   0
> +       .byte   2
> +       .byte   24
> +       .byte   3
> +       .byte   14
> +       .byte   58
> +       .byte   11
> +       .byte   59
> +       .byte   11
> +       .byte   73
> +       .byte   19
> +       .byte   52
> +       .byte   25
> +       .byte   0
> +       .byte   0
> +       .byte   8
> +       .byte   46
> +       .byte   0
> +       .byte   17
> +       .byte   1
> +       .byte   18
> +       .byte   6
> +       .byte   64
> +       .byte   24
> +       .byte   110
> +       .byte   14
> +       .byte   52
> +       .byte   25
> +       .byte   63
> +       .byte   25
> +       .byte   0
> +       .byte   0
> +       .byte   9
> +       .byte   58
> +       .byte   0
> +       .byte   24
> +       .byte   19
> +       .byte   0
> +       .byte   0
> +       .byte   10
> +       .byte   19
> +       .byte   0
> +       .byte   3
> +       .byte   14
> +       .byte   110
> +       .byte   14
> +       .byte   11
> +       .byte   11
> +       .ascii  "\346\177"
> +       .byte   11
> +       .byte   0
> +       .byte   0
> +       .byte   11
> +       .byte   30
> +       .byte   0
> +       .byte   3
> +       .byte   14
> +       .ascii  "\200|"
> +       .byte   14
> +       .byte   0
> +       .byte   0
> +       .byte   12
> +       .byte   15
> +       .byte   0
> +       .byte   3
> +       .byte   14
> +       .byte   0
> +       .byte   0
> +       .byte   0
> +       .section        .debug_info,"", at progbits
> +.Lcu_begin0:
> +       .long   385
> +       .short  4
> +       .long   .debug_abbrev
> +       .byte   8
> +       .byte   1
> +       .long   .Linfo_string0
> +       .short  30
> +       .long   .Linfo_string1
> +       .long   .Lline_table_start0
> +       .long   .Linfo_string2
> +       .byte   4
> +       .quad   .Lfunc_begin0
> +       .long   .Lfunc_end5-.Lfunc_begin0
> +       .byte   2
> +       .long   .Linfo_string3
> +       .long   .Linfo_string4
> +       .byte   3
> +       .quad   .Lfunc_begin0
> +       .long   .Lfunc_end0-.Lfunc_begin0
> +       .byte   1
> +       .byte   86
> +       .long   .Linfo_string3
> +       .long   .Linfo_string3
> +       .byte   1
> +       .byte   1
> +       .long   319
> +
> +       .byte   4
> +       .long   .Linfo_string9
> +       .long   .Linfo_string10
> +       .byte   8
> +       .byte   1
> +       .byte   9
> +       .byte   30
> +       .byte   5
> +       .quad   .Lfunc_begin1
> +       .long   .Lfunc_end1-.Lfunc_begin1
> +       .byte   1
> +       .byte   86
> +       .long   .Linfo_string12
> +       .long   .Linfo_string11
> +       .byte   1
> +       .byte   11
> +       .long   81
> +
> +       .byte   6
> +       .byte   2
> +       .byte   145
> +       .byte   120
> +       .long   .Linfo_string25
> +       .byte   1
> +       .byte   11
> +       .long   341
> +       .byte   7
> +       .byte   2
> +       .byte   145
> +       .byte   112
> +       .long   .Linfo_string28
> +       .byte   1
> +       .byte   11
> +       .long   81
> +
> +       .byte   0
> +       .byte   5
> +       .quad   .Lfunc_begin2
> +       .long   .Lfunc_end2-.Lfunc_begin2
> +       .byte   1
> +       .byte   86
> +       .long   .Linfo_string14
> +       .long   .Linfo_string13
> +       .byte   1
> +       .byte   12
> +       .long   330
> +
> +       .byte   7
> +       .byte   2
> +       .byte   145
> +       .byte   112
> +       .long   .Linfo_string28
> +       .byte   1
> +       .byte   12
> +       .long   81
> +
> +       .byte   0
> +       .byte   5
> +       .quad   .Lfunc_begin3
> +       .long   .Lfunc_end3-.Lfunc_begin3
> +       .byte   1
> +       .byte   86
> +       .long   .Linfo_string16
> +       .long   .Linfo_string15
> +       .byte   1
> +       .byte   9
> +       .long   372
> +
> +       .byte   7
> +       .byte   2
> +       .byte   145
> +       .byte   120
> +       .long   .Linfo_string28
> +       .byte   1
> +       .byte   9
> +       .long   81
> +
> +       .byte   0
> +       .byte   5
> +       .quad   .Lfunc_begin4
> +       .long   .Lfunc_end4-.Lfunc_begin4
> +       .byte   1
> +       .byte   86
> +       .long   .Linfo_string17
> +       .long   .Linfo_string15
> +       .byte   1
> +       .byte   9
> +       .long   377
> +
> +       .byte   7
> +       .byte   2
> +       .byte   145
> +       .byte   120
> +       .long   .Linfo_string28
> +       .byte   1
> +       .byte   9
> +       .long   81
> +
> +       .byte   0
> +       .byte   0
> +       .byte   8
> +       .quad   .Lfunc_begin5
> +       .long   .Lfunc_end5-.Lfunc_begin5
> +       .byte   1
> +       .byte   86
> +       .long   .Linfo_string18
> +
> +
> +       .byte   0
> +       .byte   9
> +       .long   43
> +       .byte   2
> +       .long   .Linfo_string5
> +       .long   .Linfo_string6
> +       .byte   10
> +       .long   .Linfo_string19
> +       .long   .Linfo_string20
> +       .byte   4
> +       .byte   30
> +       .byte   10
> +       .long   .Linfo_string21
> +       .long   .Linfo_string22
> +       .byte   1
> +       .byte   30
> +       .byte   10
> +       .long   .Linfo_string26
> +       .long   .Linfo_string27
> +       .byte   8
> +       .byte   30
> +       .byte   0
> +       .byte   9
> +       .long   310
> +       .byte   11
> +       .long   .Linfo_string7
> +       .long   .Linfo_string8
> +       .byte   9
> +       .long   358
> +       .byte   12
> +       .long   .Linfo_string23
> +       .byte   10
> +       .long   .Linfo_string24
> +       .long   .Linfo_string24
> +       .byte   0
> +       .byte   30
> +       .byte   0
> +       .section        .debug_ranges,"", at progbits
> +       .section        .debug_macinfo,"", at progbits
> +       .byte   0
> +       .section        .debug_names,"", at progbits
> +       .long   .Lnames_end0-.Lnames_start0
> +.Lnames_start0:
> +       .short  5
> +       .short  0
> +       .long   1
> +       .long   0
> +       .long   0
> +       .long   14
> +       .long   15
> +       .long   .Lnames_abbrev_end0-.Lnames_abbrev_start0
> +       .long   8
> +       .ascii  "LLVM0700"
> +       .long   .Lcu_begin0
> +       .long   0
> +       .long   0
> +       .long   1
> +       .long   0
> +       .long   2
> +       .long   0
> +       .long   0
> +       .long   4
> +       .long   6
> +       .long   7
> +       .long   11
> +       .long   14
> +       .long   15
> +       .long   0
> +       .long   -125696958
> +       .long   -1434607370
> +       .long   -1434607370
> +       .long   87184321
> +       .long   2090120081
> +       .long   -1434607142
> +       .long   181113837
> +       .long   262755061
> +       .long   2090370361
> +       .long   -1008003439
> +       .long   193495088
> +       .long   2090499946
> +       .long   -1294887406
> +       .long   181088625
> +       .long   177672
> +       .long   .Linfo_string15
> +       .long   .Linfo_string16
> +       .long   .Linfo_string17
> +       .long   .Linfo_string13
> +       .long   .Linfo_string21
> +       .long   .Linfo_string18
> +       .long   .Linfo_string24
> +       .long   .Linfo_string19
> +       .long   .Linfo_string11
> +       .long   .Linfo_string12
> +       .long   .Linfo_string26
> +       .long   .Linfo_string3
> +       .long   .Linfo_string14
> +       .long   .Linfo_string23
> +       .long   .Linfo_string9
> +       .long   .Lnames14-.Lnames_entries0
> +       .long   .Lnames9-.Lnames_entries0
> +       .long   .Lnames10-.Lnames_entries0
> +       .long   .Lnames13-.Lnames_entries0
> +       .long   .Lnames7-.Lnames_entries0
> +       .long   .Lnames12-.Lnames_entries0
> +       .long   .Lnames2-.Lnames_entries0
> +       .long   .Lnames8-.Lnames_entries0
> +       .long   .Lnames11-.Lnames_entries0
> +       .long   .Lnames5-.Lnames_entries0
> +       .long   .Lnames3-.Lnames_entries0
> +       .long   .Lnames1-.Lnames_entries0
> +       .long   .Lnames6-.Lnames_entries0
> +       .long   .Lnames4-.Lnames_entries0
> +       .long   .Lnames0-.Lnames_entries0
> +.Lnames_abbrev_start0:
> +       .byte   46
> +       .byte   46
> +       .byte   3
> +       .byte   19
> +       .byte   0
> +       .byte   0
> +       .byte   15
> +       .byte   15
> +       .byte   3
> +       .byte   19
> +       .byte   0
> +       .byte   0
> +       .byte   19
> +       .byte   19
> +       .byte   3
> +       .byte   19
> +       .byte   0
> +       .byte   0
> +       .byte   0
> +.Lnames_abbrev_end0:
> +.Lnames_entries0:
> +.Lnames14:
> +       .byte   46
> +       .long   196
> +       .byte   46
> +       .long   240
> +       .long   0
> +.Lnames9:
> +       .byte   46
> +       .long   196
> +       .long   0
> +.Lnames10:
> +       .byte   46
> +       .long   240
> +       .long   0
> +.Lnames13:
> +       .byte   46
> +       .long   152
> +       .long   0
> +.Lnames7:
> +       .byte   19
> +       .long   330
> +       .long   0
> +.Lnames12:
> +       .byte   46
> +       .long   285
> +       .long   0
> +.Lnames2:
> +       .byte   19
> +       .long   377
> +       .long   0
> +.Lnames8:
> +       .byte   19
> +       .long   319
> +       .long   0
> +.Lnames11:
> +       .byte   46
> +       .long   94
> +       .long   0
> +.Lnames5:
> +       .byte   46
> +       .long   94
> +       .long   0
> +.Lnames3:
> +       .byte   19
> +       .long   341
> +       .long   0
> +.Lnames1:
> +       .byte   46
> +       .long   52
> +       .long   0
> +.Lnames6:
> +       .byte   46
> +       .long   152
> +       .long   0
> +.Lnames4:
> +       .byte   15
> +       .long   372
> +       .long   0
> +.Lnames0:
> +       .byte   19
> +       .long   81
> +       .long   0
> +       .p2align        2
> +.Lnames_end0:
> +
> +       .globl  $S4main1CCN
> +       .protected      $S4main1CCN
> +.set $S4main1CCN, ($S4main1CCMf)+16
> +       .section        .debug_line,"", at progbits
> +.Lline_table_start0:
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180905/7b9e9a23/attachment-0001.html>


More information about the llvm-commits mailing list