[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 12:58:24 PDT 2017


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?
>> rev=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:     2020202F44454641554C544C49423A
>> 224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220
>> +  - 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:     2020202F44454641554C544C49423A
>> 224C4942434D5422202F44454641554C544C49423A224F4C444E414D45532220
>> +  - 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/3fca07c9/attachment-0001.html>


More information about the llvm-commits mailing list