[readobj] Expand CodeView dumping functionality
This rewrites and expands the existing codeview dumping functionality in
llvm-readobj using techniques similar to those in lib/Object. This defines a
number of new records and enums useful for reading memory mapped codeview
sections in COFF objects.
The dumper is intended as a testing tool for LLVM as it grows more codeview
output capabilities.
Reviewers: majnemer
Differential Revision: http://reviews.llvm.org/D16104
llvm-svn: 257658
diff --git a/llvm/test/tools/llvm-readobj/codeview-linetables.test b/llvm/test/tools/llvm-readobj/codeview-linetables.test
index a1c6ab6..4867a62 100644
--- a/llvm/test/tools/llvm-readobj/codeview-linetables.test
+++ b/llvm/test/tools/llvm-readobj/codeview-linetables.test
@@ -28,79 +28,80 @@
RUN: | FileCheck %s -check-prefix MFUN64
MFUN32: CodeViewDebugInfo [
+MFUN32-NEXT: Section: .debug$S (2)
MFUN32-NEXT: Magic: 0x4
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF1
-MFUN32-NEXT: PayloadSize: 0x52
+MFUN32-NEXT: SubSectionType: Symbols (0xF1)
+MFUN32-NEXT: SubSectionSize: 0x52
+MFUN32: ]
+MFUN32: Subsection [
+MFUN32-NEXT: SubSectionType: FrameData (0xF5)
+MFUN32-NEXT: SubSectionSize: 0x24
MFUN32: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF5
-MFUN32-NEXT: PayloadSize: 0x24
-MFUN32: ]
-MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF1
-MFUN32-NEXT: PayloadSize: 0x4B
+MFUN32-NEXT: SubSectionType: Symbols (0xF1)
+MFUN32-NEXT: SubSectionSize: 0x4B
MFUN32: ProcStart {
-MFUN32-NEXT: DisplayName: x
-MFUN32-NEXT: Section: _x
-MFUN32-NEXT: CodeSize: 0xA
-MFUN32-NEXT: }
-MFUN32-NEXT: ProcEnd
+MFUN32: CodeSize: 0xA
+MFUN32: DisplayName: x
+MFUN32: LinkageName: _x
+MFUN32: }
+MFUN32: ProcEnd
MFUN32: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF2
-MFUN32-NEXT: PayloadSize: 0x30
+MFUN32-NEXT: SubSectionType: Lines (0xF2)
+MFUN32-NEXT: SubSectionSize: 0x30
MFUN32: LinkageName: _x
MFUN32-NEXT: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF5
-MFUN32-NEXT: PayloadSize: 0x24
+MFUN32-NEXT: SubSectionType: FrameData (0xF5)
+MFUN32-NEXT: SubSectionSize: 0x24
MFUN32: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF1
-MFUN32-NEXT: PayloadSize: 0x4B
+MFUN32-NEXT: SubSectionType: Symbols (0xF1)
+MFUN32-NEXT: SubSectionSize: 0x4B
MFUN32: ProcStart {
-MFUN32-NEXT: DisplayName: y
-MFUN32-NEXT: Section: _y
-MFUN32-NEXT: CodeSize: 0xA
-MFUN32-NEXT: }
-MFUN32-NEXT: ProcEnd
+MFUN32: CodeSize: 0xA
+MFUN32: DisplayName: y
+MFUN32: LinkageName: _y
+MFUN32: }
+MFUN32: ProcEnd
MFUN32: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF2
-MFUN32-NEXT: PayloadSize: 0x30
+MFUN32-NEXT: SubSectionType: Lines (0xF2)
+MFUN32-NEXT: SubSectionSize: 0x30
MFUN32: LinkageName: _y
MFUN32-NEXT: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF5
-MFUN32-NEXT: PayloadSize: 0x24
+MFUN32-NEXT: SubSectionType: FrameData (0xF5)
+MFUN32-NEXT: SubSectionSize: 0x24
MFUN32: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF1
-MFUN32-NEXT: PayloadSize: 0x4B
+MFUN32-NEXT: SubSectionType: Symbols (0xF1)
+MFUN32-NEXT: SubSectionSize: 0x4B
MFUN32: ProcStart {
-MFUN32-NEXT: DisplayName: f
-MFUN32-NEXT: Section: _f
-MFUN32-NEXT: CodeSize: 0x14
-MFUN32-NEXT: }
-MFUN32-NEXT: ProcEnd
+MFUN32: CodeSize: 0x14
+MFUN32: DisplayName: f
+MFUN32: LinkageName: _f
+MFUN32: }
+MFUN32: ProcEnd
MFUN32: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF2
-MFUN32-NEXT: PayloadSize: 0x40
+MFUN32-NEXT: SubSectionType: Lines (0xF2)
+MFUN32-NEXT: SubSectionSize: 0x40
MFUN32: LinkageName: _f
MFUN32-NEXT: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF4
-MFUN32-NEXT: PayloadSize: 0x18
+MFUN32-NEXT: SubSectionType: FileChecksums (0xF4)
+MFUN32-NEXT: SubSectionSize: 0x18
MFUN32: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF3
-MFUN32-NEXT: PayloadSize: 0x46
+MFUN32-NEXT: SubSectionType: StringTable (0xF3)
+MFUN32-NEXT: SubSectionSize: 0x46
MFUN32: ]
MFUN32-NEXT: Subsection [
-MFUN32-NEXT: Type: 0xF1
-MFUN32-NEXT: PayloadSize: 0x8
+MFUN32-NEXT: SubSectionType: Symbols (0xF1)
+MFUN32-NEXT: SubSectionSize: 0x8
MFUN32: ]
MFUN32-NEXT: FunctionLineTable [
MFUN32-NEXT LinkageName: _x
@@ -181,70 +182,70 @@
MFUN32-NEXT ]
MFUN32-NEXT ]
MFUN32-NEXT ]
-MFUN32-NEXT ]
+MFUN32: ]
MFUN64: CodeViewDebugInfo [
-MFUN64-NEXT: Magic: 0x4
+MFUN64: Magic: 0x4
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF1
-MFUN64-NEXT: PayloadSize: 0x52
+MFUN64-NEXT: SubSectionType: Symbols (0xF1)
+MFUN64-NEXT: SubSectionSize: 0x52
MFUN64: ]
-MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF1
-MFUN64-NEXT: PayloadSize: 0x4B
+MFUN64: Subsection [
+MFUN64-NEXT: SubSectionType: Symbols (0xF1)
+MFUN64-NEXT: SubSectionSize: 0x4B
MFUN64: ProcStart {
-MFUN64-NEXT: DisplayName: x
-MFUN64-NEXT: Section: x
-MFUN64-NEXT: CodeSize: 0xE
-MFUN64-NEXT: }
-MFUN64-NEXT: ProcEnd
+MFUN64: CodeSize: 0xE
+MFUN64: DisplayName: x
+MFUN64: LinkageName: x
+MFUN64: }
+MFUN64: ProcEnd
MFUN64: ]
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF2
-MFUN64-NEXT: PayloadSize: 0x30
+MFUN64-NEXT: SubSectionType: Lines (0xF2)
+MFUN64-NEXT: SubSectionSize: 0x30
MFUN64: LinkageName: x
MFUN64-NEXT: ]
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF1
-MFUN64-NEXT: PayloadSize: 0x4B
+MFUN64-NEXT: SubSectionType: Symbols (0xF1)
+MFUN64-NEXT: SubSectionSize: 0x4B
MFUN64: ProcStart {
-MFUN64-NEXT: DisplayName: y
-MFUN64-NEXT: Section: y
-MFUN64-NEXT: CodeSize: 0xE
-MFUN64-NEXT: }
-MFUN64-NEXT: ProcEnd
+MFUN64: CodeSize: 0xE
+MFUN64: DisplayName: y
+MFUN64: LinkageName: y
+MFUN64: }
+MFUN64: ProcEnd
MFUN64: ]
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF2
-MFUN64-NEXT: PayloadSize: 0x30
+MFUN64-NEXT: SubSectionType: Lines (0xF2)
+MFUN64-NEXT: SubSectionSize: 0x30
MFUN64: LinkageName: y
MFUN64-NEXT: ]
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF1
-MFUN64-NEXT: PayloadSize: 0x4B
+MFUN64-NEXT: SubSectionType: Symbols (0xF1)
+MFUN64-NEXT: SubSectionSize: 0x4B
MFUN64: ProcStart {
-MFUN64-NEXT: DisplayName: f
-MFUN64-NEXT: Section: f
-MFUN64-NEXT: CodeSize: 0x18
-MFUN64-NEXT: }
-MFUN64-NEXT: ProcEnd
+MFUN64: CodeSize: 0x18
+MFUN64: DisplayName: f
+MFUN64: LinkageName: f
+MFUN64: }
+MFUN64: ProcEnd
MFUN64: ]
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF2
-MFUN64-NEXT: PayloadSize: 0x40
+MFUN64-NEXT: SubSectionType: Lines (0xF2)
+MFUN64-NEXT: SubSectionSize: 0x40
MFUN64: LinkageName: f
MFUN64-NEXT: ]
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF4
-MFUN64-NEXT: PayloadSize: 0x18
+MFUN64-NEXT: SubSectionType: FileChecksums (0xF4)
+MFUN64-NEXT: SubSectionSize: 0x18
MFUN64: ]
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF3
-MFUN64-NEXT: PayloadSize: 0xD
+MFUN64-NEXT: SubSectionType: StringTable (0xF3)
+MFUN64-NEXT: SubSectionSize: 0xD
MFUN64: ]
MFUN64-NEXT: Subsection [
-MFUN64-NEXT: Type: 0xF1
-MFUN64-NEXT: PayloadSize: 0x8
+MFUN64-NEXT: SubSectionType: Symbols (0xF1)
+MFUN64-NEXT: SubSectionSize: 0x8
MFUN64: ]
MFUN64-NEXT: FunctionLineTable [
MFUN64-NEXT: LinkageName: x
@@ -325,7 +326,7 @@
MFUN64-NEXT: ]
MFUN64-NEXT: ]
MFUN64-NEXT: ]
-MFUN64-NEXT: ]
+MFUN64: ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; The following two object files were generated using the following command:
@@ -352,41 +353,41 @@
RUN: | FileCheck %s -check-prefix MFILE64
MFILE32: CodeViewDebugInfo [
-MFILE32-NEXT: Magic: 0x4
+MFILE32: Magic: 0x4
MFILE32-NEXT: Subsection [
-MFILE32-NEXT: Type: 0xF1
-MFILE32-NEXT: PayloadSize: 0x51
+MFILE32-NEXT: SubSectionType: Symbols (0xF1)
+MFILE32-NEXT: SubSectionSize: 0x51
+MFILE32: ]
+MFILE32: Subsection [
+MFILE32-NEXT: SubSectionType: FrameData (0xF5)
+MFILE32-NEXT: SubSectionSize: 0x24
MFILE32: ]
MFILE32-NEXT: Subsection [
-MFILE32-NEXT: Type: 0xF5
-MFILE32-NEXT: PayloadSize: 0x24
-MFILE32: ]
-MFILE32-NEXT: Subsection [
-MFILE32-NEXT: Type: 0xF1
-MFILE32-NEXT: PayloadSize: 0x4B
+MFILE32-NEXT: SubSectionType: Symbols (0xF1)
+MFILE32-NEXT: SubSectionSize: 0x4B
MFILE32: ProcStart {
-MFILE32-NEXT: DisplayName: f
-MFILE32-NEXT: Section: _f
-MFILE32-NEXT: CodeSize: 0x14
-MFILE32-NEXT: }
-MFILE32-NEXT: ProcEnd
+MFILE32: CodeSize: 0x14
+MFILE32: DisplayName: f
+MFILE32: LinkageName: _f
+MFILE32: }
+MFILE32: ProcEnd
MFILE32: ]
MFILE32-NEXT: Subsection [
-MFILE32-NEXT: Type: 0xF2
-MFILE32-NEXT: PayloadSize: 0x64
+MFILE32-NEXT: SubSectionType: Lines (0xF2)
+MFILE32-NEXT: SubSectionSize: 0x64
MFILE32: LinkageName: _f
MFILE32-NEXT: ]
MFILE32-NEXT: Subsection [
-MFILE32-NEXT: Type: 0xF4
-MFILE32-NEXT: PayloadSize: 0x28
+MFILE32-NEXT: SubSectionType: FileChecksums (0xF4)
+MFILE32-NEXT: SubSectionSize: 0x28
MFILE32: ]
MFILE32-NEXT: Subsection [
-MFILE32-NEXT: Type: 0xF3
-MFILE32-NEXT: PayloadSize: 0x57
+MFILE32-NEXT: SubSectionType: StringTable (0xF3)
+MFILE32-NEXT: SubSectionSize: 0x57
MFILE32: ]
MFILE32-NEXT: Subsection [
-MFILE32-NEXT: Type: 0xF1
-MFILE32-NEXT: PayloadSize: 0x8
+MFILE32-NEXT: SubSectionType: Symbols (0xF1)
+MFILE32-NEXT: SubSectionSize: 0x8
MFILE32: ]
MFILE32-NEXT: FunctionLineTable [
MFILE32-NEXT: LinkageName: _f
@@ -430,40 +431,40 @@
MFILE32-NEXT: ]
MFILE32-NEXT: ]
MFILE32-NEXT: ]
-MFILE32-NEXT: ]
+MFILE32: ]
MFILE64: CodeViewDebugInfo [
-MFILE64-NEXT: Magic: 0x4
+MFILE64: Magic: 0x4
MFILE64-NEXT: Subsection [
-MFILE64-NEXT: Type: 0xF1
-MFILE64-NEXT: PayloadSize: 0x51
+MFILE64-NEXT: SubSectionType: Symbols (0xF1)
+MFILE64-NEXT: SubSectionSize: 0x51
MFILE64: ]
-MFILE64-NEXT: Subsection [
-MFILE64-NEXT: Type: 0xF1
-MFILE64-NEXT: PayloadSize: 0x4B
+MFILE64: Subsection [
+MFILE64-NEXT: SubSectionType: Symbols (0xF1)
+MFILE64-NEXT: SubSectionSize: 0x4B
MFILE64: ProcStart {
-MFILE64-NEXT: DisplayName: f
-MFILE64-NEXT: Section: f
-MFILE64-NEXT: CodeSize: 0x18
-MFILE64-NEXT: }
-MFILE64-NEXT: ProcEnd
+MFILE64: CodeSize: 0x18
+MFILE64: DisplayName: f
+MFILE64: LinkageName: f
+MFILE64: }
+MFILE64: ProcEnd
MFILE64: ]
MFILE64-NEXT: Subsection [
-MFILE64-NEXT: Type: 0xF2
-MFILE64-NEXT: PayloadSize: 0x64
+MFILE64-NEXT: SubSectionType: Lines (0xF2)
+MFILE64-NEXT: SubSectionSize: 0x64
MFILE64: LinkageName: f
MFILE64-NEXT: ]
MFILE64-NEXT: Subsection [
-MFILE64-NEXT: Type: 0xF4
-MFILE64-NEXT: PayloadSize: 0x28
+MFILE64-NEXT: SubSectionType: FileChecksums (0xF4)
+MFILE64-NEXT: SubSectionSize: 0x28
MFILE64: ]
MFILE64-NEXT: Subsection [
-MFILE64-NEXT: Type: 0xF3
-MFILE64-NEXT: PayloadSize: 0x1E
+MFILE64-NEXT: SubSectionType: StringTable (0xF3)
+MFILE64-NEXT: SubSectionSize: 0x1E
MFILE64: ]
MFILE64-NEXT: Subsection [
-MFILE64-NEXT: Type: 0xF1
-MFILE64-NEXT: PayloadSize: 0x8
+MFILE64-NEXT: SubSectionType: Symbols (0xF1)
+MFILE64-NEXT: SubSectionSize: 0x8
MFILE64: ]
MFILE64-NEXT: FunctionLineTable [
MFILE64-NEXT: LinkageName: f
@@ -506,7 +507,7 @@
MFILE64-NEXT: IsStatement: Yes
MFILE64-NEXT: ]
MFILE64-NEXT: ]
-MFILE64-NEXT: ]
+MFILE64: ]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; The following object files were generated using the following command:
@@ -528,10 +529,10 @@
RUN: | FileCheck %s -check-prefix MCOMDAT
MCOMDAT: ProcStart {
-MCOMDAT-NEXT: DisplayName: f
-MCOMDAT-NEXT: Section: ?f@@YAHXZ
-MCOMDAT-NEXT: CodeSize: 0x7
-MCOMDAT-NEXT: }
+MCOMDAT: CodeSize: 0x7
+MCOMDAT: DisplayName: f
+MCOMDAT: LinkageName: ?f@@YAHXZ
+MCOMDAT: }
MCOMDAT: FunctionLineTable [
MCOMDAT-NEXT: LinkageName: ?f@@YAHXZ
MCOMDAT-NEXT: Flags: 0x0
@@ -556,10 +557,10 @@
MCOMDAT-NEXT: ]
MCOMDAT-NEXT: ]
MCOMDAT: ProcStart {
-MCOMDAT-NEXT: DisplayName: g
-MCOMDAT-NEXT: Section: ?g@@YAHXZ
-MCOMDAT-NEXT: CodeSize: 0x7
-MCOMDAT-NEXT: }
+MCOMDAT: CodeSize: 0x7
+MCOMDAT: DisplayName: g
+MCOMDAT: LinkageName: ?g@@YAHXZ
+MCOMDAT: }
MCOMDAT: FunctionLineTable [
MCOMDAT-NEXT: LinkageName: ?g@@YAHXZ
MCOMDAT-NEXT: Flags: 0x0