forked from OSchip/llvm-project
[LLD][COFF] Fix file/line retrieval when a undefined symbol is to be printed
Differential Revision: https://reviews.llvm.org/D55951 llvm-svn: 350438
This commit is contained in:
parent
c35b4a37ba
commit
79d4851678
|
@ -1735,20 +1735,26 @@ std::pair<StringRef, uint32_t> coff::getFileLine(const SectionChunk *C,
|
|||
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) {
|
||||
if (LN.Offset > OffsetInLinetable) {
|
||||
StringRef Filename =
|
||||
ExitOnErr(getFileName(CVStrTab, Checksums, NameIndex));
|
||||
return {Filename, LineNumber};
|
||||
}
|
||||
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};
|
||||
}
|
||||
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};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,160 @@
|
|||
# RUN: yaml2obj %s -o %t.obj
|
||||
# RUN: not lld-link %t.obj /subsystem:console 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: lld-link: error: undefined symbol: function
|
||||
# CHECK-NEXT: >>> referenced by {{.*}}line-error.yaml.tmp.obj:(caller1)
|
||||
# CHECK-NEXT: >>> referenced by E:\file.cpp:1935
|
||||
# CHECK-NEXT: >>> {{.*}}line-error.yaml.tmp.obj:(caller22)
|
||||
|
||||
--- !COFF
|
||||
header:
|
||||
Machine: IMAGE_FILE_MACHINE_AMD64
|
||||
Characteristics: [ ]
|
||||
sections:
|
||||
- Name: .text
|
||||
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
|
||||
Alignment: 16
|
||||
SectionData: 488B0500000000488B51284881C2D80000004889C148FF2500000000
|
||||
Relocations:
|
||||
- VirtualAddress: 3
|
||||
SymbolName: function
|
||||
Type: IMAGE_REL_AMD64_REL32
|
||||
- Name: .text
|
||||
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
|
||||
Alignment: 16
|
||||
SectionData: 488B0500000000488B51084881C2D80000004889C148FF2500000000
|
||||
Relocations:
|
||||
- VirtualAddress: 3
|
||||
SymbolName: function
|
||||
Type: IMAGE_REL_AMD64_REL32
|
||||
- Name: '.debug$S'
|
||||
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
|
||||
Alignment: 4
|
||||
Subsections:
|
||||
- !FileChecksums
|
||||
Checksums:
|
||||
- FileName: 'E:\file.cpp'
|
||||
Kind: MD5
|
||||
Checksum: D72EDEF8B8E50C364A330F9CB3CD904B
|
||||
- !StringTable
|
||||
Strings:
|
||||
- 'E:\file.cpp'
|
||||
- Name: '.debug$S'
|
||||
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
|
||||
Alignment: 4
|
||||
Subsections:
|
||||
- !Lines
|
||||
CodeSize: 28
|
||||
Flags: [ ]
|
||||
RelocOffset: 0
|
||||
RelocSegment: 0
|
||||
Blocks: []
|
||||
Relocations:
|
||||
- VirtualAddress: 12
|
||||
SymbolName: caller1
|
||||
Type: IMAGE_REL_AMD64_SECREL
|
||||
- Name: '.debug$S'
|
||||
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
|
||||
Alignment: 4
|
||||
Subsections:
|
||||
- !Lines
|
||||
CodeSize: 28
|
||||
Flags: [ ]
|
||||
RelocOffset: 0
|
||||
RelocSegment: 0
|
||||
Blocks:
|
||||
- FileName: 'E:\file.cpp'
|
||||
Lines:
|
||||
- Offset: 11
|
||||
LineStart: 1935
|
||||
IsStatement: false
|
||||
EndDelta: 0
|
||||
Columns: []
|
||||
Relocations:
|
||||
- VirtualAddress: 12
|
||||
SymbolName: caller22
|
||||
Type: IMAGE_REL_AMD64_SECREL
|
||||
symbols:
|
||||
- Name: .text
|
||||
Value: 0
|
||||
SectionNumber: 1
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_STATIC
|
||||
SectionDefinition:
|
||||
Length: 28
|
||||
NumberOfRelocations: 2
|
||||
NumberOfLinenumbers: 0
|
||||
CheckSum: 2430089736
|
||||
Number: 1
|
||||
Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
|
||||
- Name: caller1
|
||||
Value: 0
|
||||
SectionNumber: 1
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
|
||||
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
||||
- Name: .text
|
||||
Value: 0
|
||||
SectionNumber: 2
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_STATIC
|
||||
SectionDefinition:
|
||||
Length: 28
|
||||
NumberOfRelocations: 2
|
||||
NumberOfLinenumbers: 0
|
||||
CheckSum: 3449717304
|
||||
Number: 2
|
||||
Selection: IMAGE_COMDAT_SELECT_NODUPLICATES
|
||||
- Name: caller22
|
||||
Value: 0
|
||||
SectionNumber: 2
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
|
||||
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
||||
- Name: '.debug$S'
|
||||
Value: 0
|
||||
SectionNumber: 3
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_STATIC
|
||||
SectionDefinition:
|
||||
Length: 767204
|
||||
NumberOfRelocations: 0
|
||||
NumberOfLinenumbers: 0
|
||||
CheckSum: 4280093374
|
||||
Number: 3
|
||||
- Name: '.debug$S'
|
||||
Value: 0
|
||||
SectionNumber: 4
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_STATIC
|
||||
SectionDefinition:
|
||||
Length: 296
|
||||
NumberOfRelocations: 1
|
||||
NumberOfLinenumbers: 0
|
||||
CheckSum: 1957793731
|
||||
Number: 1
|
||||
Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE
|
||||
- Name: '.debug$S'
|
||||
Value: 0
|
||||
SectionNumber: 5
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_STATIC
|
||||
SectionDefinition:
|
||||
Length: 276
|
||||
NumberOfRelocations: 1
|
||||
NumberOfLinenumbers: 0
|
||||
CheckSum: 1957793731
|
||||
Number: 2
|
||||
Selection: IMAGE_COMDAT_SELECT_ASSOCIATIVE
|
||||
- Name: function
|
||||
Value: 0
|
||||
SectionNumber: 0
|
||||
SimpleType: IMAGE_SYM_TYPE_NULL
|
||||
ComplexType: IMAGE_SYM_DTYPE_NULL
|
||||
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
|
||||
...
|
Loading…
Reference in New Issue