[llvm] r220544 - Fix PR21189 -- Emit symbol subsection required to debug LLVM-built binaries with VS2012+
Timur Iskhodzhanov
timurrrr at google.com
Thu Oct 23 23:36:17 PDT 2014
OK, so the problem was -DLLVM_TARGETS_TO_BUILD=X86 in my cmake invocation.
Never knew LLVM supports COFF debug info on ARM...
Should be fixed by r220548!
2014-10-23 23:09 GMT-07:00 Timur Iskhodzhanov <timurrrr at google.com>:
> Looks like this has broken MC/ARM/coff-debugging-secrel.ll on a bunch
> of archs – looking...
>
> 2014-10-23 18:27 GMT-07:00 Timur Iskhodzhanov <timurrrr at google.com>:
>> Author: timurrrr
>> Date: Thu Oct 23 20:27:45 2014
>> New Revision: 220544
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=220544&view=rev
>> Log:
>> Fix PR21189 -- Emit symbol subsection required to debug LLVM-built binaries with VS2012+
>>
>> Reviewed at http://reviews.llvm.org/D5772
>>
>> Modified:
>> llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
>> llvm/trunk/test/DebugInfo/COFF/asm.ll
>> llvm/trunk/test/DebugInfo/COFF/multifile.ll
>> llvm/trunk/test/DebugInfo/COFF/multifunction.ll
>> llvm/trunk/test/DebugInfo/COFF/simple.ll
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp?rev=220544&r1=220543&r2=220544&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp Thu Oct 23 20:27:45 2014
>> @@ -168,14 +168,15 @@ void WinCodeViewLineTables::endModule()
>> }
>>
>> static void EmitLabelDiff(MCStreamer &Streamer,
>> - const MCSymbol *From, const MCSymbol *To) {
>> + const MCSymbol *From, const MCSymbol *To,
>> + unsigned int Size = 4) {
>> MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None;
>> MCContext &Context = Streamer.getContext();
>> const MCExpr *FromRef = MCSymbolRefExpr::Create(From, Variant, Context),
>> *ToRef = MCSymbolRefExpr::Create(To, Variant, Context);
>> const MCExpr *AddrDelta =
>> MCBinaryExpr::Create(MCBinaryExpr::Sub, ToRef, FromRef, Context);
>> - Streamer.EmitValue(AddrDelta, 4);
>> + Streamer.EmitValue(AddrDelta, Size);
>> }
>>
>> void WinCodeViewLineTables::emitDebugInfoForFunction(const Function *GV) {
>> @@ -189,6 +190,44 @@ void WinCodeViewLineTables::emitDebugInf
>> return;
>> assert(FI.End && "Don't know where the function ends?");
>>
>> + const StringRef FuncName = getDISubprogram(GV).getDisplayName();
>> + // Emit a symbol subsection, required by VS2012+ to find function boundaries.
>> + MCSymbol *SymbolsBegin = Asm->MMI->getContext().CreateTempSymbol(),
>> + *SymbolsEnd = Asm->MMI->getContext().CreateTempSymbol();
>> + Asm->OutStreamer.AddComment("Symbol subsection for " + Twine(FuncName));
>> + Asm->EmitInt32(COFF::DEBUG_SYMBOL_SUBSECTION);
>> + EmitLabelDiff(Asm->OutStreamer, SymbolsBegin, SymbolsEnd);
>> + Asm->OutStreamer.EmitLabel(SymbolsBegin);
>> + {
>> + MCSymbol *ProcSegmentBegin = Asm->MMI->getContext().CreateTempSymbol(),
>> + *ProcSegmentEnd = Asm->MMI->getContext().CreateTempSymbol();
>> + EmitLabelDiff(Asm->OutStreamer, ProcSegmentBegin, ProcSegmentEnd, 2);
>> + Asm->OutStreamer.EmitLabel(ProcSegmentBegin);
>> +
>> + Asm->EmitInt16(COFF::DEBUG_SYMBOL_TYPE_PROC_START);
>> + // Some bytes of this segment don't seem to be required for basic debugging,
>> + // so just fill them with zeroes.
>> + Asm->OutStreamer.EmitFill(12, 0);
>> + // This is the important bit that tells the debugger where the function
>> + // code is located and what's its size:
>> + EmitLabelDiff(Asm->OutStreamer, Fn, FI.End);
>> + Asm->OutStreamer.EmitFill(12, 0);
>> + Asm->OutStreamer.EmitCOFFSecRel32(Fn);
>> + Asm->OutStreamer.EmitCOFFSectionIndex(Fn);
>> + Asm->EmitInt8(0);
>> + // Emit the function name as a null-terminated string.
>> + Asm->OutStreamer.EmitBytes(FuncName);
>> + Asm->EmitInt8(0);
>> + Asm->OutStreamer.EmitLabel(ProcSegmentEnd);
>> +
>> + // We're done with this function.
>> + Asm->EmitInt16(0x0002);
>> + Asm->EmitInt16(COFF::DEBUG_SYMBOL_TYPE_PROC_END);
>> + }
>> + Asm->OutStreamer.EmitLabel(SymbolsEnd);
>> + // Every subsection must be aligned to a 4-byte boundary.
>> + Asm->OutStreamer.EmitFill((-FuncName.size()) % 4, 0);
>> +
>> // PCs/Instructions are grouped into segments sharing the same filename.
>> // Pre-calculate the lengths (in instructions) of these segments and store
>> // them in a map for convenience. Each index in the map is the sequential
>> @@ -206,13 +245,12 @@ void WinCodeViewLineTables::emitDebugInf
>> FilenameSegmentLengths[LastSegmentEnd] = FI.Instrs.size() - LastSegmentEnd;
>>
>> // Emit a line table subsection, requred to do PC-to-file:line lookup.
>> - Asm->OutStreamer.AddComment(
>> - "Line table subsection for " + Twine(Fn->getName()));
>> + Asm->OutStreamer.AddComment("Line table subsection for " + Twine(FuncName));
>> Asm->EmitInt32(COFF::DEBUG_LINE_TABLE_SUBSECTION);
>> - MCSymbol *SubsectionBegin = Asm->MMI->getContext().CreateTempSymbol(),
>> - *SubsectionEnd = Asm->MMI->getContext().CreateTempSymbol();
>> - EmitLabelDiff(Asm->OutStreamer, SubsectionBegin, SubsectionEnd);
>> - Asm->OutStreamer.EmitLabel(SubsectionBegin);
>> + MCSymbol *LineTableBegin = Asm->MMI->getContext().CreateTempSymbol(),
>> + *LineTableEnd = Asm->MMI->getContext().CreateTempSymbol();
>> + EmitLabelDiff(Asm->OutStreamer, LineTableBegin, LineTableEnd);
>> + Asm->OutStreamer.EmitLabel(LineTableBegin);
>>
>> // Identify the function this subsection is for.
>> Asm->OutStreamer.EmitCOFFSecRel32(Fn);
>> @@ -262,7 +300,7 @@ void WinCodeViewLineTables::emitDebugInf
>>
>> if (FileSegmentEnd)
>> Asm->OutStreamer.EmitLabel(FileSegmentEnd);
>> - Asm->OutStreamer.EmitLabel(SubsectionEnd);
>> + Asm->OutStreamer.EmitLabel(LineTableEnd);
>> }
>>
>> void WinCodeViewLineTables::beginFunction(const MachineFunction *MF) {
>>
>> Modified: llvm/trunk/test/DebugInfo/COFF/asm.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/asm.ll?rev=220544&r1=220543&r2=220544&view=diff
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/COFF/asm.ll (original)
>> +++ llvm/trunk/test/DebugInfo/COFF/asm.ll Thu Oct 23 20:27:45 2014
>> @@ -23,6 +23,28 @@
>> ;
>> ; X86-LABEL: .section .debug$S,"rd"
>> ; X86-NEXT: .long 4
>> +; Symbol subsection
>> +; X86-NEXT: .long 241
>> +; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X86-NEXT: [[F1_START]]:
>> +; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X86-NEXT: [[PROC_SEGMENT_START]]:
>> +; X86-NEXT: .short 4423
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .long [[END_OF_F]]-_f
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .secrel32 _f
>> +; X86-NEXT: .secidx _f
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: .byte 102
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: [[PROC_SEGMENT_END]]:
>> +; X86-NEXT: .short 2
>> +; X86-NEXT: .short 4431
>> +; X86-NEXT: [[F1_END]]:
>> +; Padding
>> +; X86-NEXT: .zero 3
>> +; Line table
>> ; X86-NEXT: .long 242
>> ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> ; X86-NEXT: [[F2_START]]:
>> @@ -61,8 +83,20 @@
>> ; OBJ32: Characteristics [ (0x42100040)
>> ; OBJ32: ]
>> ; OBJ32: Relocations [
>> -; OBJ32-NEXT: 0xC IMAGE_REL_I386_SECREL _f
>> -; OBJ32-NEXT: 0x10 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: 0x2C IMAGE_REL_I386_SECREL _f
>> +; OBJ32-NEXT: 0x30 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: 0x44 IMAGE_REL_I386_SECREL _f
>> +; OBJ32-NEXT: 0x48 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF1
>> +; OBJ32-NOT: ]
>> +; OBJ32: ProcStart {
>> +; OBJ32-NEXT: FunctionName: f
>> +; OBJ32-NEXT: Section: _f
>> +; OBJ32-NEXT: CodeSize: 0x6
>> +; OBJ32-NEXT: }
>> +; OBJ32-NEXT: ProcEnd
>> ; OBJ32-NEXT: ]
>> ; OBJ32: FunctionLineTable [
>> ; OBJ32-NEXT: Name: _f
>> @@ -93,6 +127,28 @@
>> ;
>> ; X64-LABEL: .section .debug$S,"rd"
>> ; X64-NEXT: .long 4
>> +; Symbol subsection
>> +; X64-NEXT: .long 241
>> +; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X64-NEXT: [[F1_START]]:
>> +; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X64-NEXT: [[PROC_SEGMENT_START]]:
>> +; X64-NEXT: .short 4423
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .long [[END_OF_F]]-f
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .secrel32 f
>> +; X64-NEXT: .secidx f
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: .byte 102
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: [[PROC_SEGMENT_END]]:
>> +; X64-NEXT: .short 2
>> +; X64-NEXT: .short 4431
>> +; X64-NEXT: [[F1_END]]:
>> +; Padding
>> +; X64-NEXT: .zero 3
>> +; Line table
>> ; X64-NEXT: .long 242
>> ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> ; X64-NEXT: [[F2_START]]:
>> @@ -133,8 +189,20 @@
>> ; OBJ64: Characteristics [ (0x42100040)
>> ; OBJ64: ]
>> ; OBJ64: Relocations [
>> -; OBJ64-NEXT: 0xC IMAGE_REL_AMD64_SECREL f
>> -; OBJ64-NEXT: 0x10 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: 0x2C IMAGE_REL_AMD64_SECREL f
>> +; OBJ64-NEXT: 0x30 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: 0x44 IMAGE_REL_AMD64_SECREL f
>> +; OBJ64-NEXT: 0x48 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF1
>> +; OBJ64-NOT: ]
>> +; OBJ64: ProcStart {
>> +; OBJ64-NEXT: FunctionName: f
>> +; OBJ64-NEXT: Section: f
>> +; OBJ64-NEXT: CodeSize: 0xE
>> +; OBJ64-NEXT: }
>> +; OBJ64-NEXT: ProcEnd
>> ; OBJ64-NEXT: ]
>> ; OBJ64: FunctionLineTable [
>> ; OBJ64-NEXT: Name: f
>>
>> Modified: llvm/trunk/test/DebugInfo/COFF/multifile.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/multifile.ll?rev=220544&r1=220543&r2=220544&view=diff
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/COFF/multifile.ll (original)
>> +++ llvm/trunk/test/DebugInfo/COFF/multifile.ll Thu Oct 23 20:27:45 2014
>> @@ -30,6 +30,28 @@
>> ;
>> ; X86-LABEL: .section .debug$S,"rd"
>> ; X86-NEXT: .long 4
>> +; Symbol subsection
>> +; X86-NEXT: .long 241
>> +; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X86-NEXT: [[F1_START]]:
>> +; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X86-NEXT: [[PROC_SEGMENT_START]]:
>> +; X86-NEXT: .short 4423
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .long [[END_OF_F]]-_f
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .secrel32 _f
>> +; X86-NEXT: .secidx _f
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: .byte 102
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: [[PROC_SEGMENT_END]]:
>> +; X86-NEXT: .short 2
>> +; X86-NEXT: .short 4431
>> +; X86-NEXT: [[F1_END]]:
>> +; Padding
>> +; X86-NEXT: .zero 3
>> +; Line table
>> ; X86-NEXT: .long 242
>> ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> ; X86-NEXT: [[F2_START]]:
>> @@ -86,8 +108,20 @@
>> ; OBJ32: Characteristics [ (0x42100040)
>> ; OBJ32: ]
>> ; OBJ32: Relocations [
>> -; OBJ32-NEXT: 0xC IMAGE_REL_I386_SECREL _f
>> -; OBJ32-NEXT: 0x10 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: 0x2C IMAGE_REL_I386_SECREL _f
>> +; OBJ32-NEXT: 0x30 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: 0x44 IMAGE_REL_I386_SECREL _f
>> +; OBJ32-NEXT: 0x48 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF1
>> +; OBJ32-NOT: ]
>> +; OBJ32: ProcStart {
>> +; OBJ32-NEXT: FunctionName: f
>> +; OBJ32-NEXT: Section: _f
>> +; OBJ32-NEXT: CodeSize: 0x10
>> +; OBJ32-NEXT: }
>> +; OBJ32-NEXT: ProcEnd
>> ; OBJ32-NEXT: ]
>> ; OBJ32: FunctionLineTable [
>> ; OBJ32-NEXT: Name: _f
>> @@ -125,6 +159,28 @@
>> ;
>> ; X64-LABEL: .section .debug$S,"rd"
>> ; X64-NEXT: .long 4
>> +; Symbol subsection
>> +; X64-NEXT: .long 241
>> +; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X64-NEXT: [[F1_START]]:
>> +; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X64-NEXT: [[PROC_SEGMENT_START]]:
>> +; X64-NEXT: .short 4423
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .long [[END_OF_F]]-f
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .secrel32 f
>> +; X64-NEXT: .secidx f
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: .byte 102
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: [[PROC_SEGMENT_END]]:
>> +; X64-NEXT: .short 2
>> +; X64-NEXT: .short 4431
>> +; X64-NEXT: [[F1_END]]:
>> +; Padding
>> +; X64-NEXT: .zero 3
>> +; Line table
>> ; X64-NEXT: .long 242
>> ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> ; X64-NEXT: [[F2_START]]:
>> @@ -193,8 +249,20 @@
>> ; OBJ64: Characteristics [ (0x42100040)
>> ; OBJ64: ]
>> ; OBJ64: Relocations [
>> -; OBJ64-NEXT: 0xC IMAGE_REL_AMD64_SECREL f
>> -; OBJ64-NEXT: 0x10 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: 0x2C IMAGE_REL_AMD64_SECREL f
>> +; OBJ64-NEXT: 0x30 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: 0x44 IMAGE_REL_AMD64_SECREL f
>> +; OBJ64-NEXT: 0x48 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF1
>> +; OBJ64-NOT: ]
>> +; OBJ64: ProcStart {
>> +; OBJ64-NEXT: FunctionName: f
>> +; OBJ64-NEXT: Section: f
>> +; OBJ64-NEXT: CodeSize: 0x18
>> +; OBJ64-NEXT: }
>> +; OBJ64-NEXT: ProcEnd
>> ; OBJ64-NEXT: ]
>> ; OBJ64: FunctionLineTable [
>> ; OBJ64-NEXT: Name: f
>>
>> Modified: llvm/trunk/test/DebugInfo/COFF/multifunction.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/multifunction.ll?rev=220544&r1=220543&r2=220544&view=diff
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/COFF/multifunction.ll (original)
>> +++ llvm/trunk/test/DebugInfo/COFF/multifunction.ll Thu Oct 23 20:27:45 2014
>> @@ -52,6 +52,27 @@
>> ;
>> ; X86-LABEL: .section .debug$S,"rd"
>> ; X86-NEXT: .long 4
>> +; Symbol subsection for x
>> +; X86-NEXT: .long 241
>> +; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X86-NEXT: [[F1_START]]:
>> +; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X86-NEXT: [[PROC_SEGMENT_START]]:
>> +; X86-NEXT: .short 4423
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .long [[END_OF_X]]-_x
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .secrel32 _x
>> +; X86-NEXT: .secidx _x
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: .byte 120
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: [[PROC_SEGMENT_END]]:
>> +; X86-NEXT: .short 2
>> +; X86-NEXT: .short 4431
>> +; X86-NEXT: [[F1_END]]:
>> +; Padding
>> +; X86-NEXT: .zero 3
>> ; Line table subsection for x
>> ; X86-NEXT: .long 242
>> ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> @@ -70,6 +91,27 @@
>> ; X86-NEXT: .long 5
>> ; X86-NEXT: [[FILE_SEGMENT_END]]:
>> ; X86-NEXT: [[F2_END]]:
>> +; Symbol subsection for y
>> +; X86-NEXT: .long 241
>> +; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X86-NEXT: [[F1_START]]:
>> +; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X86-NEXT: [[PROC_SEGMENT_START]]:
>> +; X86-NEXT: .short 4423
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .long [[END_OF_Y]]-_y
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .secrel32 _y
>> +; X86-NEXT: .secidx _y
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: .byte 121
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: [[PROC_SEGMENT_END]]:
>> +; X86-NEXT: .short 2
>> +; X86-NEXT: .short 4431
>> +; X86-NEXT: [[F1_END]]:
>> +; Padding
>> +; X86-NEXT: .zero 3
>> ; Line table subsection for y
>> ; X86-NEXT: .long 242
>> ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> @@ -88,6 +130,27 @@
>> ; X86-NEXT: .long 9
>> ; X86-NEXT: [[FILE_SEGMENT_END]]:
>> ; X86-NEXT: [[F2_END]]:
>> +; Symbol subsection for f
>> +; X86-NEXT: .long 241
>> +; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X86-NEXT: [[F1_START]]:
>> +; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X86-NEXT: [[PROC_SEGMENT_START]]:
>> +; X86-NEXT: .short 4423
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .long [[END_OF_F]]-_f
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .secrel32 _f
>> +; X86-NEXT: .secidx _f
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: .byte 102
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: [[PROC_SEGMENT_END]]:
>> +; X86-NEXT: .short 2
>> +; X86-NEXT: .short 4431
>> +; X86-NEXT: [[F1_END]]:
>> +; Padding
>> +; X86-NEXT: .zero 3
>> ; Line table subsection for f
>> ; X86-NEXT: .long 242
>> ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> @@ -128,13 +191,58 @@
>> ; OBJ32: Characteristics [ (0x42100040)
>> ; OBJ32: ]
>> ; OBJ32: Relocations [
>> -; OBJ32-NEXT: 0xC IMAGE_REL_I386_SECREL _x
>> -; OBJ32-NEXT: 0x10 IMAGE_REL_I386_SECTION _x
>> -; OBJ32-NEXT: 0x3C IMAGE_REL_I386_SECREL _y
>> -; OBJ32-NEXT: 0x40 IMAGE_REL_I386_SECTION _y
>> -; OBJ32-NEXT: 0x6C IMAGE_REL_I386_SECREL _f
>> -; OBJ32-NEXT: 0x70 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: 0x2C IMAGE_REL_I386_SECREL _x
>> +; OBJ32-NEXT: 0x30 IMAGE_REL_I386_SECTION _x
>> +; OBJ32-NEXT: 0x44 IMAGE_REL_I386_SECREL _x
>> +; OBJ32-NEXT: 0x48 IMAGE_REL_I386_SECTION _x
>> +; OBJ32-NEXT: 0x94 IMAGE_REL_I386_SECREL _y
>> +; OBJ32-NEXT: 0x98 IMAGE_REL_I386_SECTION _y
>> +; OBJ32-NEXT: 0xAC IMAGE_REL_I386_SECREL _y
>> +; OBJ32-NEXT: 0xB0 IMAGE_REL_I386_SECTION _y
>> +; OBJ32-NEXT: 0xFC IMAGE_REL_I386_SECREL _f
>> +; OBJ32-NEXT: 0x100 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: 0x114 IMAGE_REL_I386_SECREL _f
>> +; OBJ32-NEXT: 0x118 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF1
>> +; OBJ32-NOT: ]
>> +; OBJ32: ProcStart {
>> +; OBJ32-NEXT: FunctionName: x
>> +; OBJ32-NEXT: Section: _x
>> +; OBJ32-NEXT: CodeSize: 0x6
>> +; OBJ32-NEXT: }
>> +; OBJ32-NEXT: ProcEnd
>> ; OBJ32-NEXT: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF2
>> +; OBJ32: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF1
>> +; OBJ32-NOT: ]
>> +; OBJ32: ProcStart {
>> +; OBJ32-NEXT: FunctionName: y
>> +; OBJ32-NEXT: Section: _y
>> +; OBJ32-NEXT: CodeSize: 0x6
>> +; OBJ32-NEXT: }
>> +; OBJ32-NEXT: ProcEnd
>> +; OBJ32-NEXT: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF2
>> +; OBJ32: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF1
>> +; OBJ32-NOT: ]
>> +; OBJ32: ProcStart {
>> +; OBJ32-NEXT: FunctionName: f
>> +; OBJ32-NEXT: Section: _f
>> +; OBJ32-NEXT: CodeSize: 0x10
>> +; OBJ32-NEXT: }
>> +; OBJ32-NEXT: ProcEnd
>> +; OBJ32-NEXT: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF2
>> +; OBJ32: ]
>> ; OBJ32: FunctionLineTable [
>> ; OBJ32-NEXT: Name: _x
>> ; OBJ32-NEXT: CodeSize: 0x6
>> @@ -205,6 +313,27 @@
>> ;
>> ; X64-LABEL: .section .debug$S,"rd"
>> ; X64-NEXT: .long 4
>> +; Symbol subsection for x
>> +; X64-NEXT: .long 241
>> +; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X64-NEXT: [[F1_START]]:
>> +; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X64-NEXT: [[PROC_SEGMENT_START]]:
>> +; X64-NEXT: .short 4423
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .long [[END_OF_X]]-x
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .secrel32 x
>> +; X64-NEXT: .secidx x
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: .byte 120
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: [[PROC_SEGMENT_END]]:
>> +; X64-NEXT: .short 2
>> +; X64-NEXT: .short 4431
>> +; X64-NEXT: [[F1_END]]:
>> +; Padding
>> +; X64-NEXT: .zero 3
>> ; Line table subsection for x
>> ; X64-NEXT: .long 242
>> ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> @@ -225,6 +354,27 @@
>> ; X64-NEXT: .long 5
>> ; X64-NEXT: [[FILE_SEGMENT_END]]:
>> ; X64-NEXT: [[F2_END]]:
>> +; Symbol subsection for y
>> +; X64-NEXT: .long 241
>> +; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X64-NEXT: [[F1_START]]:
>> +; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X64-NEXT: [[PROC_SEGMENT_START]]:
>> +; X64-NEXT: .short 4423
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .long [[END_OF_Y]]-y
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .secrel32 y
>> +; X64-NEXT: .secidx y
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: .byte 121
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: [[PROC_SEGMENT_END]]:
>> +; X64-NEXT: .short 2
>> +; X64-NEXT: .short 4431
>> +; X64-NEXT: [[F1_END]]:
>> +; Padding
>> +; X64-NEXT: .zero 3
>> ; Line table subsection for y
>> ; X64-NEXT: .long 242
>> ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> @@ -245,6 +395,27 @@
>> ; X64-NEXT: .long 9
>> ; X64-NEXT: [[FILE_SEGMENT_END]]:
>> ; X64-NEXT: [[F2_END]]:
>> +; Symbol subsection for f
>> +; X64-NEXT: .long 241
>> +; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X64-NEXT: [[F1_START]]:
>> +; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X64-NEXT: [[PROC_SEGMENT_START]]:
>> +; X64-NEXT: .short 4423
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .long [[END_OF_F]]-f
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .secrel32 f
>> +; X64-NEXT: .secidx f
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: .byte 102
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: [[PROC_SEGMENT_END]]:
>> +; X64-NEXT: .short 2
>> +; X64-NEXT: .short 4431
>> +; X64-NEXT: [[F1_END]]:
>> +; Padding
>> +; X64-NEXT: .zero 3
>> ; Line table subsection for f
>> ; X64-NEXT: .long 242
>> ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> @@ -287,13 +458,58 @@
>> ; OBJ64: Characteristics [ (0x42100040)
>> ; OBJ64: ]
>> ; OBJ64: Relocations [
>> -; OBJ64-NEXT: 0xC IMAGE_REL_AMD64_SECREL x
>> -; OBJ64-NEXT: 0x10 IMAGE_REL_AMD64_SECTION x
>> -; OBJ64-NEXT: 0x44 IMAGE_REL_AMD64_SECREL y
>> -; OBJ64-NEXT: 0x48 IMAGE_REL_AMD64_SECTION y
>> -; OBJ64-NEXT: 0x7C IMAGE_REL_AMD64_SECREL f
>> -; OBJ64-NEXT: 0x80 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: 0x2C IMAGE_REL_AMD64_SECREL x
>> +; OBJ64-NEXT: 0x30 IMAGE_REL_AMD64_SECTION x
>> +; OBJ64-NEXT: 0x44 IMAGE_REL_AMD64_SECREL x
>> +; OBJ64-NEXT: 0x48 IMAGE_REL_AMD64_SECTION x
>> +; OBJ64-NEXT: 0x9C IMAGE_REL_AMD64_SECREL y
>> +; OBJ64-NEXT: 0xA0 IMAGE_REL_AMD64_SECTION y
>> +; OBJ64-NEXT: 0xB4 IMAGE_REL_AMD64_SECREL y
>> +; OBJ64-NEXT: 0xB8 IMAGE_REL_AMD64_SECTION y
>> +; OBJ64-NEXT: 0x10C IMAGE_REL_AMD64_SECREL f
>> +; OBJ64-NEXT: 0x110 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: 0x124 IMAGE_REL_AMD64_SECREL f
>> +; OBJ64-NEXT: 0x128 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF1
>> +; OBJ64-NOT: ]
>> +; OBJ64: ProcStart {
>> +; OBJ64-NEXT: FunctionName: x
>> +; OBJ64-NEXT: Section: x
>> +; OBJ64-NEXT: CodeSize: 0xE
>> +; OBJ64-NEXT: }
>> +; OBJ64-NEXT: ProcEnd
>> ; OBJ64-NEXT: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF2
>> +; OBJ64: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF1
>> +; OBJ64-NOT: ]
>> +; OBJ64: ProcStart {
>> +; OBJ64-NEXT: FunctionName: y
>> +; OBJ64-NEXT: Section: y
>> +; OBJ64-NEXT: CodeSize: 0xE
>> +; OBJ64-NEXT: }
>> +; OBJ64-NEXT: ProcEnd
>> +; OBJ64-NEXT: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF2
>> +; OBJ64: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF1
>> +; OBJ64-NOT: ]
>> +; OBJ64: ProcStart {
>> +; OBJ64-NEXT: FunctionName: f
>> +; OBJ64-NEXT: Section: f
>> +; OBJ64-NEXT: CodeSize: 0x18
>> +; OBJ64-NEXT: }
>> +; OBJ64-NEXT: ProcEnd
>> +; OBJ64-NEXT: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF2
>> +; OBJ64: ]
>> ; OBJ64: FunctionLineTable [
>> ; OBJ64-NEXT: Name: x
>> ; OBJ64-NEXT: CodeSize: 0xE
>>
>> Modified: llvm/trunk/test/DebugInfo/COFF/simple.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/simple.ll?rev=220544&r1=220543&r2=220544&view=diff
>> ==============================================================================
>> --- llvm/trunk/test/DebugInfo/COFF/simple.ll (original)
>> +++ llvm/trunk/test/DebugInfo/COFF/simple.ll Thu Oct 23 20:27:45 2014
>> @@ -21,12 +21,34 @@
>> ;
>> ; X86-LABEL: .section .debug$S,"rd"
>> ; X86-NEXT: .long 4
>> +; Symbol subsection
>> +; X86-NEXT: .long 241
>> +; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X86-NEXT: [[F1_START]]:
>> +; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X86-NEXT: [[PROC_SEGMENT_START]]:
>> +; X86-NEXT: .short 4423
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .long [[END_OF_F]]-_f
>> +; X86-NEXT: .zero 12
>> +; X86-NEXT: .secrel32 _f
>> +; X86-NEXT: .secidx _f
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: .byte 102
>> +; X86-NEXT: .byte 0
>> +; X86-NEXT: [[PROC_SEGMENT_END]]:
>> +; X86-NEXT: .short 2
>> +; X86-NEXT: .short 4431
>> +; X86-NEXT: [[F1_END]]:
>> +; Padding
>> +; X86-NEXT: .zero 3
>> +; Line table
>> ; X86-NEXT: .long 242
>> ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> ; X86-NEXT: [[F2_START]]:
>> ; X86-NEXT: .secrel32 _f
>> ; X86-NEXT: .secidx _f
>> -; X86-NEXT: .short 0
>> +; X86-NEXT: .short 0
>> ; X86-NEXT: .long [[END_OF_F]]-_f
>> ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
>> ; X86-NEXT: .long 0
>> @@ -57,8 +79,20 @@
>> ; OBJ32: Characteristics [ (0x42100040)
>> ; OBJ32: ]
>> ; OBJ32: Relocations [
>> -; OBJ32-NEXT: 0xC IMAGE_REL_I386_SECREL _f
>> -; OBJ32-NEXT: 0x10 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: 0x2C IMAGE_REL_I386_SECREL _f
>> +; OBJ32-NEXT: 0x30 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: 0x44 IMAGE_REL_I386_SECREL _f
>> +; OBJ32-NEXT: 0x48 IMAGE_REL_I386_SECTION _f
>> +; OBJ32-NEXT: ]
>> +; OBJ32: Subsection [
>> +; OBJ32-NEXT: Type: 0xF1
>> +; OBJ32-NOT: ]
>> +; OBJ32: ProcStart {
>> +; OBJ32-NEXT: FunctionName: f
>> +; OBJ32-NEXT: Section: _f
>> +; OBJ32-NEXT: CodeSize: 0x6
>> +; OBJ32-NEXT: }
>> +; OBJ32-NEXT: ProcEnd
>> ; OBJ32-NEXT: ]
>> ; OBJ32: FunctionLineTable [
>> ; OBJ32-NEXT: Name: _f
>> @@ -84,12 +118,34 @@
>> ;
>> ; X64-LABEL: .section .debug$S,"rd"
>> ; X64-NEXT: .long 4
>> +; Symbol subsection
>> +; X64-NEXT: .long 241
>> +; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
>> +; X64-NEXT: [[F1_START]]:
>> +; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
>> +; X64-NEXT: [[PROC_SEGMENT_START]]:
>> +; X64-NEXT: .short 4423
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .long [[END_OF_F]]-f
>> +; X64-NEXT: .zero 12
>> +; X64-NEXT: .secrel32 f
>> +; X64-NEXT: .secidx f
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: .byte 102
>> +; X64-NEXT: .byte 0
>> +; X64-NEXT: [[PROC_SEGMENT_END]]:
>> +; X64-NEXT: .short 2
>> +; X64-NEXT: .short 4431
>> +; X64-NEXT: [[F1_END]]:
>> +; Padding
>> +; X64-NEXT: .zero 3
>> +; Line table
>> ; X64-NEXT: .long 242
>> ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
>> ; X64-NEXT: [[F2_START]]:
>> ; X64-NEXT: .secrel32 f
>> ; X64-NEXT: .secidx f
>> -; X64-NEXT: .short 0
>> +; X64-NEXT: .short 0
>> ; X64-NEXT: .long [[END_OF_F]]-f
>> ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
>> ; X64-NEXT: .long 0
>> @@ -122,8 +178,20 @@
>> ; OBJ64: Characteristics [ (0x42100040)
>> ; OBJ64: ]
>> ; OBJ64: Relocations [
>> -; OBJ64-NEXT: 0xC IMAGE_REL_AMD64_SECREL f
>> -; OBJ64-NEXT: 0x10 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: 0x2C IMAGE_REL_AMD64_SECREL f
>> +; OBJ64-NEXT: 0x30 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: 0x44 IMAGE_REL_AMD64_SECREL f
>> +; OBJ64-NEXT: 0x48 IMAGE_REL_AMD64_SECTION f
>> +; OBJ64-NEXT: ]
>> +; OBJ64: Subsection [
>> +; OBJ64-NEXT: Type: 0xF1
>> +; OBJ64-NOT: ]
>> +; OBJ64: ProcStart {
>> +; OBJ64-NEXT: FunctionName: f
>> +; OBJ64-NEXT: Section: f
>> +; OBJ64-NEXT: CodeSize: 0xE
>> +; OBJ64-NEXT: }
>> +; OBJ64-NEXT: ProcEnd
>> ; OBJ64-NEXT: ]
>> ; OBJ64: FunctionLineTable [
>> ; OBJ64-NEXT: Name: f
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list