if (!findLineTable(C, Addr, CVStrTab, Checksums, Lines, OffsetInLinetable))
return {"", 0};
- uint32_t NameIndex;
- uint32_t LineNumber;
+ Optional<uint32_t> NameIndex;
+ Optional<uint32_t> LineNumber;
for (LineColumnEntry &Entry : Lines) {
for (const LineNumberEntry &LN : Entry.LineNumbers) {
+ LineInfo LI(LN.Flags);
if (LN.Offset > OffsetInLinetable) {
+ if (!NameIndex) {
+ NameIndex = Entry.NameIndex;
+ LineNumber = LI.getStartLine();
+ }
StringRef Filename =
- ExitOnErr(getFileName(CVStrTab, Checksums, NameIndex));
- return {Filename, LineNumber};
+ ExitOnErr(getFileName(CVStrTab, Checksums, *NameIndex));
+ return {Filename, *LineNumber};
}
- LineInfo LI(LN.Flags);
NameIndex = Entry.NameIndex;
LineNumber = LI.getStartLine();
}
}
- StringRef Filename = ExitOnErr(getFileName(CVStrTab, Checksums, NameIndex));
- return {Filename, LineNumber};
+ if (!NameIndex)
+ return {"", 0};
+ StringRef Filename = ExitOnErr(getFileName(CVStrTab, Checksums, *NameIndex));
+ return {Filename, *LineNumber};
}
--- /dev/null
+# RUN: yaml2obj %s -o %t.obj\r
+# RUN: not lld-link %t.obj /subsystem:console 2>&1 | FileCheck %s\r
+\r
+# CHECK: lld-link: error: undefined symbol: function\r
+# CHECK-NEXT: >>> referenced by {{.*}}line-error.yaml.tmp.obj:(caller1)\r
+# CHECK-NEXT: >>> referenced by E:\file.cpp:1935\r
+# CHECK-NEXT: >>> {{.*}}line-error.yaml.tmp.obj:(caller22)\r
+\r
+--- !COFF\r
+header: \r
+ Machine: IMAGE_FILE_MACHINE_AMD64\r
+ Characteristics: [ ]\r
+sections: \r
+ - Name: .text\r
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]\r
+ Alignment: 16\r
+ SectionData: 488B0500000000488B51284881C2D80000004889C148FF2500000000\r
+ Relocations: \r
+ - VirtualAddress: 3\r
+ SymbolName: function\r
+ Type: IMAGE_REL_AMD64_REL32\r
+ - Name: .text\r
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]\r
+ Alignment: 16\r
+ SectionData: 488B0500000000488B51084881C2D80000004889C148FF2500000000\r
+ Relocations: \r
+ - VirtualAddress: 3\r
+ SymbolName: function\r
+ Type: IMAGE_REL_AMD64_REL32\r
+ - Name: '.debug$S'\r
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]\r
+ Alignment: 4\r
+ Subsections: \r
+ - !FileChecksums\r
+ Checksums: \r
+ - FileName: 'E:\file.cpp'\r
+ Kind: MD5\r
+ Checksum: D72EDEF8B8E50C364A330F9CB3CD904B\r
+ - !StringTable\r
+ Strings: \r
+ - 'E:\file.cpp'\r
+ - Name: '.debug$S'\r
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]\r
+ Alignment: 4\r
+ Subsections: \r
+ - !Lines\r
+ CodeSize: 28\r
+ Flags: [ ]\r
+ RelocOffset: 0\r
+ RelocSegment: 0\r
+ Blocks: []\r
+ Relocations: \r
+ - VirtualAddress: 12\r
+ SymbolName: caller1\r
+ Type: IMAGE_REL_AMD64_SECREL\r
+ - Name: '.debug$S'\r
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]\r
+ Alignment: 4\r
+ Subsections: \r
+ - !Lines\r
+ CodeSize: 28\r
+ Flags: [ ]\r
+ RelocOffset: 0\r
+ RelocSegment: 0\r
+ Blocks: \r
+ - FileName: 'E:\file.cpp'\r
+ Lines: \r
+ - Offset: 11\r
+ LineStart: 1935\r
+ IsStatement: false\r
+ EndDelta: 0\r
+ Columns: []\r
+ Relocations: \r
+ - VirtualAddress: 12\r
+ SymbolName: caller22\r
+ Type: IMAGE_REL_AMD64_SECREL\r
+symbols:\r
+ - Name: .text\r
+ Value: 0\r
+ SectionNumber: 1\r
+ SimpleType: IMAGE_SYM_TYPE_NULL\r
+ ComplexType: IMAGE_SYM_DTYPE_NULL\r
+ StorageClass: IMAGE_SYM_CLASS_STATIC\r
+ SectionDefinition: \r
+ Length: 28\r
+ NumberOfRelocations: 2\r
+ NumberOfLinenumbers: 0\r
+ CheckSum: 2430089736\r
+ Number: 1\r
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES\r
+ - Name: caller1\r
+ Value: 0\r
+ SectionNumber: 1\r
+ SimpleType: IMAGE_SYM_TYPE_NULL\r
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION\r
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL \r
+ - Name: .text\r
+ Value: 0\r
+ SectionNumber: 2\r
+ SimpleType: IMAGE_SYM_TYPE_NULL\r
+ ComplexType: IMAGE_SYM_DTYPE_NULL\r
+ StorageClass: IMAGE_SYM_CLASS_STATIC\r
+ SectionDefinition: \r
+ Length: 28\r
+ NumberOfRelocations: 2\r
+ NumberOfLinenumbers: 0\r
+ CheckSum: 3449717304\r
+ Number: 2\r
+ Selection: IMAGE_COMDAT_SELECT_NODUPLICATES\r
+ - Name: caller22\r
+ Value: 0\r
+ SectionNumber: 2\r
+ SimpleType: IMAGE_SYM_TYPE_NULL\r
+ ComplexType: IMAGE_SYM_DTYPE_FUNCTION\r
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL \r
+ - Name: '.debug$S'\r
+ Value: 0\r
+ SectionNumber: 3\r
+ SimpleType: IMAGE_SYM_TYPE_NULL\r
+ ComplexType: IMAGE_SYM_DTYPE_NULL\r
+ StorageClass: IMAGE_SYM_CLASS_STATIC\r
+ SectionDefinition: \r
+ Length: 767204\r
+ NumberOfRelocations: 0\r
+ NumberOfLinenumbers: 0\r
+ CheckSum: 4280093374\r
+ Number: 3\r
+ - Name: '.debug$S'\r
+ Value: 0\r
+ SectionNumber: 4\r
+ SimpleType: IMAGE_SYM_TYPE_NULL\r
+ ComplexType: IMAGE_SYM_DTYPE_NULL\r
+ StorageClass: IMAGE_SYM_CLASS_STATIC\r
+ SectionDefinition: \r
+ Length: 296\r
+ NumberOfRelocations: 1\r
+ NumberOfLinenumbers: 0\r
+ CheckSum: 1957793731\r
+ Number: 1\r
+ Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE\r
+ - Name: '.debug$S'\r
+ Value: 0\r
+ SectionNumber: 5\r
+ SimpleType: IMAGE_SYM_TYPE_NULL\r
+ ComplexType: IMAGE_SYM_DTYPE_NULL\r
+ StorageClass: IMAGE_SYM_CLASS_STATIC\r
+ SectionDefinition: \r
+ Length: 276\r
+ NumberOfRelocations: 1\r
+ NumberOfLinenumbers: 0\r
+ CheckSum: 1957793731\r
+ Number: 2\r
+ Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE\r
+ - Name: function\r
+ Value: 0\r
+ SectionNumber: 0\r
+ SimpleType: IMAGE_SYM_TYPE_NULL\r
+ ComplexType: IMAGE_SYM_DTYPE_NULL\r
+ StorageClass: IMAGE_SYM_CLASS_EXTERNAL\r
+...\r