[llvm] r257552 - [CodeView] Improve the line table dumper
David Majnemer via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 12 17:05:16 PST 2016
Author: majnemer
Date: Tue Jan 12 19:05:16 2016
New Revision: 257552
URL: http://llvm.org/viewvc/llvm-project?rev=257552&view=rev
Log:
[CodeView] Improve the line table dumper
This change has us print out fields we didn't previously understand. To
improve readability, we now group column information with it's
respective line.
Modified:
llvm/trunk/include/llvm/Support/COFF.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=257552&r1=257551&r2=257552&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/COFF.h (original)
+++ llvm/trunk/include/llvm/Support/COFF.h Tue Jan 12 19:05:16 2016
@@ -656,6 +656,15 @@ namespace COFF {
}
};
+ enum CodeViewLine : unsigned {
+ CVL_LineNumberStartBits = 24,
+ CVL_LineNumberEndDeltaBits = 7,
+ CVL_LineNumberEndDeltaMask = (1U << CVL_LineNumberEndDeltaBits) - 1,
+ CVL_MaxLineNumber = (1U << CVL_LineNumberStartBits) - 1,
+ CVL_IsStatement = 1U << 31,
+ CVL_MaxColumnNumber = UINT16_MAX,
+ };
+
enum CodeViewIdentifiers {
DEBUG_LINE_TABLES_HAVE_COLUMN_RECORDS = 0x1,
DEBUG_SECTION_MAGIC = 0x4,
Modified: llvm/trunk/test/DebugInfo/COFF/asm.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/asm.ll?rev=257552&r1=257551&r2=257552&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/COFF/asm.ll (original)
+++ llvm/trunk/test/DebugInfo/COFF/asm.ll Tue Jan 12 19:05:16 2016
@@ -110,17 +110,28 @@
; OBJ32-NEXT: Flags: 0x1
; OBJ32-NEXT: CodeSize: 0x6
; OBJ32-NEXT: FilenameSegment [
-; OBJ32-NEXT: Filename: D:\asm.c
+; OBJ32-NEXT: Filename: D:\asm.c
; FIXME: An empty __asm stmt creates an extra entry.
; We seem to know that these offsets are the same statically during the
; execution of endModule(). See PR18679 for the details.
-; OBJ32-NEXT: +0x0: 4
-; OBJ32-NEXT: +0x0: 5
-; OBJ32-NEXT: +0x5: 6
+; OBJ32-NEXT: +0x0 [
+; OBJ32-NEXT: LineNumberStart: 4
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
; OBJ32-NEXT: ColStart: 0
; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0x0 [
+; OBJ32-NEXT: LineNumberStart: 5
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
; OBJ32-NEXT: ColStart: 0
; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0x5 [
+; OBJ32-NEXT: LineNumberStart: 6
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
; OBJ32-NEXT: ColStart: 0
; OBJ32-NEXT: ColEnd: 0
; OBJ32-NEXT: ]
@@ -232,20 +243,36 @@
; OBJ64-NEXT: CodeSize: 0xE
; OBJ64-NEXT: FilenameSegment [
; OBJ64-NEXT: Filename: D:\asm.c
-; OBJ64-NEXT: +0x0: 3
; FIXME: An empty __asm stmt creates an extra entry.
; See PR18679 for the details.
-; 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: +0x0 [
+; OBJ64-NEXT: LineNumberStart: 3
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x4 [
+; OBJ64-NEXT: LineNumberStart: 4
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x4 [
+; OBJ64-NEXT: LineNumberStart: 5
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x9 [
+; OBJ64-NEXT: LineNumberStart: 6
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
Modified: llvm/trunk/test/DebugInfo/COFF/multifile.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/multifile.ll?rev=257552&r1=257551&r2=257552&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/COFF/multifile.ll (original)
+++ llvm/trunk/test/DebugInfo/COFF/multifile.ll Tue Jan 12 19:05:16 2016
@@ -137,24 +137,40 @@
; 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: +0x0 [
+; OBJ32-NEXT: LineNumberStart: 1
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 0
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
; 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: +0x5 [
+; OBJ32-NEXT: LineNumberStart: 2
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 0
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
; 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: +0xA [
+; OBJ32-NEXT: LineNumberStart: 7
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 0
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0xF [
+; OBJ32-NEXT: LineNumberStart: 8
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 0
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
@@ -297,30 +313,50 @@
; 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: +0x0 [
+; OBJ64-NEXT: LineNumberStart: 3
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; 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: +0x4 [
+; OBJ64-NEXT: LineNumberStart: 1
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; 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: +0x9 [
+; OBJ64-NEXT: LineNumberStart: 2
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; 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: +0xE [
+; OBJ64-NEXT: LineNumberStart: 7
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x13 [
+; OBJ64-NEXT: LineNumberStart: 8
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
Modified: llvm/trunk/test/DebugInfo/COFF/multifunction.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/multifunction.ll?rev=257552&r1=257551&r2=257552&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/COFF/multifunction.ll (original)
+++ llvm/trunk/test/DebugInfo/COFF/multifunction.ll Tue Jan 12 19:05:16 2016
@@ -265,49 +265,82 @@
; 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: 0
-; OBJ32-NEXT: ColStart: 43
-; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: +0x0 [
+; OBJ32-NEXT: LineNumberStart: 4
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 42
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0x5 [
+; OBJ32-NEXT: LineNumberStart: 5
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 43
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
; OBJ32-NEXT: FunctionLineTable [
-; OBJ32-NEXT: Name: _y
+; OBJ32-NEXT: LinkageName: _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: 0
-; OBJ32-NEXT: ColStart: 53
-; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: +0x0 [
+; OBJ32-NEXT: LineNumberStart: 8
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 52
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0x5 [
+; OBJ32-NEXT: LineNumberStart: 9
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 53
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
; OBJ32-NEXT: FunctionLineTable [
-; OBJ32-NEXT: Name: _f
+; OBJ32-NEXT: LinkageName: _f
; OBJ32-NEXT: Flags: 0x1
; OBJ32-NEXT: CodeSize: 0x10
; OBJ32-NEXT: FilenameSegment [
; OBJ32-NEXT: Filename: D:\source.c
-; OBJ32-NEXT: +0x0: 12
-; OBJ32-NEXT: +0x5: 13
-; OBJ32-NEXT: +0xA: 14
-; OBJ32-NEXT: +0xF: 15
-; OBJ32-NEXT: ColStart: 62
-; OBJ32-NEXT: ColEnd: 0
-; OBJ32-NEXT: ColStart: 63
-; OBJ32-NEXT: ColEnd: 0
-; OBJ32-NEXT: ColStart: 72
-; OBJ32-NEXT: ColEnd: 0
-; OBJ32-NEXT: ColStart: 73
-; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: +0x0 [
+; OBJ32-NEXT: LineNumberStart: 12
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 62
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0x5 [
+; OBJ32-NEXT: LineNumberStart: 13
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 63
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0xA [
+; OBJ32-NEXT: LineNumberStart: 14
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 72
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0xF [
+; OBJ32-NEXT: LineNumberStart: 15
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 73
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
+
; X64-LABEL: x:
; X64-NEXT: .L{{.*}}:
; X64-NEXT: [[X_START:.*]]:{{$}}
@@ -570,60 +603,104 @@
; OBJ64-NEXT: Type: 0xF2
; OBJ64: ]
; OBJ64: FunctionLineTable [
-; OBJ64-NEXT: Name: x
+; OBJ64-NEXT: LinkageName: 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: 0
-; OBJ64-NEXT: ColStart: 43
-; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: +0x0 [
+; OBJ64-NEXT: LineNumberStart: 3
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x4 [
+; OBJ64-NEXT: LineNumberStart: 4
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 42
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x9 [
+; OBJ64-NEXT: LineNumberStart: 5
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 43
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
; OBJ64-NEXT: FunctionLineTable [
-; OBJ64-NEXT: Name: y
+; OBJ64-NEXT: LinkageName: 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: 0
-; OBJ64-NEXT: ColStart: 53
-; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: +0x0 [
+; OBJ64-NEXT: LineNumberStart: 7
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x4 [
+; OBJ64-NEXT: LineNumberStart: 8
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 52
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x9 [
+; OBJ64-NEXT: LineNumberStart: 9
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 53
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
; OBJ64-NEXT: FunctionLineTable [
-; OBJ64-NEXT: Name: f
+; OBJ64-NEXT: LinkageName: f
; OBJ64-NEXT: Flags: 0x1
; OBJ64-NEXT: CodeSize: 0x18
; OBJ64-NEXT: FilenameSegment [
; OBJ64-NEXT: Filename: D:\source.c
-; OBJ64-NEXT: +0x0: 11
-; OBJ64-NEXT: +0x4: 12
-; 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: 0
-; OBJ64-NEXT: ColStart: 63
-; OBJ64-NEXT: ColEnd: 0
-; OBJ64-NEXT: ColStart: 72
-; OBJ64-NEXT: ColEnd: 0
-; OBJ64-NEXT: ColStart: 73
-; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: +0x0 [
+; OBJ64-NEXT: LineNumberStart: 11
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x4 [
+; OBJ64-NEXT: LineNumberStart: 12
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 62
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x9 [
+; OBJ64-NEXT: LineNumberStart: 13
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 63
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0xE [
+; OBJ64-NEXT: LineNumberStart: 14
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 72
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x13 [
+; OBJ64-NEXT: LineNumberStart: 15
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 73
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
Modified: llvm/trunk/test/DebugInfo/COFF/simple.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/simple.ll?rev=257552&r1=257551&r2=257552&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/COFF/simple.ll (original)
+++ llvm/trunk/test/DebugInfo/COFF/simple.ll Tue Jan 12 19:05:16 2016
@@ -104,12 +104,20 @@
; 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: +0x0 [
+; OBJ32-NEXT: LineNumberStart: 4
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 0
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
+; OBJ32-NEXT: +0x5 [
+; OBJ32-NEXT: LineNumberStart: 5
+; OBJ32-NEXT: LineNumberEndDelta: 0
+; OBJ32-NEXT: IsStatement: No
+; OBJ32-NEXT: ColStart: 0
+; OBJ32-NEXT: ColEnd: 0
+; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
; OBJ32-NEXT: ]
@@ -214,15 +222,27 @@
; 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: +0x0 [
+; OBJ64-NEXT: LineNumberStart: 3
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x4 [
+; OBJ64-NEXT: LineNumberStart: 4
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
+; OBJ64-NEXT: +0x9 [
+; OBJ64-NEXT: LineNumberStart: 5
+; OBJ64-NEXT: LineNumberEndDelta: 0
+; OBJ64-NEXT: IsStatement: No
+; OBJ64-NEXT: ColStart: 0
+; OBJ64-NEXT: ColEnd: 0
+; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
; OBJ64-NEXT: ]
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=257552&r1=257551&r2=257552&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/codeview-linetables.test (original)
+++ llvm/trunk/test/tools/llvm-readobj/codeview-linetables.test Tue Jan 12 19:05:16 2016
@@ -103,41 +103,85 @@ MFUN32-NEXT: Type: 0xF1
MFUN32-NEXT: PayloadSize: 0x8
MFUN32: ]
MFUN32-NEXT: FunctionLineTable [
-MFUN32-NEXT: LinkageName: _x
-MFUN32-NEXT: Flags: 0x0
-MFUN32-NEXT: CodeSize: 0xA
-MFUN32-NEXT: FilenameSegment [
-MFUN32-NEXT: Filename: d:\source.c
-MFUN32-NEXT: +0x0: 3
-MFUN32-NEXT: +0x3: 4
-MFUN32-NEXT: +0x8: 5
-MFUN32-NEXT: ]
-MFUN32-NEXT: ]
-MFUN32-NEXT: FunctionLineTable [
-MFUN32-NEXT: LinkageName: _y
-MFUN32-NEXT: Flags: 0x0
-MFUN32-NEXT: CodeSize: 0xA
-MFUN32-NEXT: FilenameSegment [
-MFUN32-NEXT: Filename: d:\source.c
-MFUN32-NEXT: +0x0: 7
-MFUN32-NEXT: +0x3: 8
-MFUN32-NEXT: +0x8: 9
-MFUN32-NEXT: ]
-MFUN32-NEXT: ]
-MFUN32-NEXT: FunctionLineTable [
-MFUN32-NEXT: LinkageName: _f
-MFUN32-NEXT: Flags: 0x0
-MFUN32-NEXT: CodeSize: 0x14
-MFUN32-NEXT: FilenameSegment [
-MFUN32-NEXT: Filename: d:\source.c
-MFUN32-NEXT: +0x0: 11
-MFUN32-NEXT: +0x3: 12
-MFUN32-NEXT: +0x8: 13
-MFUN32-NEXT: +0xD: 14
-MFUN32-NEXT: +0x12: 15
-MFUN32-NEXT: ]
-MFUN32-NEXT: ]
-MFUN32-NEXT: ]
+MFUN32-NEXT LinkageName: _x
+MFUN32-NEXT Flags: 0x0
+MFUN32-NEXT CodeSize: 0xA
+MFUN32-NEXT FilenameSegment [
+MFUN32-NEXT Filename: d:\source.c
+MFUN32-NEXT +0x0 [
+MFUN32-NEXT LineNumberStart: 3
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT +0x3 [
+MFUN32-NEXT LineNumberStart: 4
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT +0x8 [
+MFUN32-NEXT LineNumberStart: 5
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT ]
+MFUN32-NEXT ]
+MFUN32-NEXT FunctionLineTable [
+MFUN32-NEXT LinkageName: _y
+MFUN32-NEXT Flags: 0x0
+MFUN32-NEXT CodeSize: 0xA
+MFUN32-NEXT FilenameSegment [
+MFUN32-NEXT Filename: d:\source.c
+MFUN32-NEXT +0x0 [
+MFUN32-NEXT LineNumberStart: 7
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT +0x3 [
+MFUN32-NEXT LineNumberStart: 8
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT +0x8 [
+MFUN32-NEXT LineNumberStart: 9
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT ]
+MFUN32-NEXT ]
+MFUN32-NEXT FunctionLineTable [
+MFUN32-NEXT LinkageName: _f
+MFUN32-NEXT Flags: 0x0
+MFUN32-NEXT CodeSize: 0x14
+MFUN32-NEXT FilenameSegment [
+MFUN32-NEXT Filename: d:\source.c
+MFUN32-NEXT +0x0 [
+MFUN32-NEXT LineNumberStart: 11
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT +0x3 [
+MFUN32-NEXT LineNumberStart: 12
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT +0x8 [
+MFUN32-NEXT LineNumberStart: 13
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT +0xD [
+MFUN32-NEXT LineNumberStart: 14
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT +0x12 [
+MFUN32-NEXT LineNumberStart: 15
+MFUN32-NEXT LineNumberEndDelta: 0
+MFUN32-NEXT IsStatement: Yes
+MFUN32-NEXT ]
+MFUN32-NEXT ]
+MFUN32-NEXT ]
+MFUN32-NEXT ]
MFUN64: CodeViewDebugInfo [
MFUN64-NEXT: Magic: 0x4
@@ -208,9 +252,21 @@ MFUN64-NEXT: Flags: 0x0
MFUN64-NEXT: CodeSize: 0xE
MFUN64-NEXT: FilenameSegment [
MFUN64-NEXT: Filename: d:\source.c
-MFUN64-NEXT: +0x0: 3
-MFUN64-NEXT: +0x4: 4
-MFUN64-NEXT: +0x9: 5
+MFUN64-NEXT: +0x0 [
+MFUN64-NEXT: LineNumberStart: 3
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
+MFUN64-NEXT: +0x4 [
+MFUN64-NEXT: LineNumberStart: 4
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
+MFUN64-NEXT: +0x9 [
+MFUN64-NEXT: LineNumberStart: 5
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
MFUN64-NEXT: ]
MFUN64-NEXT: ]
MFUN64-NEXT: FunctionLineTable [
@@ -219,9 +275,21 @@ MFUN64-NEXT: Flags: 0x0
MFUN64-NEXT: CodeSize: 0xE
MFUN64-NEXT: FilenameSegment [
MFUN64-NEXT: Filename: d:\source.c
-MFUN64-NEXT: +0x0: 7
-MFUN64-NEXT: +0x4: 8
-MFUN64-NEXT: +0x9: 9
+MFUN64-NEXT: +0x0 [
+MFUN64-NEXT: LineNumberStart: 7
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
+MFUN64-NEXT: +0x4 [
+MFUN64-NEXT: LineNumberStart: 8
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
+MFUN64-NEXT: +0x9 [
+MFUN64-NEXT: LineNumberStart: 9
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
MFUN64-NEXT: ]
MFUN64-NEXT: ]
MFUN64-NEXT: FunctionLineTable [
@@ -230,11 +298,31 @@ MFUN64-NEXT: Flags: 0x0
MFUN64-NEXT: CodeSize: 0x18
MFUN64-NEXT: FilenameSegment [
MFUN64-NEXT: Filename: d:\source.c
-MFUN64-NEXT: +0x0: 11
-MFUN64-NEXT: +0x4: 12
-MFUN64-NEXT: +0x9: 13
-MFUN64-NEXT: +0xE: 14
-MFUN64-NEXT: +0x13: 15
+MFUN64-NEXT: +0x0 [
+MFUN64-NEXT: LineNumberStart: 11
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
+MFUN64-NEXT: +0x4 [
+MFUN64-NEXT: LineNumberStart: 12
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
+MFUN64-NEXT: +0x9 [
+MFUN64-NEXT: LineNumberStart: 13
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
+MFUN64-NEXT: +0xE [
+MFUN64-NEXT: LineNumberStart: 14
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
+MFUN64-NEXT: +0x13 [
+MFUN64-NEXT: LineNumberStart: 15
+MFUN64-NEXT: LineNumberEndDelta: 0
+MFUN64-NEXT: IsStatement: Yes
+MFUN64-NEXT: ]
MFUN64-NEXT: ]
MFUN64-NEXT: ]
MFUN64-NEXT: ]
@@ -306,20 +394,40 @@ MFILE32-NEXT: Flags: 0x0
MFILE32-NEXT: CodeSize: 0x14
MFILE32-NEXT: FilenameSegment [
MFILE32-NEXT: Filename: d:\input.c
-MFILE32-NEXT: +0x0: 3
+MFILE32-NEXT: +0x0 [
+MFILE32-NEXT: LineNumberStart: 3
+MFILE32-NEXT: LineNumberEndDelta: 0
+MFILE32-NEXT: IsStatement: Yes
+MFILE32-NEXT: ]
MFILE32-NEXT: ]
MFILE32-NEXT: FilenameSegment [
MFILE32-NEXT: Filename: d:\one.c
-MFILE32-NEXT: +0x3: 1
+MFILE32-NEXT: +0x3 [
+MFILE32-NEXT: LineNumberStart: 1
+MFILE32-NEXT: LineNumberEndDelta: 0
+MFILE32-NEXT: IsStatement: Yes
+MFILE32-NEXT: ]
MFILE32-NEXT: ]
MFILE32-NEXT: FilenameSegment [
MFILE32-NEXT: Filename: d:\two.c
-MFILE32-NEXT: +0x8: 2
+MFILE32-NEXT: +0x8 [
+MFILE32-NEXT: LineNumberStart: 2
+MFILE32-NEXT: LineNumberEndDelta: 0
+MFILE32-NEXT: IsStatement: Yes
+MFILE32-NEXT: ]
MFILE32-NEXT: ]
MFILE32-NEXT: FilenameSegment [
MFILE32-NEXT: Filename: d:\one.c
-MFILE32-NEXT: +0xD: 7
-MFILE32-NEXT: +0x12: 8
+MFILE32-NEXT: +0xD [
+MFILE32-NEXT: LineNumberStart: 7
+MFILE32-NEXT: LineNumberEndDelta: 0
+MFILE32-NEXT: IsStatement: Yes
+MFILE32-NEXT: ]
+MFILE32-NEXT: +0x12 [
+MFILE32-NEXT: LineNumberStart: 8
+MFILE32-NEXT: LineNumberEndDelta: 0
+MFILE32-NEXT: IsStatement: Yes
+MFILE32-NEXT: ]
MFILE32-NEXT: ]
MFILE32-NEXT: ]
MFILE32-NEXT: ]
@@ -357,28 +465,47 @@ MFILE64-NEXT: Subsection [
MFILE64-NEXT: Type: 0xF1
MFILE64-NEXT: PayloadSize: 0x8
MFILE64: ]
-MFILE64-NEXT: FunctionLineTable [
-MFILE64-NEXT: LinkageName: f
-MFILE64-NEXT: Flags: 0x0
-MFILE64-NEXT: CodeSize: 0x18
-MFILE64-NEXT: FilenameSegment [
-MFILE64-NEXT: Filename: d:\input.c
-MFILE64-NEXT: +0x0: 3
-MFILE64-NEXT: ]
-MFILE64-NEXT: FilenameSegment [
-MFILE64-NEXT: Filename: d:\one.c
-MFILE64-NEXT: +0x4: 1
-MFILE64-NEXT: ]
-MFILE64-NEXT: FilenameSegment [
-MFILE64-NEXT: Filename: d:\two.c
-MFILE64-NEXT: +0x9: 2
-MFILE64-NEXT: ]
-MFILE64-NEXT: FilenameSegment [
-MFILE64-NEXT: Filename: d:\one.c
-MFILE64-NEXT: +0xE: 7
-MFILE64-NEXT: +0x13: 8
-MFILE64-NEXT: ]
-MFILE64-NEXT: ]
+MFILE64-NEXT: FunctionLineTable [
+MFILE64-NEXT: LinkageName: f
+MFILE64-NEXT: Flags: 0x0
+MFILE64-NEXT: CodeSize: 0x18
+MFILE64-NEXT: FilenameSegment [
+MFILE64-NEXT: Filename: d:\input.c
+MFILE64-NEXT: +0x0 [
+MFILE64-NEXT: LineNumberStart: 3
+MFILE64-NEXT: LineNumberEndDelta: 0
+MFILE64-NEXT: IsStatement: Yes
+MFILE64-NEXT: ]
+MFILE64-NEXT: ]
+MFILE64-NEXT: FilenameSegment [
+MFILE64-NEXT: Filename: d:\one.c
+MFILE64-NEXT: +0x4 [
+MFILE64-NEXT: LineNumberStart: 1
+MFILE64-NEXT: LineNumberEndDelta: 0
+MFILE64-NEXT: IsStatement: Yes
+MFILE64-NEXT: ]
+MFILE64-NEXT: ]
+MFILE64-NEXT: FilenameSegment [
+MFILE64-NEXT: Filename: d:\two.c
+MFILE64-NEXT: +0x9 [
+MFILE64-NEXT: LineNumberStart: 2
+MFILE64-NEXT: LineNumberEndDelta: 0
+MFILE64-NEXT: IsStatement: Yes
+MFILE64-NEXT: ]
+MFILE64-NEXT: ]
+MFILE64-NEXT: FilenameSegment [
+MFILE64-NEXT: Filename: d:\one.c
+MFILE64-NEXT: +0xE [
+MFILE64-NEXT: LineNumberStart: 7
+MFILE64-NEXT: LineNumberEndDelta: 0
+MFILE64-NEXT: IsStatement: Yes
+MFILE64-NEXT: ]
+MFILE64-NEXT: +0x13 [
+MFILE64-NEXT: LineNumberStart: 8
+MFILE64-NEXT: LineNumberEndDelta: 0
+MFILE64-NEXT: IsStatement: Yes
+MFILE64-NEXT: ]
+MFILE64-NEXT: ]
MFILE64-NEXT: ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -411,9 +538,21 @@ MCOMDAT-NEXT: Flags: 0x0
MCOMDAT-NEXT: CodeSize: 0x7
MCOMDAT-NEXT: FilenameSegment [
MCOMDAT-NEXT: Filename: c:\src\test.cc
-MCOMDAT-NEXT: +0x0: 2
-MCOMDAT-NEXT: +0x3: 3
-MCOMDAT-NEXT: +0x5: 4
+MCOMDAT-NEXT: +0x0 [
+MCOMDAT-NEXT: LineNumberStart: 2
+MCOMDAT-NEXT: LineNumberEndDelta: 0
+MCOMDAT-NEXT: IsStatement: Yes
+MCOMDAT-NEXT: ]
+MCOMDAT-NEXT: +0x3 [
+MCOMDAT-NEXT: LineNumberStart: 3
+MCOMDAT-NEXT: LineNumberEndDelta: 0
+MCOMDAT-NEXT: IsStatement: Yes
+MCOMDAT-NEXT: ]
+MCOMDAT-NEXT: +0x5 [
+MCOMDAT-NEXT: LineNumberStart: 4
+MCOMDAT-NEXT: LineNumberEndDelta: 0
+MCOMDAT-NEXT: IsStatement: Yes
+MCOMDAT-NEXT: ]
MCOMDAT-NEXT: ]
MCOMDAT-NEXT: ]
MCOMDAT: ProcStart {
@@ -427,8 +566,20 @@ MCOMDAT-NEXT: Flags: 0x0
MCOMDAT-NEXT: CodeSize: 0x7
MCOMDAT-NEXT: FilenameSegment [
MCOMDAT-NEXT: Filename: c:\src\test.cc
-MCOMDAT-NEXT: +0x0: 7
-MCOMDAT-NEXT: +0x3: 8
-MCOMDAT-NEXT: +0x5: 9
+MCOMDAT-NEXT: +0x0 [
+MCOMDAT-NEXT: LineNumberStart: 7
+MCOMDAT-NEXT: LineNumberEndDelta: 0
+MCOMDAT-NEXT: IsStatement: Yes
+MCOMDAT-NEXT: ]
+MCOMDAT-NEXT: +0x3 [
+MCOMDAT-NEXT: LineNumberStart: 8
+MCOMDAT-NEXT: LineNumberEndDelta: 0
+MCOMDAT-NEXT: IsStatement: Yes
+MCOMDAT-NEXT: ]
+MCOMDAT-NEXT: +0x5 [
+MCOMDAT-NEXT: LineNumberStart: 9
+MCOMDAT-NEXT: LineNumberEndDelta: 0
+MCOMDAT-NEXT: IsStatement: Yes
+MCOMDAT-NEXT: ]
MCOMDAT-NEXT: ]
MCOMDAT-NEXT: ]
Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=257552&r1=257551&r2=257552&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Tue Jan 12 19:05:16 2016
@@ -603,12 +603,14 @@ void COFFDumper::printCodeViewSection(co
// in the line table. The filename string is accessed using double
// indirection to the string table subsection using the index subsection.
uint32_t OffsetInIndex = DE.getU32(&Offset),
- SegmentLength = DE.getU32(&Offset),
+ NumLines = DE.getU32(&Offset),
FullSegmentSize = DE.getU32(&Offset);
+ uint32_t ColumnOffset = Offset + 8 * NumLines;
+ DataExtractor ColumnDE(DE.getData(), true, 4);
+
if (FullSegmentSize !=
- 12 + 8 * SegmentLength +
- (HasColumnInformation ? 4 * SegmentLength : 0)) {
+ 12 + 8 * NumLines + (HasColumnInformation ? 4 * NumLines : 0)) {
error(object_error::parse_failed);
return;
}
@@ -635,29 +637,41 @@ void COFFDumper::printCodeViewSection(co
StringRef Filename(CVStringTable.data() + FilenameOffset);
ListScope S(W, "FilenameSegment");
W.printString("Filename", Filename);
- for (unsigned J = 0; J != SegmentLength && DE.isValidOffset(Offset);
- ++J) {
+ for (unsigned LineIdx = 0;
+ LineIdx != NumLines && DE.isValidOffset(Offset); ++LineIdx) {
// Then go the (PC, LineNumber) pairs. The line number is stored in the
// least significant 31 bits of the respective word in the table.
- uint32_t PC = DE.getU32(&Offset),
- LineNumber = DE.getU32(&Offset) & 0x7fffffff;
+ uint32_t PC = DE.getU32(&Offset), LineData = DE.getU32(&Offset);
if (PC >= FunctionSize) {
error(object_error::parse_failed);
return;
}
char Buffer[32];
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);
+ ListScope PCScope(W, Buffer);
+ uint32_t LineNumberStart = LineData & COFF::CVL_MaxLineNumber;
+ uint32_t LineNumberEndDelta =
+ (LineData >> COFF::CVL_LineNumberStartBits) &
+ COFF::CVL_LineNumberEndDeltaMask;
+ bool IsStatement = LineData & COFF::CVL_IsStatement;
+ W.printNumber("LineNumberStart", LineNumberStart);
+ W.printNumber("LineNumberEndDelta", LineNumberEndDelta);
+ W.printBoolean("IsStatement", IsStatement);
+ if (HasColumnInformation &&
+ ColumnDE.isValidOffsetForDataOfSize(ColumnOffset, 4)) {
+ uint16_t ColStart = ColumnDE.getU16(&ColumnOffset);
W.printNumber("ColStart", ColStart);
- uint16_t ColEnd = DE.getU16(&Offset);
+ uint16_t ColEnd = ColumnDE.getU16(&ColumnOffset);
W.printNumber("ColEnd", ColEnd);
}
}
+ // Skip over the column data.
+ if (HasColumnInformation) {
+ for (unsigned LineIdx = 0;
+ LineIdx != NumLines && DE.isValidOffset(Offset); ++LineIdx) {
+ DE.getU32(&Offset);
+ }
+ }
}
}
}
More information about the llvm-commits
mailing list