[llvm] r241764 - [CodeView] Add support for emitting column information
David Majnemer
david.majnemer at gmail.com
Thu Jul 9 11:14:54 PDT 2015
On Wed, Jul 8, 2015 at 9:31 PM, Justin Bogner <mail at justinbogner.com> wrote:
> David Majnemer <david.majnemer at gmail.com> writes:
> > Author: majnemer
> > Date: Wed Jul 8 19:19:51 2015
> > New Revision: 241764
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=241764&view=rev
> > Log:
> > [CodeView] Add support for emitting column information
> >
> > Column information is present in CodeView when the line table subsection
> > has bit 0 set to 1 in it's flags field. The column information is
> > represented as a pair of 16-bit quantities: a starting and ending
> > column. This information is present at the end of the chunk, after all
> > the line-PC pairs.
> >
> > Modified:
> > llvm/trunk/include/llvm/Support/COFF.h
> > llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
> > llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.h
> > 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
> > llvm/trunk/test/tools/llvm-readobj/codeview-linetables.test
> > llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
> >
> > Modified: llvm/trunk/include/llvm/Support/COFF.h
> > URL:
> >
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/COFF.h?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/Support/COFF.h (original)
> > +++ llvm/trunk/include/llvm/Support/COFF.h Wed Jul 8 19:19:51 2015
> > @@ -655,6 +655,7 @@ namespace COFF {
> > };
> >
> > enum CodeViewIdentifiers {
> > + DEBUG_LINE_TABLES_HAVE_COLUMN_RECORDS = 0x1,
> > DEBUG_SECTION_MAGIC = 0x4,
> > DEBUG_SYMBOL_SUBSECTION = 0xF1,
> > DEBUG_LINE_TABLE_SUBSECTION = 0xF2,
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
> (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp Wed Jul
> 8 19:19:51 2015
> > @@ -97,7 +97,7 @@ void WinCodeViewLineTables::maybeRecordL
> > MCSymbol *MCL = Asm->MMI->getContext().createTempSymbol();
> > Asm->OutStreamer->EmitLabel(MCL);
> > CurFn->Instrs.push_back(MCL);
> > - InstrInfo[MCL] = InstrInfoTy(Filename, DL.getLine());
> > + InstrInfo[MCL] = InstrInfoTy(Filename, DL.getLine(), DL.getCol());
> > }
> >
> > WinCodeViewLineTables::WinCodeViewLineTables(AsmPrinter *AP)
> > @@ -264,22 +264,38 @@ void WinCodeViewLineTables::emitDebugInf
> > // Identify the function this subsection is for.
> > Asm->OutStreamer->EmitCOFFSecRel32(Fn);
> > Asm->OutStreamer->EmitCOFFSectionIndex(Fn);
> > - // Insert padding after a 16-bit section index.
> > - Asm->EmitInt16(0);
> > + // Insert flags after a 16-bit section index.
> > + Asm->EmitInt16(COFF::DEBUG_LINE_TABLES_HAVE_COLUMN_RECORDS);
> >
> > // Length of the function's code, in bytes.
> > EmitLabelDiff(*Asm->OutStreamer, Fn, FI.End);
> >
> > // PC-to-linenumber lookup table:
> > MCSymbol *FileSegmentEnd = nullptr;
> > +
> > + // The start of the last segment:
> > + size_t LastSegmentStart = 0;
> > +
> > + auto FinishPreviousChunk = [&] {
> > + if (!FileSegmentEnd)
> > + return;
> > + for (size_t ColSegI = LastSegmentStart,
> > + ColSegEnd = ColSegI +
> FilenameSegmentLengths[LastSegmentStart];
> > + ColSegI != ColSegEnd; ++ColSegI) {
> > + unsigned ColumnNumber =
> InstrInfo[FI.Instrs[ColSegI]].ColumnNumber;
> > + Asm->EmitInt16(ColumnNumber); // Start column
> > + Asm->EmitInt16(ColumnNumber); // End column
> > + }
> > + Asm->OutStreamer->EmitLabel(FileSegmentEnd);
> > + };
> > +
> > for (size_t J = 0, F = FI.Instrs.size(); J != F; ++J) {
> > MCSymbol *Instr = FI.Instrs[J];
> > assert(InstrInfo.count(Instr));
> >
> > if (FilenameSegmentLengths.count(J)) {
> > // We came to a beginning of a new filename segment.
> > - if (FileSegmentEnd)
> > - Asm->OutStreamer->EmitLabel(FileSegmentEnd);
> > + FinishPreviousChunk();
> > StringRef CurFilename = InstrInfo[FI.Instrs[J]].Filename;
> > assert(FileNameRegistry.Infos.count(CurFilename));
> > size_t IndexInStringTable =
> > @@ -300,6 +316,7 @@ void WinCodeViewLineTables::emitDebugInf
> > // records.
> > FileSegmentEnd = Asm->MMI->getContext().createTempSymbol();
> > EmitLabelDiff(*Asm->OutStreamer, FileSegmentBegin,
> FileSegmentEnd);
> > + LastSegmentStart = J;
> > }
> >
> > // The first PC with the given linenumber and the linenumber itself.
> > @@ -307,8 +324,7 @@ void WinCodeViewLineTables::emitDebugInf
> > Asm->EmitInt32(InstrInfo[Instr].LineNumber);
> > }
> >
> > - if (FileSegmentEnd)
> > - Asm->OutStreamer->EmitLabel(FileSegmentEnd);
> > + FinishPreviousChunk();
> > Asm->OutStreamer->EmitLabel(LineTableEnd);
> > }
> >
> >
> > Modified: llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.h?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.h (original)
> > +++ llvm/trunk/lib/CodeGen/AsmPrinter/WinCodeViewLineTables.h Wed Jul 8
> 19:19:51 2015
> > @@ -52,11 +52,13 @@ class LLVM_LIBRARY_VISIBILITY WinCodeVie
> > struct InstrInfoTy {
> > StringRef Filename;
> > unsigned LineNumber;
> > + unsigned ColumnNumber;
> >
> > - InstrInfoTy() : LineNumber(0) {}
> > + InstrInfoTy() : LineNumber(0), ColumnNumber(0) {}
> >
> > - InstrInfoTy(StringRef Filename, unsigned LineNumber)
> > - : Filename(Filename), LineNumber(LineNumber) {}
> > + InstrInfoTy(StringRef Filename, unsigned LineNumber, unsigned
> ColumnNumber)
> > + : Filename(Filename), LineNumber(LineNumber),
> > + ColumnNumber(ColumnNumber) {}
> > };
> > DenseMap<MCSymbol *, InstrInfoTy> InstrInfo;
> >
> >
> > Modified: llvm/trunk/test/DebugInfo/COFF/asm.ll
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/asm.ll?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/DebugInfo/COFF/asm.ll (original)
> > +++ llvm/trunk/test/DebugInfo/COFF/asm.ll Wed Jul 8 19:19:51 2015
> > @@ -51,7 +51,7 @@
> > ; X86-NEXT: [[F2_START]]:
> > ; X86-NEXT: .secrel32 _f
> > ; X86-NEXT: .secidx _f
> > -; X86-NEXT: .short 0
> > +; X86-NEXT: .short 1
> > ; X86-NEXT: .long [[END_OF_F]]-_f
> > ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X86-NEXT: .long 0
> > @@ -63,6 +63,12 @@
> > ; X86-NEXT: .long 5
> > ; X86-NEXT: .long [[RETURN_STMT]]-_f
> > ; X86-NEXT: .long 6
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > ; X86-NEXT: [[FILE_SEGMENT_END]]:
> > ; X86-NEXT: [[F2_END]]:
> > ; File index to string table offset subsection
> > @@ -101,6 +107,7 @@
> > ; OBJ32-NEXT: ]
> > ; OBJ32: FunctionLineTable [
> > ; OBJ32-NEXT: Name: _f
> > +; OBJ32-NEXT: Flags: 0x1
> > ; OBJ32-NEXT: CodeSize: 0x6
> > ; OBJ32-NEXT: FilenameSegment [
> > ; OBJ32-NEXT: Filename: D:\asm.c
> > @@ -110,6 +117,12 @@
> > ; OBJ32-NEXT: +0x0: 4
> > ; OBJ32-NEXT: +0x0: 5
> > ; OBJ32-NEXT: +0x5: 6
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: ]
> > ; OBJ32: }
> > @@ -157,7 +170,7 @@
> > ; X64-NEXT: [[F2_START]]:
> > ; X64-NEXT: .secrel32 f
> > ; X64-NEXT: .secidx f
> > -; X64-NEXT: .short 0
> > +; X64-NEXT: .short 1
> > ; X64-NEXT: .long [[END_OF_F]]-f
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X64-NEXT: .long 0
> > @@ -171,6 +184,14 @@
> > ; X64-NEXT: .long 5
> > ; X64-NEXT: .long [[EPILOG_AND_RET]]-f
> > ; X64-NEXT: .long 6
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; X64-NEXT: [[F2_END]]:
> > ; File index to string table offset subsection
> > @@ -209,6 +230,7 @@
> > ; OBJ64-NEXT: ]
> > ; OBJ64: FunctionLineTable [
> > ; OBJ64-NEXT: Name: f
> > +; OBJ64-NEXT: Flags: 0x1
> > ; OBJ64-NEXT: CodeSize: 0xE
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\asm.c
> > @@ -218,6 +240,14 @@
> > ; OBJ64-NEXT: +0x4: 4
> > ; OBJ64-NEXT: +0x4: 5
> > ; OBJ64-NEXT: +0x9: 6
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: ]
> > ; OBJ64: }
> >
> > Modified: llvm/trunk/test/DebugInfo/COFF/multifile.ll
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/multifile.ll?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/DebugInfo/COFF/multifile.ll (original)
> > +++ llvm/trunk/test/DebugInfo/COFF/multifile.ll Wed Jul 8 19:19:51 2015
> > @@ -58,7 +58,7 @@
> > ; X86-NEXT: [[F2_START]]:
> > ; X86-NEXT: .secrel32 _f
> > ; X86-NEXT: .secidx _f
> > -; X86-NEXT: .short 0
> > +; X86-NEXT: .short 1
> > ; X86-NEXT: .long [[END_OF_F]]-_f
> > ; Segment for file 'D:\\one.c' begins
> > ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > @@ -67,6 +67,8 @@
> > ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
> > ; X86-NEXT: .long [[CALL_LINE_1]]-_f
> > ; X86-NEXT: .long 1
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > ; X86-NEXT: [[FILE_SEGMENT_END]]:
> > ; Segment for file 'D:\\two.c' begins
> > ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > @@ -75,6 +77,8 @@
> > ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
> > ; X86-NEXT: .long [[CALL_LINE_2]]-_f
> > ; X86-NEXT: .long 2
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > ; X86-NEXT: [[FILE_SEGMENT_END]]:
> > ; A new segment for file 'D:\\one.c' begins
> > ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > @@ -85,6 +89,10 @@
> > ; X86-NEXT: .long 7
> > ; X86-NEXT: .long [[RETURN_STMT]]-_f
> > ; X86-NEXT: .long 8
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > ; X86-NEXT: [[FILE_SEGMENT_END]]:
> > ; X86-NEXT: [[F2_END]]:
> > ; File index to string table offset subsection
> > @@ -126,19 +134,28 @@
> > ; OBJ32-NEXT: ]
> > ; OBJ32: FunctionLineTable [
> > ; OBJ32-NEXT: Name: _f
> > +; OBJ32-NEXT: Flags: 0x1
> > ; OBJ32-NEXT: CodeSize: 0x10
> > ; OBJ32-NEXT: FilenameSegment [
> > ; OBJ32-NEXT: Filename: D:\one.c
> > ; OBJ32-NEXT: +0x0: 1
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: FilenameSegment [
> > ; OBJ32-NEXT: Filename: D:\two.c
> > ; OBJ32-NEXT: +0x5: 2
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: FilenameSegment [
> > ; OBJ32-NEXT: Filename: D:\one.c
> > ; OBJ32-NEXT: +0xA: 7
> > ; OBJ32-NEXT: +0xF: 8
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: ]
> > ; OBJ32: }
> > @@ -189,7 +206,7 @@
> > ; X64-NEXT: [[F2_START]]:
> > ; X64-NEXT: .secrel32 f
> > ; X64-NEXT: .secidx f
> > -; X64-NEXT: .short 0
> > +; X64-NEXT: .short 1
> > ; X64-NEXT: .long [[END_OF_F]]-f
> > ; Segment for file 'D:\\input.c' begins
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > @@ -198,6 +215,8 @@
> > ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
> > ; X64-NEXT: .long [[START]]-f
> > ; X64-NEXT: .long 3
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; Segment for file 'D:\\one.c' begins
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > @@ -206,6 +225,8 @@
> > ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
> > ; X64-NEXT: .long [[CALL_LINE_1]]-f
> > ; X64-NEXT: .long 1
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; Segment for file 'D:\\two.c' begins
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > @@ -214,6 +235,8 @@
> > ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
> > ; X64-NEXT: .long [[CALL_LINE_2]]-f
> > ; X64-NEXT: .long 2
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; A new segment for file 'D:\\one.c' begins
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > @@ -224,6 +247,10 @@
> > ; X64-NEXT: .long 7
> > ; X64-NEXT: .long [[EPILOG_AND_RET]]-f
> > ; X64-NEXT: .long 8
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; X64-NEXT: [[F2_END]]:
> > ; File index to string table offset subsection
> > @@ -269,23 +296,34 @@
> > ; OBJ64-NEXT: ]
> > ; OBJ64: FunctionLineTable [
> > ; OBJ64-NEXT: Name: f
> > +; OBJ64-NEXT: Flags: 0x1
> > ; OBJ64-NEXT: CodeSize: 0x18
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\input.c
> > ; OBJ64-NEXT: +0x0: 3
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\one.c
> > ; OBJ64-NEXT: +0x4: 1
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\two.c
> > ; OBJ64-NEXT: +0x9: 2
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\one.c
> > ; OBJ64-NEXT: +0xE: 7
> > ; OBJ64-NEXT: +0x13: 8
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: ]
> > ; OBJ64: }
> >
> > Modified: llvm/trunk/test/DebugInfo/COFF/multifunction.ll
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/multifunction.ll?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/DebugInfo/COFF/multifunction.ll (original)
> > +++ llvm/trunk/test/DebugInfo/COFF/multifunction.ll Wed Jul 8 19:19:51
> 2015
> > @@ -82,7 +82,7 @@
> > ; X86-NEXT: [[F2_START]]:
> > ; X86-NEXT: .secrel32 _x
> > ; X86-NEXT: .secidx _x
> > -; X86-NEXT: .short 0
> > +; X86-NEXT: .short 1
> > ; X86-NEXT: .long [[END_OF_X]]-_x
> > ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X86-NEXT: .long 0
> > @@ -92,6 +92,10 @@
> > ; X86-NEXT: .long 4
> > ; X86-NEXT: .long [[X_RETURN]]-_x
> > ; X86-NEXT: .long 5
> > +; X86-NEXT: .short 42
> > +; X86-NEXT: .short 42
> > +; X86-NEXT: .short 43
> > +; X86-NEXT: .short 43
> > ; X86-NEXT: [[FILE_SEGMENT_END]]:
> > ; X86-NEXT: [[F2_END]]:
> > ; Symbol subsection for y
> > @@ -121,7 +125,7 @@
> > ; X86-NEXT: [[F2_START]]:
> > ; X86-NEXT: .secrel32 _y
> > ; X86-NEXT: .secidx _y
> > -; X86-NEXT: .short 0
> > +; X86-NEXT: .short 1
> > ; X86-NEXT: .long [[END_OF_Y]]-_y
> > ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X86-NEXT: .long 0
> > @@ -131,6 +135,10 @@
> > ; X86-NEXT: .long 8
> > ; X86-NEXT: .long [[Y_RETURN]]-_y
> > ; X86-NEXT: .long 9
> > +; X86-NEXT: .short 52
> > +; X86-NEXT: .short 52
> > +; X86-NEXT: .short 53
> > +; X86-NEXT: .short 53
> > ; X86-NEXT: [[FILE_SEGMENT_END]]:
> > ; X86-NEXT: [[F2_END]]:
> > ; Symbol subsection for f
> > @@ -160,7 +168,7 @@
> > ; X86-NEXT: [[F2_START]]:
> > ; X86-NEXT: .secrel32 _f
> > ; X86-NEXT: .secidx _f
> > -; X86-NEXT: .short 0
> > +; X86-NEXT: .short 1
> > ; X86-NEXT: .long [[END_OF_F]]-_f
> > ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X86-NEXT: .long 0
> > @@ -174,6 +182,14 @@
> > ; X86-NEXT: .long 14
> > ; X86-NEXT: .long [[F_RETURN]]-_f
> > ; X86-NEXT: .long 15
> > +; X86-NEXT: .short 62
> > +; X86-NEXT: .short 62
> > +; X86-NEXT: .short 63
> > +; X86-NEXT: .short 63
> > +; X86-NEXT: .short 72
> > +; X86-NEXT: .short 72
> > +; X86-NEXT: .short 73
> > +; X86-NEXT: .short 73
> > ; X86-NEXT: [[FILE_SEGMENT_END]]:
> > ; X86-NEXT: [[F2_END]]:
> > ; File index to string table offset subsection
> > @@ -198,14 +214,14 @@
> > ; 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: 0x9C IMAGE_REL_I386_SECREL _y
> > +; OBJ32-NEXT: 0xA0 IMAGE_REL_I386_SECTION _y
> > +; OBJ32-NEXT: 0xB4 IMAGE_REL_I386_SECREL _y
> > +; OBJ32-NEXT: 0xB8 IMAGE_REL_I386_SECTION _y
> > +; OBJ32-NEXT: 0x10C IMAGE_REL_I386_SECREL _f
> > +; OBJ32-NEXT: 0x110 IMAGE_REL_I386_SECTION _f
> > +; OBJ32-NEXT: 0x124 IMAGE_REL_I386_SECREL _f
> > +; OBJ32-NEXT: 0x128 IMAGE_REL_I386_SECTION _f
> > ; OBJ32-NEXT: ]
> > ; OBJ32: Subsection [
> > ; OBJ32-NEXT: Type: 0xF1
> > @@ -248,24 +264,35 @@
> > ; OBJ32: ]
> > ; OBJ32: FunctionLineTable [
> > ; OBJ32-NEXT: Name: _x
> > +; OBJ32-NEXT: Flags: 0x1
> > ; OBJ32-NEXT: CodeSize: 0x6
> > ; OBJ32-NEXT: FilenameSegment [
> > ; OBJ32-NEXT: Filename: D:\source.c
> > ; OBJ32-NEXT: +0x0: 4
> > ; OBJ32-NEXT: +0x5: 5
> > +; OBJ32-NEXT: ColStart: 42
> > +; OBJ32-NEXT: ColEnd: 42
> > +; OBJ32-NEXT: ColStart: 43
> > +; OBJ32-NEXT: ColEnd: 43
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: FunctionLineTable [
> > ; OBJ32-NEXT: Name: _y
> > +; OBJ32-NEXT: Flags: 0x1
> > ; OBJ32-NEXT: CodeSize: 0x6
> > ; OBJ32-NEXT: FilenameSegment [
> > ; OBJ32-NEXT: Filename: D:\source.c
> > ; OBJ32-NEXT: +0x0: 8
> > ; OBJ32-NEXT: +0x5: 9
> > +; OBJ32-NEXT: ColStart: 52
> > +; OBJ32-NEXT: ColEnd: 52
> > +; OBJ32-NEXT: ColStart: 53
> > +; OBJ32-NEXT: ColEnd: 53
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: FunctionLineTable [
> > ; OBJ32-NEXT: Name: _f
> > +; OBJ32-NEXT: Flags: 0x1
> > ; OBJ32-NEXT: CodeSize: 0x10
> > ; OBJ32-NEXT: FilenameSegment [
> > ; OBJ32-NEXT: Filename: D:\source.c
> > @@ -273,6 +300,14 @@
> > ; OBJ32-NEXT: +0x5: 13
> > ; OBJ32-NEXT: +0xA: 14
> > ; OBJ32-NEXT: +0xF: 15
> > +; OBJ32-NEXT: ColStart: 62
> > +; OBJ32-NEXT: ColEnd: 62
> > +; OBJ32-NEXT: ColStart: 63
> > +; OBJ32-NEXT: ColEnd: 63
> > +; OBJ32-NEXT: ColStart: 72
> > +; OBJ32-NEXT: ColEnd: 72
> > +; OBJ32-NEXT: ColStart: 73
> > +; OBJ32-NEXT: ColEnd: 73
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: ]
> > ; OBJ32: }
> > @@ -349,7 +384,7 @@
> > ; X64-NEXT: [[F2_START]]:
> > ; X64-NEXT: .secrel32 x
> > ; X64-NEXT: .secidx x
> > -; X64-NEXT: .short 0
> > +; X64-NEXT: .short 1
> > ; X64-NEXT: .long [[END_OF_X]]-x
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X64-NEXT: .long 0
> > @@ -361,6 +396,12 @@
> > ; X64-NEXT: .long 4
> > ; X64-NEXT: .long [[X_EPILOG_AND_RET]]-x
> > ; X64-NEXT: .long 5
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 42
> > +; X64-NEXT: .short 42
> > +; X64-NEXT: .short 43
> > +; X64-NEXT: .short 43
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; X64-NEXT: [[F2_END]]:
> > ; Symbol subsection for y
> > @@ -390,7 +431,7 @@
> > ; X64-NEXT: [[F2_START]]:
> > ; X64-NEXT: .secrel32 y
> > ; X64-NEXT: .secidx y
> > -; X64-NEXT: .short 0
> > +; X64-NEXT: .short 1
> > ; X64-NEXT: .long [[END_OF_Y]]-y
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X64-NEXT: .long 0
> > @@ -402,6 +443,12 @@
> > ; X64-NEXT: .long 8
> > ; X64-NEXT: .long [[Y_EPILOG_AND_RET]]-y
> > ; X64-NEXT: .long 9
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 52
> > +; X64-NEXT: .short 52
> > +; X64-NEXT: .short 53
> > +; X64-NEXT: .short 53
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; X64-NEXT: [[F2_END]]:
> > ; Symbol subsection for f
> > @@ -431,7 +478,7 @@
> > ; X64-NEXT: [[F2_START]]:
> > ; X64-NEXT: .secrel32 f
> > ; X64-NEXT: .secidx f
> > -; X64-NEXT: .short 0
> > +; X64-NEXT: .short 1
> > ; X64-NEXT: .long [[END_OF_F]]-f
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X64-NEXT: .long 0
> > @@ -447,6 +494,16 @@
> > ; X64-NEXT: .long 14
> > ; X64-NEXT: .long [[F_EPILOG_AND_RET]]-f
> > ; X64-NEXT: .long 15
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 62
> > +; X64-NEXT: .short 62
> > +; X64-NEXT: .short 63
> > +; X64-NEXT: .short 63
> > +; X64-NEXT: .short 72
> > +; X64-NEXT: .short 72
> > +; X64-NEXT: .short 73
> > +; X64-NEXT: .short 73
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; X64-NEXT: [[F2_END]]:
> > ; File index to string table offset subsection
> > @@ -471,14 +528,14 @@
> > ; 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: 0xA8 IMAGE_REL_AMD64_SECREL y
> > +; OBJ64-NEXT: 0xAC IMAGE_REL_AMD64_SECTION y
> > +; OBJ64-NEXT: 0xC0 IMAGE_REL_AMD64_SECREL y
> > +; OBJ64-NEXT: 0xC4 IMAGE_REL_AMD64_SECTION y
> > ; OBJ64-NEXT: 0x124 IMAGE_REL_AMD64_SECREL f
> > ; OBJ64-NEXT: 0x128 IMAGE_REL_AMD64_SECTION f
> > +; OBJ64-NEXT: 0x13C IMAGE_REL_AMD64_SECREL f
> > +; OBJ64-NEXT: 0x140 IMAGE_REL_AMD64_SECTION f
> > ; OBJ64-NEXT: ]
> > ; OBJ64: Subsection [
> > ; OBJ64-NEXT: Type: 0xF1
> > @@ -521,26 +578,41 @@
> > ; OBJ64: ]
> > ; OBJ64: FunctionLineTable [
> > ; OBJ64-NEXT: Name: x
> > +; OBJ64-NEXT: Flags: 0x1
> > ; OBJ64-NEXT: CodeSize: 0xE
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\source.c
> > ; OBJ64-NEXT: +0x0: 3
> > ; OBJ64-NEXT: +0x4: 4
> > ; OBJ64-NEXT: +0x9: 5
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 42
> > +; OBJ64-NEXT: ColEnd: 42
> > +; OBJ64-NEXT: ColStart: 43
> > +; OBJ64-NEXT: ColEnd: 43
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: FunctionLineTable [
> > ; OBJ64-NEXT: Name: y
> > +; OBJ64-NEXT: Flags: 0x1
> > ; OBJ64-NEXT: CodeSize: 0xE
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\source.c
> > ; OBJ64-NEXT: +0x0: 7
> > ; OBJ64-NEXT: +0x4: 8
> > ; OBJ64-NEXT: +0x9: 9
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 52
> > +; OBJ64-NEXT: ColEnd: 52
> > +; OBJ64-NEXT: ColStart: 53
> > +; OBJ64-NEXT: ColEnd: 53
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: FunctionLineTable [
> > ; OBJ64-NEXT: Name: f
> > +; OBJ64-NEXT: Flags: 0x1
> > ; OBJ64-NEXT: CodeSize: 0x18
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\source.c
> > @@ -549,6 +621,16 @@
> > ; OBJ64-NEXT: +0x9: 13
> > ; OBJ64-NEXT: +0xE: 14
> > ; OBJ64-NEXT: +0x13: 15
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 62
> > +; OBJ64-NEXT: ColEnd: 62
> > +; OBJ64-NEXT: ColStart: 63
> > +; OBJ64-NEXT: ColEnd: 63
> > +; OBJ64-NEXT: ColStart: 72
> > +; OBJ64-NEXT: ColEnd: 72
> > +; OBJ64-NEXT: ColStart: 73
> > +; OBJ64-NEXT: ColEnd: 73
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: ]
> > ; OBJ64: }
> > @@ -599,11 +681,11 @@ attributes #1 = { "less-precise-fpmad"="
> > !11 = !{i32 2, !"Dwarf Version", i32 4}
> > !12 = !{i32 1, !"Debug Info Version", i32 3}
> > !13 = !{!"clang version 3.5 "}
> > -!14 = !DILocation(line: 4, scope: !4)
> > -!15 = !DILocation(line: 5, scope: !4)
> > -!16 = !DILocation(line: 8, scope: !9)
> > -!17 = !DILocation(line: 9, scope: !9)
> > -!18 = !DILocation(line: 12, scope: !10)
> > -!19 = !DILocation(line: 13, scope: !10)
> > -!20 = !DILocation(line: 14, scope: !10)
> > -!21 = !DILocation(line: 15, scope: !10)
> > +!14 = !DILocation(line: 4, column: 42, scope: !4)
> > +!15 = !DILocation(line: 5, column: 43, scope: !4)
> > +!16 = !DILocation(line: 8, column: 52, scope: !9)
> > +!17 = !DILocation(line: 9, column: 53, scope: !9)
> > +!18 = !DILocation(line: 12, column: 62, scope: !10)
> > +!19 = !DILocation(line: 13, column: 63, scope: !10)
> > +!20 = !DILocation(line: 14, column: 72, scope: !10)
> > +!21 = !DILocation(line: 15, column: 73, scope: !10)
> >
> > Modified: llvm/trunk/test/DebugInfo/COFF/simple.ll
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/simple.ll?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/DebugInfo/COFF/simple.ll (original)
> > +++ llvm/trunk/test/DebugInfo/COFF/simple.ll Wed Jul 8 19:19:51 2015
> > @@ -49,7 +49,7 @@
> > ; X86-NEXT: [[F2_START]]:
> > ; X86-NEXT: .secrel32 _f
> > ; X86-NEXT: .secidx _f
> > -; X86-NEXT: .short 0
> > +; X86-NEXT: .short 1
> > ; X86-NEXT: .long [[END_OF_F]]-_f
> > ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X86-NEXT: .long 0
> > @@ -59,6 +59,10 @@
> > ; X86-NEXT: .long 4
> > ; X86-NEXT: .long [[RETURN_STMT]]-_f
> > ; X86-NEXT: .long 5
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > +; X86-NEXT: .short 0
> > ; X86-NEXT: [[FILE_SEGMENT_END]]:
> > ; X86-NEXT: [[F2_END]]:
> > ; File index to string table offset subsection
> > @@ -97,11 +101,16 @@
> > ; OBJ32-NEXT: ]
> > ; OBJ32: FunctionLineTable [
> > ; OBJ32-NEXT: Name: _f
> > +; OBJ32-NEXT: Flags: 0x1
> > ; OBJ32-NEXT: CodeSize: 0x6
> > ; OBJ32-NEXT: FilenameSegment [
> > ; OBJ32-NEXT: Filename: D:\test.c
> > ; OBJ32-NEXT: +0x0: 4
> > ; OBJ32-NEXT: +0x5: 5
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > +; OBJ32-NEXT: ColStart: 0
> > +; OBJ32-NEXT: ColEnd: 0
> > ; OBJ32-NEXT: ]
> > ; OBJ32-NEXT: ]
> > ; OBJ32: }
> > @@ -148,7 +157,7 @@
> > ; X64-NEXT: [[F2_START]]:
> > ; X64-NEXT: .secrel32 f
> > ; X64-NEXT: .secidx f
> > -; X64-NEXT: .short 0
> > +; X64-NEXT: .short 1
> > ; X64-NEXT: .long [[END_OF_F]]-f
> > ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
> > ; X64-NEXT: .long 0
> > @@ -160,6 +169,12 @@
> > ; X64-NEXT: .long 4
> > ; X64-NEXT: .long [[EPILOG_AND_RET]]-f
> > ; X64-NEXT: .long 5
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > +; X64-NEXT: .short 0
> > ; X64-NEXT: [[FILE_SEGMENT_END]]:
> > ; X64-NEXT: [[F2_END]]:
> > ; File index to string table offset subsection
> > @@ -198,12 +213,19 @@
> > ; OBJ64-NEXT: ]
> > ; OBJ64: FunctionLineTable [
> > ; OBJ64-NEXT: Name: f
> > +; OBJ64-NEXT: Flags: 0x1
> > ; OBJ64-NEXT: CodeSize: 0xE
> > ; OBJ64-NEXT: FilenameSegment [
> > ; OBJ64-NEXT: Filename: D:\test.c
> > ; OBJ64-NEXT: +0x0: 3
> > ; OBJ64-NEXT: +0x4: 4
> > ; OBJ64-NEXT: +0x9: 5
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > +; OBJ64-NEXT: ColStart: 0
> > +; OBJ64-NEXT: ColEnd: 0
> > ; OBJ64-NEXT: ]
> > ; OBJ64-NEXT: ]
> > ; OBJ64: }
> >
> > Modified: llvm/trunk/test/tools/llvm-readobj/codeview-linetables.test
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/codeview-linetables.test?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/tools/llvm-readobj/codeview-linetables.test
> (original)
> > +++ llvm/trunk/test/tools/llvm-readobj/codeview-linetables.test Wed Jul
> 8 19:19:51 2015
> > @@ -104,6 +104,7 @@ MFUN32-NEXT: PayloadSize: 0x8
> > MFUN32: ]
> > MFUN32-NEXT: FunctionLineTable [
> > MFUN32-NEXT: FunctionName: _x
> > +MFUN32-NEXT: Flags: 0x0
> > MFUN32-NEXT: CodeSize: 0xA
> > MFUN32-NEXT: FilenameSegment [
> > MFUN32-NEXT: Filename: d:\source.c
> > @@ -114,6 +115,7 @@ MFUN32-NEXT: ]
> > MFUN32-NEXT: ]
> > MFUN32-NEXT: FunctionLineTable [
> > MFUN32-NEXT: FunctionName: _y
> > +MFUN32-NEXT: Flags: 0x0
> > MFUN32-NEXT: CodeSize: 0xA
> > MFUN32-NEXT: FilenameSegment [
> > MFUN32-NEXT: Filename: d:\source.c
> > @@ -124,6 +126,7 @@ MFUN32-NEXT: ]
> > MFUN32-NEXT: ]
> > MFUN32-NEXT: FunctionLineTable [
> > MFUN32-NEXT: FunctionName: _f
> > +MFUN32-NEXT: Flags: 0x0
> > MFUN32-NEXT: CodeSize: 0x14
> > MFUN32-NEXT: FilenameSegment [
> > MFUN32-NEXT: Filename: d:\source.c
> > @@ -201,6 +204,7 @@ MFUN64-NEXT: PayloadSize: 0x8
> > MFUN64: ]
> > MFUN64-NEXT: FunctionLineTable [
> > MFUN64-NEXT: FunctionName: x
> > +MFUN64-NEXT: Flags: 0x0
> > MFUN64-NEXT: CodeSize: 0xE
> > MFUN64-NEXT: FilenameSegment [
> > MFUN64-NEXT: Filename: d:\source.c
> > @@ -211,6 +215,7 @@ MFUN64-NEXT: ]
> > MFUN64-NEXT: ]
> > MFUN64-NEXT: FunctionLineTable [
> > MFUN64-NEXT: FunctionName: y
> > +MFUN64-NEXT: Flags: 0x0
> > MFUN64-NEXT: CodeSize: 0xE
> > MFUN64-NEXT: FilenameSegment [
> > MFUN64-NEXT: Filename: d:\source.c
> > @@ -221,6 +226,7 @@ MFUN64-NEXT: ]
> > MFUN64-NEXT: ]
> > MFUN64-NEXT: FunctionLineTable [
> > MFUN64-NEXT: FunctionName: f
> > +MFUN64-NEXT: Flags: 0x0
> > MFUN64-NEXT: CodeSize: 0x18
> > MFUN64-NEXT: FilenameSegment [
> > MFUN64-NEXT: Filename: d:\source.c
> > @@ -296,6 +302,7 @@ MFILE32-NEXT: PayloadSize: 0x8
> > MFILE32: ]
> > MFILE32-NEXT: FunctionLineTable [
> > MFILE32-NEXT: FunctionName: _f
> > +MFILE32-NEXT: Flags: 0x0
> > MFILE32-NEXT: CodeSize: 0x14
> > MFILE32-NEXT: FilenameSegment [
> > MFILE32-NEXT: Filename: d:\input.c
> > @@ -352,6 +359,7 @@ MFILE64-NEXT: PayloadSize: 0x8
> > MFILE64: ]
> > MFILE64-NEXT: FunctionLineTable [
> > MFILE64-NEXT: FunctionName: f
> > +MFILE64-NEXT: Flags: 0x0
> > MFILE64-NEXT: CodeSize: 0x18
> > MFILE64-NEXT: FilenameSegment [
> > MFILE64-NEXT: Filename: d:\input.c
> > @@ -399,6 +407,7 @@ MCOMDAT-NEXT: CodeSize: 0x7
> > MCOMDAT-NEXT: }
> > MCOMDAT: FunctionLineTable [
> > MCOMDAT-NEXT: FunctionName: ?f@@YAHXZ
> > +MCOMDAT-NEXT: Flags: 0x0
> > MCOMDAT-NEXT: CodeSize: 0x7
> > MCOMDAT-NEXT: FilenameSegment [
> > MCOMDAT-NEXT: Filename: c:\src\test.cc
> > @@ -414,6 +423,7 @@ MCOMDAT-NEXT: CodeSize: 0x7
> > MCOMDAT-NEXT: }
> > MCOMDAT: FunctionLineTable [
> > MCOMDAT-NEXT: FunctionName: ?g@@YAHXZ
> > +MCOMDAT-NEXT: Flags: 0x0
> > MCOMDAT-NEXT: CodeSize: 0x7
> > MCOMDAT-NEXT: FilenameSegment [
> > MCOMDAT-NEXT: Filename: c:\src\test.cc
> >
> > Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=241764&r1=241763&r2=241764&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)
> > +++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Wed Jul 8 19:19:51 2015
> > @@ -585,7 +585,11 @@ void COFFDumper::printCodeViewDebugInfo(
> > W.printString("FunctionName", Name);
> >
> > DataExtractor DE(FunctionLineTables[Name], true, 4);
> > - uint32_t Offset = 8; // Skip relocations.
> > + uint32_t Offset = 6; // Skip relocations.
> > + uint16_t Flags = DE.getU16(&Offset);
> > + W.printHex("Flags", Flags);
> > + bool HasColumnInformation =
> > + Flags & COFF::DEBUG_LINE_TABLES_HAVE_COLUMN_RECORDS;
> > uint32_t FunctionSize = DE.getU32(&Offset);
> > W.printHex("CodeSize", FunctionSize);
> > while (DE.isValidOffset(Offset)) {
> > @@ -595,11 +599,6 @@ void COFFDumper::printCodeViewDebugInfo(
> > uint32_t OffsetInIndex = DE.getU32(&Offset),
> > SegmentLength = DE.getU32(&Offset),
> > FullSegmentSize = DE.getU32(&Offset);
> > - if (FullSegmentSize != 12 + 8 * SegmentLength) {
> > - error(object_error::parse_failed);
> > - return;
> > - }
> > -
>
> This broke -Werror, since FullSegmentSize is unused now. I've fixed that
> in r241783 by skipping it instead of reading it.
>
> Looking at it though, was removing this check related to this
> change/intentional? No tests fail if I add it back, which is a bit
> concerning.
>
I removed it while I was adding support for the column information. I
forgot to add in the augmented check when I was finished. Fixed in r241831.
>
> > uint32_t FilenameOffset;
> > {
> > DataExtractor SDE(CVFileIndexToStringOffsetTable, true, 4);
> > @@ -636,6 +635,15 @@ void COFFDumper::printCodeViewDebugInfo(
> > format("+0x%X", PC).snprint(Buffer, 32);
> > W.printNumber(Buffer, LineNumber);
> > }
> > + if (HasColumnInformation) {
> > + for (unsigned J = 0; J != SegmentLength &&
> DE.isValidOffset(Offset);
> > + ++J) {
> > + uint16_t ColStart = DE.getU16(&Offset);
> > + W.printNumber("ColStart", ColStart);
> > + uint16_t ColEnd = DE.getU16(&Offset);
> > + W.printNumber("ColEnd", ColEnd);
> > + }
> > + }
> > }
> > }
> > }
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150709/41561444/attachment.html>
More information about the llvm-commits
mailing list