[lld] r305811 - [PDB] Don't emit debug info associated with dead chunks

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 20 14:30:02 PDT 2017


I added some missing fields to the codeview symbol yaml mapping code in
r305842 and r305857. This made check-lld msan clean for my locally.

On Tue, Jun 20, 2017 at 12:58 PM, Reid Kleckner <rnk at google.com> wrote:

> Looking. This suggests that yaml2obj doesn't fully initialize certain
> records before writing them to disk.
>
> On Tue, Jun 20, 2017 at 11:51 AM, Vitaly Buka <vitalybuka at google.com>
> wrote:
>
>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-
>> fast/builds/5789/steps/check-lld%20msan/logs/stdio
>>
>> FAIL: lld :: COFF/pdb-comdat.test (73 of 1178)
>> ******************** TEST 'lld :: COFF/pdb-comdat.test' FAILED ********************
>> Script:
>> --
>> rm -rf /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/COFF/Output/pdb-comdat.test.tmp && mkdir -p /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/COFF/Output/pdb-comdat.test.tmp && cd /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/tools/lld/test/COFF/Output/pdb-comdat.test.tmp
>> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/yaml2obj /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/COFF/Inputs/pdb_comdat_main.yaml -o pdb_comdat_main.obj
>> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/yaml2obj /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/COFF/Inputs/pdb_comdat_bar.yaml -o pdb_comdat_bar.obj
>> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/lld-link pdb_comdat_main.obj pdb_comdat_bar.obj -out:t.exe -debug -pdb:t.pdb -nodefaultlib -entry:main
>> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/llvm-pdbutil raw -l t.pdb | /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/FileCheck /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/COFF/pdb-comdat.test
>> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/lld-link pdb_comdat_bar.obj pdb_comdat_main.obj -out:t.exe -debug -pdb:t.pdb -nodefaultlib -entry:main
>> /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/llvm-pdbutil raw -l t.pdb | /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/./bin/FileCheck /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/lld/test/COFF/pdb-comdat.test --check-prefix=REORDER
>> --
>> Exit Code: 77
>>
>> Command Output (stderr):
>> --
>> Uninitialized bytes in __interceptor_write at offset 692 inside [0x720000025000, 2337)
>> ==19002==WARNING: MemorySanitizer: use-of-uninitialized-value
>>     #0 0x6c107a in llvm::raw_fd_ostream::write_impl(char const*, unsigned long) /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/raw_ostream.cpp:564:19
>>     #1 0x49ed5b in flush /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/raw_ostream.h:142:7
>>     #2 0x49ed5b in main /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/tools/yaml2obj/yaml2obj.cpp:98
>>     #3 0x7fde6ba3182f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
>>     #4 0x433e88 in _start (/mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/yaml2obj+0x433e88)
>>
>> SUMMARY: MemorySanitizer: use-of-uninitialized-value /mnt/b/sanitizer-buildbot3/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/raw_ostream.cpp:564:19 in llvm::raw_fd_ostream::write_impl(char const*, unsigned long)
>> Exiting
>>
>> --
>>
>> ********************
>> Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..
>> Testing Time: 16.05s
>> ********************
>> Failing Tests (1):
>>     lld :: COFF/pdb-comdat.test
>>
>>
>> On Tue, Jun 20, 2017 at 10:14 AM, Reid Kleckner via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: rnk
>>> Date: Tue Jun 20 12:14:09 2017
>>> New Revision: 305811
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=305811&view=rev
>>> Log:
>>> [PDB] Don't emit debug info associated with dead chunks
>>>
>>> Summary:
>>> Previously we didn't add debug info chunks to the SparseChunks array, so
>>> they didn't participate in section GC. Now we do.
>>>
>>> Reviewers: ruiu
>>>
>>> Subscribers: aprantl, llvm-commits
>>>
>>> Differential Revision: https://reviews.llvm.org/D34356
>>>
>>> Added:
>>>     lld/trunk/test/COFF/Inputs/pdb_comdat_bar.yaml
>>>     lld/trunk/test/COFF/Inputs/pdb_comdat_main.yaml
>>>     lld/trunk/test/COFF/pdb-comdat.test
>>> Modified:
>>>     lld/trunk/COFF/Chunks.h
>>>     lld/trunk/COFF/InputFiles.cpp
>>>     lld/trunk/COFF/PDB.cpp
>>>     lld/trunk/COFF/Writer.cpp
>>>
>>> Modified: lld/trunk/COFF/Chunks.h
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Chunks.h?
>>> rev=305811&r1=305810&r2=305811&view=diff
>>> ============================================================
>>> ==================
>>> --- lld/trunk/COFF/Chunks.h (original)
>>> +++ lld/trunk/COFF/Chunks.h Tue Jun 20 12:14:09 2017
>>> @@ -177,6 +177,12 @@ public:
>>>    // redundant when GC is enabled, as all comdat sections will start
>>> out dead.
>>>    void markDiscarded() { Discarded = true; }
>>>
>>> +  // True if this is a codeview debug info chunk. These will not be
>>> laid out in
>>> +  // the image. Instead they will end up in the PDB, if one is
>>> requested.
>>> +  bool isCodeView() const {
>>> +    return SectionName == ".debug" || SectionName.startswith(".debug
>>> $");
>>> +  }
>>> +
>>>    // Allow iteration over the bodies of this chunk's relocated symbols.
>>>    llvm::iterator_range<symbol_iterator> symbols() const {
>>>      return llvm::make_range(symbol_iterator(File, Relocs.begin()),
>>>
>>> Modified: lld/trunk/COFF/InputFiles.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/InputFile
>>> s.cpp?rev=305811&r1=305810&r2=305811&view=diff
>>> ============================================================
>>> ==================
>>> --- lld/trunk/COFF/InputFiles.cpp (original)
>>> +++ lld/trunk/COFF/InputFiles.cpp Tue Jun 20 12:14:09 2017
>>> @@ -132,17 +132,17 @@ void ObjectFile::initializeChunks() {
>>>      if (!Config->Debug && Name.startswith(".debug"))
>>>        continue;
>>>
>>> -    // CodeView sections are stored to a different vector because they
>>> are
>>> -    // not linked in the regular manner.
>>> -    if (Name == ".debug" || Name.startswith(".debug$")) {
>>> -      DebugChunks.push_back(make<SectionChunk>(this, Sec));
>>> -      continue;
>>> -    }
>>> -
>>>      if (Sec->Characteristics & llvm::COFF::IMAGE_SCN_LNK_REMOVE)
>>>        continue;
>>>      auto *C = make<SectionChunk>(this, Sec);
>>> -    Chunks.push_back(C);
>>> +
>>> +    // CodeView sections are stored to a different vector because they
>>> are not
>>> +    // linked in the regular manner.
>>> +    if (C->isCodeView())
>>> +      DebugChunks.push_back(C);
>>> +    else
>>> +      Chunks.push_back(C);
>>> +
>>>      SparseChunks[I] = C;
>>>    }
>>>  }
>>>
>>> Modified: lld/trunk/COFF/PDB.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/PDB.cpp?r
>>> ev=305811&r1=305810&r2=305811&view=diff
>>> ============================================================
>>> ==================
>>> --- lld/trunk/COFF/PDB.cpp (original)
>>> +++ lld/trunk/COFF/PDB.cpp Tue Jun 20 12:14:09 2017
>>> @@ -164,10 +164,7 @@ static void addObjectsToPDB(BumpPtrAlloc
>>>
>>>      // Now do all line info.
>>>      for (SectionChunk *DebugChunk : File->getDebugChunks()) {
>>> -      // FIXME: Debug chunks do not have a correct isLive() bit.
>>> -      // FIXME: When linker GC is off we need to ignore debug info whose
>>> -      // associated symbol was discarded.
>>> -      if (DebugChunk->getSectionName() != ".debug$S")
>>> +      if (!DebugChunk->isLive() || DebugChunk->getSectionName() !=
>>> ".debug$S")
>>>          continue;
>>>
>>>        ArrayRef<uint8_t> RelocatedDebugContents =
>>>
>>> Modified: lld/trunk/COFF/Writer.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cp
>>> p?rev=305811&r1=305810&r2=305811&view=diff
>>> ============================================================
>>> ==================
>>> --- lld/trunk/COFF/Writer.cpp (original)
>>> +++ lld/trunk/COFF/Writer.cpp Tue Jun 20 12:14:09 2017
>>> @@ -445,9 +445,12 @@ Optional<coff_symbol16> Writer::createSy
>>>    if (isa<DefinedRelative>(Def))
>>>      return None;
>>>
>>> -  if (auto *D = dyn_cast<DefinedRegular>(Def))
>>> -    if (!D->getChunk()->isLive())
>>> +  if (auto *D = dyn_cast<DefinedRegular>(Def)) {
>>> +    // Don't write dead symbols or symbols in codeview sections to the
>>> symbol
>>> +    // table.
>>> +    if (!D->getChunk()->isLive() || D->getChunk()->isCodeView())
>>>        return None;
>>> +  }
>>>
>>>    if (auto *Sym = dyn_cast<DefinedImportData>(Def))
>>>      if (!Sym->File->Live)
>>>
>>> Added: lld/trunk/test/COFF/Inputs/pdb_comdat_bar.yaml
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/Inpu
>>> ts/pdb_comdat_bar.yaml?rev=305811&view=auto
>>> ============================================================
>>> ==================
>>> --- lld/trunk/test/COFF/Inputs/pdb_comdat_bar.yaml (added)
>>> +++ lld/trunk/test/COFF/Inputs/pdb_comdat_bar.yaml Tue Jun 20 12:14:09
>>> 2017
>>> @@ -0,0 +1,440 @@
>>> +--- !COFF
>>> +header:
>>> +  Machine:         IMAGE_FILE_MACHINE_AMD64
>>> +  Characteristics: [  ]
>>> +sections:
>>> +  - Name:            .drectve
>>> +    Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
>>> +    Alignment:       1
>>> +    SectionData:     2020202F44454641554C544C49423
>>> A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220
>>> +  - Name:            '.debug$S'
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       1
>>> +    Subsections:
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_OBJNAME
>>> +            ObjNameSym:
>>> +              Signature:       0
>>> +              ObjectName:      'C:\src\llvm-project\build\pdb
>>> _comdat_bar.obj'
>>> +          - Kind:            S_COMPILE3
>>> +            Compile3Sym:
>>> +              Flags:           [ SecurityChecks, HotPatch ]
>>> +              Machine:         X64
>>> +              FrontendMajor:   19
>>> +              FrontendMinor:   0
>>> +              FrontendBuild:   24215
>>> +              FrontendQFE:     1
>>> +              BackendMajor:    19
>>> +              BackendMinor:    0
>>> +              BackendBuild:    24215
>>> +              BackendQFE:      1
>>> +              Version:         'Microsoft (R) Optimizing Compiler'
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_GPROC32_ID
>>> +            ProcSym:
>>> +              PtrParent:       0
>>> +              PtrEnd:          0
>>> +              PtrNext:         0
>>> +              CodeSize:        14
>>> +              DbgStart:        4
>>> +              DbgEnd:          9
>>> +              FunctionType:    4102
>>> +              Segment:         0
>>> +              Flags:           [  ]
>>> +              DisplayName:     bar
>>> +          - Kind:            S_FRAMEPROC
>>> +            FrameProcSym:
>>> +              TotalFrameBytes: 40
>>> +              PaddingFrameBytes: 0
>>> +              OffsetToPadding: 0
>>> +              BytesOfCalleeSavedRegisters: 0
>>> +              OffsetOfExceptionHandler: 0
>>> +              SectionIdOfExceptionHandler: 0
>>> +              Flags:           [ AsynchronousExceptionHandling,
>>> OptimizedForSpeed ]
>>> +          - Kind:            S_PROC_ID_END
>>> +            ScopeEndSym:
>>> +      - !Lines
>>> +        CodeSize:        14
>>> +        Flags:           [  ]
>>> +        RelocOffset:     0
>>> +        RelocSegment:    0
>>> +        Blocks:
>>> +          - FileName:        'c:\src\llvm-project\build\pdb
>>> _comdat_bar.c'
>>> +            Lines:
>>> +              - Offset:          0
>>> +                LineStart:       3
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          4
>>> +                LineStart:       4
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          9
>>> +                LineStart:       5
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +            Columns:
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_GDATA32
>>> +            DataSym:
>>> +              Type:            116
>>> +              DisplayName:     global
>>> +      - !FileChecksums
>>> +        Checksums:
>>> +          - FileName:        'c:\src\llvm-project\build\pdb
>>> _comdat_bar.c'
>>> +            Kind:            MD5
>>> +            Checksum:        365279DB4FCBEDD721BBFC3B14A953C2
>>> +          - FileName:        'c:\src\llvm-project\build\foo.h'
>>> +            Kind:            MD5
>>> +            Checksum:        D74D834EFAC3AE2B45E606A8320B1D5C
>>> +      - !StringTable
>>> +        Strings:
>>> +          - 'c:\src\llvm-project\build\pdb_comdat_bar.c'
>>> +          - 'c:\src\llvm-project\build\foo.h'
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_BUILDINFO
>>> +            BuildInfoSym:
>>> +              BuildId:         4110
>>> +    Relocations:
>>> +      - VirtualAddress:  168
>>> +        SymbolName:      bar
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  172
>>> +        SymbolName:      bar
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +      - VirtualAddress:  224
>>> +        SymbolName:      bar
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  228
>>> +        SymbolName:      bar
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +      - VirtualAddress:  288
>>> +        SymbolName:      global
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  292
>>> +        SymbolName:      global
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +  - Name:            '.debug$T'
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       1
>>> +    Types:
>>> +      - Kind:            LF_ARGLIST
>>> +        ArgList:
>>> +          ArgIndices:      [ 0 ]
>>> +      - Kind:            LF_PROCEDURE
>>> +        Procedure:
>>> +          ReturnType:      3
>>> +          CallConv:        NearC
>>> +          Options:         [ None ]
>>> +          ParameterCount:  0
>>> +          ArgumentList:    4096
>>> +      - Kind:            LF_POINTER
>>> +        Pointer:
>>> +          ReferentType:    4097
>>> +          Attrs:           65548
>>> +      - Kind:            LF_FUNC_ID
>>> +        FuncId:
>>> +          ParentScope:     0
>>> +          FunctionType:    4097
>>> +          Name:            foo
>>> +      - Kind:            LF_ARGLIST
>>> +        ArgList:
>>> +          ArgIndices:      [  ]
>>> +      - Kind:            LF_PROCEDURE
>>> +        Procedure:
>>> +          ReturnType:      3
>>> +          CallConv:        NearC
>>> +          Options:         [ None ]
>>> +          ParameterCount:  0
>>> +          ArgumentList:    4100
>>> +      - Kind:            LF_FUNC_ID
>>> +        FuncId:
>>> +          ParentScope:     0
>>> +          FunctionType:    4101
>>> +          Name:            bar
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          'C:\src\llvm-project\build'
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          'C:\PROGRA~2\MICROS~1.0\VC\Bin\amd64\cl.exe'
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          '-c -Z7 -MT -IC:\PROGRA~2\MICROS~1.0\VC\include
>>> -IC:\PROGRA~2\MICROS~1.0\VC\atlmfc\include
>>> -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\ucrt
>>> -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\shared
>>> -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\um'
>>> +      - Kind:            LF_SUBSTR_LIST
>>> +        StringList:
>>> +          StringIndices:   [ 4105 ]
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              4106
>>> +          String:          ' -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\winrt
>>> -TC -X'
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          pdb_comdat_bar.c
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          'C:\src\llvm-project\build\vc140.pdb'
>>> +      - Kind:            LF_BUILDINFO
>>> +        BuildInfo:
>>> +          ArgIndices:      [ 4103, 4104, 4108, 4109, 4107 ]
>>> +  - Name:            .bss
>>> +    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA,
>>> IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
>>> +    Alignment:       4
>>> +    SectionData:     ''
>>> +  - Name:            '.text$mn'
>>> +    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE,
>>> IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       16
>>> +    SectionData:     4883EC28E8000000004883C428C3
>>> +    Relocations:
>>> +      - VirtualAddress:  5
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_REL32
>>> +  - Name:            '.text$mn'
>>> +    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT,
>>> IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       16
>>> +    SectionData:     8B0500000000FFC0890500000000C3
>>> +    Relocations:
>>> +      - VirtualAddress:  2
>>> +        SymbolName:      global
>>> +        Type:            IMAGE_REL_AMD64_REL32
>>> +      - VirtualAddress:  10
>>> +        SymbolName:      global
>>> +        Type:            IMAGE_REL_AMD64_REL32
>>> +  - Name:            '.debug$S'
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       1
>>> +    Subsections:
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_GPROC32_ID
>>> +            ProcSym:
>>> +              PtrParent:       0
>>> +              PtrEnd:          0
>>> +              PtrNext:         0
>>> +              CodeSize:        15
>>> +              DbgStart:        0
>>> +              DbgEnd:          14
>>> +              FunctionType:    4099
>>> +              Segment:         0
>>> +              Flags:           [  ]
>>> +              DisplayName:     foo
>>> +          - Kind:            S_FRAMEPROC
>>> +            FrameProcSym:
>>> +              TotalFrameBytes: 0
>>> +              PaddingFrameBytes: 0
>>> +              OffsetToPadding: 0
>>> +              BytesOfCalleeSavedRegisters: 0
>>> +              OffsetOfExceptionHandler: 0
>>> +              SectionIdOfExceptionHandler: 0
>>> +              Flags:           [ MarkedInline,
>>> AsynchronousExceptionHandling, OptimizedForSpeed ]
>>> +          - Kind:            S_PROC_ID_END
>>> +            ScopeEndSym:
>>> +      - !Lines
>>> +        CodeSize:        15
>>> +        Flags:           [  ]
>>> +        RelocOffset:     0
>>> +        RelocSegment:    0
>>> +        Blocks:
>>> +          - FileName:        'c:\src\llvm-project\build\foo.h'
>>> +            Lines:
>>> +              - Offset:          0
>>> +                LineStart:       2
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          0
>>> +                LineStart:       3
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          14
>>> +                LineStart:       4
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +            Columns:
>>> +    Relocations:
>>> +      - VirtualAddress:  44
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  48
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +      - VirtualAddress:  100
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  104
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +  - Name:            .xdata
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       4
>>> +    SectionData:     '0104010004420000'
>>> +  - Name:            .pdata
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       4
>>> +    SectionData:     '000000000E00000000000000'
>>> +    Relocations:
>>> +      - VirtualAddress:  0
>>> +        SymbolName:      '$LN3'
>>> +        Type:            IMAGE_REL_AMD64_ADDR32NB
>>> +      - VirtualAddress:  4
>>> +        SymbolName:      '$LN3'
>>> +        Type:            IMAGE_REL_AMD64_ADDR32NB
>>> +      - VirtualAddress:  8
>>> +        SymbolName:      '$unwind$bar'
>>> +        Type:            IMAGE_REL_AMD64_ADDR32NB
>>> +symbols:
>>> +  - Name:            .drectve
>>> +    Value:           0
>>> +    SectionNumber:   1
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          47
>>> +      NumberOfRelocations: 0
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          0
>>> +  - Name:            '.debug$S'
>>> +    Value:           0
>>> +    SectionNumber:   2
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          460
>>> +      NumberOfRelocations: 6
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          0
>>> +  - Name:            '.debug$T'
>>> +    Value:           0
>>> +    SectionNumber:   3
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          628
>>> +      NumberOfRelocations: 0
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          0
>>> +  - Name:            .bss
>>> +    Value:           0
>>> +    SectionNumber:   4
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          4
>>> +      NumberOfRelocations: 0
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          0
>>> +  - Name:            global
>>> +    Value:           0
>>> +    SectionNumber:   4
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
>>> +  - Name:            '.text$mn'
>>> +    Value:           0
>>> +    SectionNumber:   5
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          14
>>> +      NumberOfRelocations: 1
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        1682752513
>>> +      Number:          0
>>> +  - Name:            '.text$mn'
>>> +    Value:           0
>>> +    SectionNumber:   6
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          15
>>> +      NumberOfRelocations: 2
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        1746394828
>>> +      Number:          0
>>> +      Selection:       IMAGE_COMDAT_SELECT_ANY
>>> +  - Name:            '.debug$S'
>>> +    Value:           0
>>> +    SectionNumber:   7
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          148
>>> +      NumberOfRelocations: 4
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          6
>>> +      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
>>> +  - Name:            foo
>>> +    Value:           0
>>> +    SectionNumber:   6
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
>>> +    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
>>> +  - Name:            bar
>>> +    Value:           0
>>> +    SectionNumber:   5
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
>>> +    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
>>> +  - Name:            '$LN3'
>>> +    Value:           0
>>> +    SectionNumber:   5
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_LABEL
>>> +  - Name:            .xdata
>>> +    Value:           0
>>> +    SectionNumber:   8
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          8
>>> +      NumberOfRelocations: 0
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        264583633
>>> +      Number:          0
>>> +  - Name:            '$unwind$bar'
>>> +    Value:           0
>>> +    SectionNumber:   8
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +  - Name:            .pdata
>>> +    Value:           0
>>> +    SectionNumber:   9
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          12
>>> +      NumberOfRelocations: 3
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        361370162
>>> +      Number:          0
>>> +  - Name:            '$pdata$bar'
>>> +    Value:           0
>>> +    SectionNumber:   9
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +...
>>>
>>> Added: lld/trunk/test/COFF/Inputs/pdb_comdat_main.yaml
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/Inpu
>>> ts/pdb_comdat_main.yaml?rev=305811&view=auto
>>> ============================================================
>>> ==================
>>> --- lld/trunk/test/COFF/Inputs/pdb_comdat_main.yaml (added)
>>> +++ lld/trunk/test/COFF/Inputs/pdb_comdat_main.yaml Tue Jun 20 12:14:09
>>> 2017
>>> @@ -0,0 +1,446 @@
>>> +--- !COFF
>>> +header:
>>> +  Machine:         IMAGE_FILE_MACHINE_AMD64
>>> +  Characteristics: [  ]
>>> +sections:
>>> +  - Name:            .drectve
>>> +    Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
>>> +    Alignment:       1
>>> +    SectionData:     2020202F44454641554C544C49423
>>> A224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220
>>> +  - Name:            '.debug$S'
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       1
>>> +    Subsections:
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_OBJNAME
>>> +            ObjNameSym:
>>> +              Signature:       0
>>> +              ObjectName:      'C:\src\llvm-project\build\pdb
>>> _comdat_main.obj'
>>> +          - Kind:            S_COMPILE3
>>> +            Compile3Sym:
>>> +              Flags:           [ SecurityChecks, HotPatch ]
>>> +              Machine:         X64
>>> +              FrontendMajor:   19
>>> +              FrontendMinor:   0
>>> +              FrontendBuild:   24215
>>> +              FrontendQFE:     1
>>> +              BackendMajor:    19
>>> +              BackendMinor:    0
>>> +              BackendBuild:    24215
>>> +              BackendQFE:      1
>>> +              Version:         'Microsoft (R) Optimizing Compiler'
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_GPROC32_ID
>>> +            ProcSym:
>>> +              PtrParent:       0
>>> +              PtrEnd:          0
>>> +              PtrNext:         0
>>> +              CodeSize:        24
>>> +              DbgStart:        4
>>> +              DbgEnd:          19
>>> +              FunctionType:    4102
>>> +              Segment:         0
>>> +              Flags:           [  ]
>>> +              DisplayName:     main
>>> +          - Kind:            S_FRAMEPROC
>>> +            FrameProcSym:
>>> +              TotalFrameBytes: 40
>>> +              PaddingFrameBytes: 0
>>> +              OffsetToPadding: 0
>>> +              BytesOfCalleeSavedRegisters: 0
>>> +              OffsetOfExceptionHandler: 0
>>> +              SectionIdOfExceptionHandler: 0
>>> +              Flags:           [ AsynchronousExceptionHandling,
>>> OptimizedForSpeed ]
>>> +          - Kind:            S_PROC_ID_END
>>> +            ScopeEndSym:
>>> +      - !Lines
>>> +        CodeSize:        24
>>> +        Flags:           [  ]
>>> +        RelocOffset:     0
>>> +        RelocSegment:    0
>>> +        Blocks:
>>> +          - FileName:        'c:\src\llvm-project\build\pdb
>>> _comdat_main.c'
>>> +            Lines:
>>> +              - Offset:          0
>>> +                LineStart:       2
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          4
>>> +                LineStart:       3
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          9
>>> +                LineStart:       4
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          14
>>> +                LineStart:       5
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          19
>>> +                LineStart:       6
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +            Columns:
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_GDATA32
>>> +            DataSym:
>>> +              Type:            116
>>> +              DisplayName:     global
>>> +      - !FileChecksums
>>> +        Checksums:
>>> +          - FileName:        'c:\src\llvm-project\build\pdb
>>> _comdat_main.c'
>>> +            Kind:            MD5
>>> +            Checksum:        F969E51BBE373436D81492EB61387F36
>>> +          - FileName:        'c:\src\llvm-project\build\foo.h'
>>> +            Kind:            MD5
>>> +            Checksum:        D74D834EFAC3AE2B45E606A8320B1D5C
>>> +      - !StringTable
>>> +        Strings:
>>> +          - 'c:\src\llvm-project\build\pdb_comdat_main.c'
>>> +          - 'c:\src\llvm-project\build\foo.h'
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_BUILDINFO
>>> +            BuildInfoSym:
>>> +              BuildId:         4111
>>> +    Relocations:
>>> +      - VirtualAddress:  168
>>> +        SymbolName:      main
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  172
>>> +        SymbolName:      main
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +      - VirtualAddress:  224
>>> +        SymbolName:      main
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  228
>>> +        SymbolName:      main
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +      - VirtualAddress:  304
>>> +        SymbolName:      global
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  308
>>> +        SymbolName:      global
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +  - Name:            '.debug$T'
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       1
>>> +    Types:
>>> +      - Kind:            LF_ARGLIST
>>> +        ArgList:
>>> +          ArgIndices:      [ 0 ]
>>> +      - Kind:            LF_PROCEDURE
>>> +        Procedure:
>>> +          ReturnType:      3
>>> +          CallConv:        NearC
>>> +          Options:         [ None ]
>>> +          ParameterCount:  0
>>> +          ArgumentList:    4096
>>> +      - Kind:            LF_POINTER
>>> +        Pointer:
>>> +          ReferentType:    4097
>>> +          Attrs:           65548
>>> +      - Kind:            LF_FUNC_ID
>>> +        FuncId:
>>> +          ParentScope:     0
>>> +          FunctionType:    4097
>>> +          Name:            foo
>>> +      - Kind:            LF_ARGLIST
>>> +        ArgList:
>>> +          ArgIndices:      [  ]
>>> +      - Kind:            LF_PROCEDURE
>>> +        Procedure:
>>> +          ReturnType:      116
>>> +          CallConv:        NearC
>>> +          Options:         [ None ]
>>> +          ParameterCount:  0
>>> +          ArgumentList:    4100
>>> +      - Kind:            LF_FUNC_ID
>>> +        FuncId:
>>> +          ParentScope:     0
>>> +          FunctionType:    4101
>>> +          Name:            main
>>> +      - Kind:            LF_FUNC_ID
>>> +        FuncId:
>>> +          ParentScope:     0
>>> +          FunctionType:    4097
>>> +          Name:            bar
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          'C:\src\llvm-project\build'
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          'C:\PROGRA~2\MICROS~1.0\VC\Bin\amd64\cl.exe'
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          '-c -Z7 -MT -IC:\PROGRA~2\MICROS~1.0\VC\include
>>> -IC:\PROGRA~2\MICROS~1.0\VC\atlmfc\include
>>> -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\ucrt
>>> -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\shared
>>> -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\um'
>>> +      - Kind:            LF_SUBSTR_LIST
>>> +        StringList:
>>> +          StringIndices:   [ 4106 ]
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              4107
>>> +          String:          ' -IC:\PROGRA~2\WI3CF2~1\10\include\10.0.14393.0\winrt
>>> -TC -X'
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          pdb_comdat_main.c
>>> +      - Kind:            LF_STRING_ID
>>> +        StringId:
>>> +          Id:              0
>>> +          String:          'C:\src\llvm-project\build\vc140.pdb'
>>> +      - Kind:            LF_BUILDINFO
>>> +        BuildInfo:
>>> +          ArgIndices:      [ 4104, 4105, 4109, 4110, 4108 ]
>>> +  - Name:            '.text$mn'
>>> +    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE,
>>> IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       16
>>> +    SectionData:     4883EC28E800000000E800000000B82A0000004883C428C3
>>> +    Relocations:
>>> +      - VirtualAddress:  5
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_REL32
>>> +      - VirtualAddress:  10
>>> +        SymbolName:      bar
>>> +        Type:            IMAGE_REL_AMD64_REL32
>>> +  - Name:            '.text$mn'
>>> +    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT,
>>> IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       16
>>> +    SectionData:     8B0500000000FFC0890500000000C3
>>> +    Relocations:
>>> +      - VirtualAddress:  2
>>> +        SymbolName:      global
>>> +        Type:            IMAGE_REL_AMD64_REL32
>>> +      - VirtualAddress:  10
>>> +        SymbolName:      global
>>> +        Type:            IMAGE_REL_AMD64_REL32
>>> +  - Name:            '.debug$S'
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       1
>>> +    Subsections:
>>> +      - !Symbols
>>> +        Records:
>>> +          - Kind:            S_GPROC32_ID
>>> +            ProcSym:
>>> +              PtrParent:       0
>>> +              PtrEnd:          0
>>> +              PtrNext:         0
>>> +              CodeSize:        15
>>> +              DbgStart:        0
>>> +              DbgEnd:          14
>>> +              FunctionType:    4099
>>> +              Segment:         0
>>> +              Flags:           [  ]
>>> +              DisplayName:     foo
>>> +          - Kind:            S_FRAMEPROC
>>> +            FrameProcSym:
>>> +              TotalFrameBytes: 0
>>> +              PaddingFrameBytes: 0
>>> +              OffsetToPadding: 0
>>> +              BytesOfCalleeSavedRegisters: 0
>>> +              OffsetOfExceptionHandler: 0
>>> +              SectionIdOfExceptionHandler: 0
>>> +              Flags:           [ MarkedInline,
>>> AsynchronousExceptionHandling, OptimizedForSpeed ]
>>> +          - Kind:            S_PROC_ID_END
>>> +            ScopeEndSym:
>>> +      - !Lines
>>> +        CodeSize:        15
>>> +        Flags:           [  ]
>>> +        RelocOffset:     0
>>> +        RelocSegment:    0
>>> +        Blocks:
>>> +          - FileName:        'c:\src\llvm-project\build\foo.h'
>>> +            Lines:
>>> +              - Offset:          0
>>> +                LineStart:       2
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          0
>>> +                LineStart:       3
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +              - Offset:          14
>>> +                LineStart:       4
>>> +                IsStatement:     true
>>> +                EndDelta:        0
>>> +            Columns:
>>> +    Relocations:
>>> +      - VirtualAddress:  44
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  48
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +      - VirtualAddress:  100
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_SECREL
>>> +      - VirtualAddress:  104
>>> +        SymbolName:      foo
>>> +        Type:            IMAGE_REL_AMD64_SECTION
>>> +  - Name:            .xdata
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       4
>>> +    SectionData:     '0104010004420000'
>>> +  - Name:            .pdata
>>> +    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA,
>>> IMAGE_SCN_MEM_READ ]
>>> +    Alignment:       4
>>> +    SectionData:     '000000001800000000000000'
>>> +    Relocations:
>>> +      - VirtualAddress:  0
>>> +        SymbolName:      '$LN3'
>>> +        Type:            IMAGE_REL_AMD64_ADDR32NB
>>> +      - VirtualAddress:  4
>>> +        SymbolName:      '$LN3'
>>> +        Type:            IMAGE_REL_AMD64_ADDR32NB
>>> +      - VirtualAddress:  8
>>> +        SymbolName:      '$unwind$main'
>>> +        Type:            IMAGE_REL_AMD64_ADDR32NB
>>> +symbols:
>>> +  - Name:            .drectve
>>> +    Value:           0
>>> +    SectionNumber:   1
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          47
>>> +      NumberOfRelocations: 0
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          0
>>> +  - Name:            '.debug$S'
>>> +    Value:           0
>>> +    SectionNumber:   2
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          480
>>> +      NumberOfRelocations: 6
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          0
>>> +  - Name:            '.debug$T'
>>> +    Value:           0
>>> +    SectionNumber:   3
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          648
>>> +      NumberOfRelocations: 0
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          0
>>> +  - Name:            '.text$mn'
>>> +    Value:           0
>>> +    SectionNumber:   4
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          24
>>> +      NumberOfRelocations: 2
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        492663294
>>> +      Number:          0
>>> +  - Name:            '.text$mn'
>>> +    Value:           0
>>> +    SectionNumber:   5
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          15
>>> +      NumberOfRelocations: 2
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        1746394828
>>> +      Number:          0
>>> +      Selection:       IMAGE_COMDAT_SELECT_ANY
>>> +  - Name:            '.debug$S'
>>> +    Value:           0
>>> +    SectionNumber:   6
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          148
>>> +      NumberOfRelocations: 4
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        0
>>> +      Number:          5
>>> +      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
>>> +  - Name:            foo
>>> +    Value:           0
>>> +    SectionNumber:   5
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
>>> +    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
>>> +  - Name:            bar
>>> +    Value:           0
>>> +    SectionNumber:   0
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
>>> +    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
>>> +  - Name:            main
>>> +    Value:           0
>>> +    SectionNumber:   4
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
>>> +    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
>>> +  - Name:            '$LN3'
>>> +    Value:           0
>>> +    SectionNumber:   4
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_LABEL
>>> +  - Name:            .xdata
>>> +    Value:           0
>>> +    SectionNumber:   7
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          8
>>> +      NumberOfRelocations: 0
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        264583633
>>> +      Number:          0
>>> +  - Name:            '$unwind$main'
>>> +    Value:           0
>>> +    SectionNumber:   7
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +  - Name:            .pdata
>>> +    Value:           0
>>> +    SectionNumber:   8
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +    SectionDefinition:
>>> +      Length:          12
>>> +      NumberOfRelocations: 3
>>> +      NumberOfLinenumbers: 0
>>> +      CheckSum:        2942184094
>>> +      Number:          0
>>> +  - Name:            '$pdata$main'
>>> +    Value:           0
>>> +    SectionNumber:   8
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_STATIC
>>> +  - Name:            global
>>> +    Value:           0
>>> +    SectionNumber:   0
>>> +    SimpleType:      IMAGE_SYM_TYPE_NULL
>>> +    ComplexType:     IMAGE_SYM_DTYPE_NULL
>>> +    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
>>> +...
>>>
>>> Added: lld/trunk/test/COFF/pdb-comdat.test
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/pdb-
>>> comdat.test?rev=305811&view=auto
>>> ============================================================
>>> ==================
>>> --- lld/trunk/test/COFF/pdb-comdat.test (added)
>>> +++ lld/trunk/test/COFF/pdb-comdat.test Tue Jun 20 12:14:09 2017
>>> @@ -0,0 +1,52 @@
>>> +Consider this example program with an inline function "foo":
>>> +
>>> +==> foo.h <==
>>> +extern int global;
>>> +__inline void foo() {
>>> +  ++global;
>>> +}
>>> +void bar();
>>> +==> pdb_comdat_main.c <==
>>> +#include "foo.h"
>>> +int main(void) {
>>> +  foo();
>>> +  bar();
>>> +  return 42;
>>> +}
>>> +==> pdb_comdat_bar.c <==
>>> +#include "foo.h"
>>> +void bar(void) {
>>> +  foo();
>>> +}
>>> +
>>> +Both object files will contain debug info for foo, but only the debug
>>> info from
>>> +pdb_comdat_main.obj should be included in the PDB.
>>> +
>>> +RUN: rm -rf %t && mkdir -p %t && cd %t
>>> +RUN: yaml2obj %S/Inputs/pdb_comdat_main.yaml -o pdb_comdat_main.obj
>>> +RUN: yaml2obj %S/Inputs/pdb_comdat_bar.yaml -o pdb_comdat_bar.obj
>>> +RUN: lld-link pdb_comdat_main.obj pdb_comdat_bar.obj -out:t.exe -debug
>>> -pdb:t.pdb -nodefaultlib -entry:main
>>> +RUN: llvm-pdbutil raw -l t.pdb | FileCheck %s
>>> +
>>> +CHECK:                            Lines
>>> +CHECK: ============================================================
>>> +CHECK-LABEL:   Mod 0000 | `{{.*}}pdb_comdat_main.obj`:
>>> +CHECK:       c:\src\llvm-project\build\pdb_comdat_main.c (MD5:
>>> F969E51BBE373436D81492EB61387F36)
>>> +CHECK:       c:\src\llvm-project\build\foo.h (MD5:
>>> D74D834EFAC3AE2B45E606A8320B1D5C)
>>> +CHECK-LABEL:   Mod 0001 | `{{.*}}pdb_comdat_bar.obj`:
>>> +CHECK:       c:\src\llvm-project\build\pdb_comdat_bar.c (MD5:
>>> 365279DB4FCBEDD721BBFC3B14A953C2)
>>> +CHECK-NOT:       c:\src\llvm-project\build\foo.h
>>> +CHECK-LABEL:   Mod 0002 | `* Linker *`:
>>> +
>>> +Reorder the object files and verify that the other table is selected.
>>> +
>>> +RUN: lld-link pdb_comdat_bar.obj pdb_comdat_main.obj -out:t.exe -debug
>>> -pdb:t.pdb -nodefaultlib -entry:main
>>> +RUN: llvm-pdbutil raw -l t.pdb | FileCheck %s --check-prefix=REORDER
>>> +
>>> +REORDER-LABEL:   Mod 0000 | `{{.*}}pdb_comdat_bar.obj`:
>>> +REORDER:       c:\src\llvm-project\build\pdb_comdat_bar.c (MD5:
>>> 365279DB4FCBEDD721BBFC3B14A953C2)
>>> +REORDER:       c:\src\llvm-project\build\foo.h (MD5:
>>> D74D834EFAC3AE2B45E606A8320B1D5C)
>>> +REORDER-LABEL:   Mod 0001 | `{{.*}}pdb_comdat_main.obj`:
>>> +REORDER:       c:\src\llvm-project\build\pdb_comdat_main.c
>>> +REORDER-NOT:       c:\src\llvm-project\build\foo.h
>>> +REORDER-LABEL:   Mod 0002 | `* Linker *`:
>>>
>>>
>>> _______________________________________________
>>> 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/20170620/284b5bfd/attachment-0001.html>


More information about the llvm-commits mailing list