[llvm] r305032 - [llvm-pdbdump] Improve consistency among subcommands.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 8 16:39:33 PDT 2017


Author: zturner
Date: Thu Jun  8 18:39:33 2017
New Revision: 305032

URL: http://llvm.org/viewvc/llvm-project?rev=305032&view=rev
Log:
[llvm-pdbdump] Improve consistency among subcommands.

The pdb2yaml and raw subcommands did something very
similar but with a different output format, and they
used a lot of the same command line options, but each
one re-implemented the command line option with slightly
different spellings / options.  This patch merges them
together into a single definition which is shared by
both subcommands.  This new syntax also allows for more
flexibility in the way debug subsections are dumped.

Differential Revision: https://reviews.llvm.org/D33996

Added:
    llvm/trunk/test/DebugInfo/PDB/Inputs/debug-subsections.yaml
    llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test
Removed:
    llvm/trunk/test/DebugInfo/PDB/Inputs/cross-module-import-export.yaml
    llvm/trunk/test/DebugInfo/PDB/Inputs/simple-line-info.yaml
    llvm/trunk/test/DebugInfo/PDB/cross-module-import-export.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo-write.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo.test
Modified:
    llvm/trunk/test/DebugInfo/PDB/pdb-minimal-construct.test
    llvm/trunk/test/DebugInfo/PDB/pdb-yaml-symbols.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-source-names.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-write.test
    llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp
    llvm/trunk/tools/llvm-pdbdump/YAMLOutputStyle.cpp
    llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
    llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h

Removed: llvm/trunk/test/DebugInfo/PDB/Inputs/cross-module-import-export.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/Inputs/cross-module-import-export.yaml?rev=305031&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/Inputs/cross-module-import-export.yaml (original)
+++ llvm/trunk/test/DebugInfo/PDB/Inputs/cross-module-import-export.yaml (removed)
@@ -1,24 +0,0 @@
-DbiStream:       
-  Modules:         
-    - Module:          'Foo.obj'
-      ObjFile:         'Foo.obj'
-      Subsections:     
-        - !CrossModuleExports
-          Exports:         
-            - LocalId:         4852
-              GlobalId:        9283
-            - LocalId:         2147487875
-              GlobalId:        9123
-    - Module:          'Bar.obj'
-      ObjFile:         'Bar.obj'
-      Subsections:     
-        - !CrossModuleExports
-          Exports:         
-            - LocalId:         4265
-              GlobalId:        6097
-            - LocalId:         4297
-              GlobalId:        4677
-        - !CrossModuleImports
-          Imports:         
-            - Module:          'Foo.obj'
-              Imports:         [ 4852, 2147487875 ]

Added: llvm/trunk/test/DebugInfo/PDB/Inputs/debug-subsections.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/Inputs/debug-subsections.yaml?rev=305032&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/Inputs/debug-subsections.yaml (added)
+++ llvm/trunk/test/DebugInfo/PDB/Inputs/debug-subsections.yaml Thu Jun  8 18:39:33 2017
@@ -0,0 +1,64 @@
+DbiStream:       
+  Modules:         
+    - Module:          'Foo.obj'
+      ObjFile:         'Foo.obj'
+      Subsections:     
+        - !CrossModuleExports
+          Exports:         
+            - LocalId:         4852
+              GlobalId:        9283
+            - LocalId:         2147487875
+              GlobalId:        9123
+    - Module:          'Bar.obj'
+      ObjFile:         'Bar.obj'
+      Subsections:     
+        - !CrossModuleExports
+          Exports:         
+            - LocalId:         4265
+              GlobalId:        6097
+            - LocalId:         4297
+              GlobalId:        4677
+        - !CrossModuleImports
+          Imports:         
+            - Module:          'Foo.obj'
+              Imports:         [ 4852, 2147487875 ]
+    - Module:          'd:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj'
+      ObjFile:         'd:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj'
+      SourceFiles:
+        - 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
+      Subsections:
+        - !FileChecksums
+          Checksums:
+            - FileName:        'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
+              Kind:            MD5
+              Checksum:        A0A5BD0D3ECD93FC29D19DE826FBF4BC
+            - FileName:        'f:\dd\externalapis\windows\10\sdk\inc\winerror.h'
+              Kind:            MD5
+              Checksum:        1154D69F5B2650196E1FC34F4134E56B
+        - !Lines
+          CodeSize:        10
+          Flags:           [  ]
+          RelocOffset:     16
+          RelocSegment:    1
+          Blocks:
+            - FileName:        'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
+              Lines:
+                - Offset:          0
+                  LineStart:       5
+                  IsStatement:     true
+                  EndDelta:        0
+                - Offset:          3
+                  LineStart:       6
+                  IsStatement:     true
+                  EndDelta:        0
+                - Offset:          8
+                  LineStart:       7
+                  IsStatement:     true
+                  EndDelta:        0
+              Columns:
+        - !InlineeLines
+          HasExtraFiles:   false
+          Sites:           
+            - FileName:        'f:\dd\externalapis\windows\10\sdk\inc\winerror.h'
+              LineNum:         26950
+              Inlinee:         22767

Removed: llvm/trunk/test/DebugInfo/PDB/Inputs/simple-line-info.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/Inputs/simple-line-info.yaml?rev=305031&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/Inputs/simple-line-info.yaml (original)
+++ llvm/trunk/test/DebugInfo/PDB/Inputs/simple-line-info.yaml (removed)
@@ -1,44 +0,0 @@
----
-DbiStream:
-  Modules:
-    - Module:          'd:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj'
-      ObjFile:         'd:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj'
-      SourceFiles:
-        - 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
-      Subsections:
-        - !FileChecksums
-          Checksums:
-            - FileName:        'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
-              Kind:            MD5
-              Checksum:        A0A5BD0D3ECD93FC29D19DE826FBF4BC
-            - FileName:        'f:\dd\externalapis\windows\10\sdk\inc\winerror.h'
-              Kind:            MD5
-              Checksum:        1154D69F5B2650196E1FC34F4134E56B
-        - !Lines
-          CodeSize:        10
-          Flags:           [  ]
-          RelocOffset:     16
-          RelocSegment:    1
-          Blocks:
-            - FileName:        'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
-              Lines:
-                - Offset:          0
-                  LineStart:       5
-                  IsStatement:     true
-                  EndDelta:        0
-                - Offset:          3
-                  LineStart:       6
-                  IsStatement:     true
-                  EndDelta:        0
-                - Offset:          8
-                  LineStart:       7
-                  IsStatement:     true
-                  EndDelta:        0
-              Columns:
-        - !InlineeLines
-          HasExtraFiles:   false
-          Sites:           
-            - FileName:        'f:\dd\externalapis\windows\10\sdk\inc\winerror.h'
-              LineNum:         26950
-              Inlinee:         22767
-...

Removed: llvm/trunk/test/DebugInfo/PDB/cross-module-import-export.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/cross-module-import-export.test?rev=305031&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/cross-module-import-export.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/cross-module-import-export.test (removed)
@@ -1,60 +0,0 @@
-; RUN: llvm-pdbdump yaml2pdb -pdb=%t.pdb %p/Inputs/cross-module-import-export.yaml
-
-; RUN: llvm-pdbdump pdb2yaml -all -no-file-headers %t.pdb | FileCheck --check-prefix=YAML %s
-; RUN: llvm-pdbdump raw -all %t.pdb | FileCheck --check-prefix=RAW %s
-
-YAML:      Modules:
-YAML-NEXT:   - Module:          Foo.obj
-YAML-NEXT:     ObjFile:         Foo.obj
-YAML-NEXT:     Subsections:
-YAML-NEXT:       - !CrossModuleExports
-YAML-NEXT:         Exports:
-YAML-NEXT:           - LocalId:         4852
-YAML-NEXT:             GlobalId:        9283
-YAML-NEXT:           - LocalId:         2147487875
-YAML-NEXT:             GlobalId:        9123
-YAML:        - Module:          Bar.obj
-YAML-NEXT:     ObjFile:         Bar.obj
-YAML-NEXT:     Subsections:
-YAML-NEXT:       - !CrossModuleExports
-YAML-NEXT:         Exports:
-YAML-NEXT:           - LocalId:         4265
-YAML-NEXT:             GlobalId:        6097
-YAML-NEXT:           - LocalId:         4297
-YAML-NEXT:             GlobalId:        4677
-YAML-NEXT:       - !CrossModuleImports
-YAML-NEXT:         Imports:
-YAML-NEXT:           - Module:          Foo.obj
-YAML-NEXT:             Imports:         [ 4852, 2147487875 ]
-
-
-RAW:      DBI Stream {
-RAW:        Modules [
-RAW-NEXT:     {
-RAW-NEXT:       Name: Foo.obj
-RAW:            LineInfo [
-RAW-NEXT:         CrossModuleExports {
-RAW-NEXT:           Local: 0x12F4
-RAW-NEXT:           Global: 0x2443
-RAW-NEXT:           Local: 0x80001083
-RAW-NEXT:           Global: 0x23A3
-RAW-NEXT:         }
-RAW-NEXT:       ]
-RAW-NEXT:     }
-RAW-NEXT:     {
-RAW-NEXT:       Name: Bar.obj
-RAW:            LineInfo [
-RAW-NEXT:         CrossModuleExports {
-RAW-NEXT:           Local: 0x10A9
-RAW-NEXT:           Global: 0x17D1
-RAW-NEXT:           Local: 0x10C9
-RAW-NEXT:           Global: 0x1245
-RAW-NEXT:         }
-RAW-NEXT:         CrossModuleImports {
-RAW-NEXT:           Module: Foo.obj
-RAW-NEXT:           Imports: [0x12F4, 0x80001083]
-RAW-NEXT:         }
-RAW-NEXT:       ]
-RAW-NEXT:     }
-RAW-NEXT:   ]
-RAW-NEXT: }
\ No newline at end of file

Modified: llvm/trunk/test/DebugInfo/PDB/pdb-minimal-construct.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdb-minimal-construct.test?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdb-minimal-construct.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdb-minimal-construct.test Thu Jun  8 18:39:33 2017
@@ -1,11 +1,11 @@
-; This testcase verifies that we can produce a minimal PDB, while
-; serving as an example for how to construct a minimal PDB for other
-; testcases.  It takes as input a small fragment of hand-written yaml
-; that specifies nothing about the PDB other than a definition of one
-; symbol that it contains.  Then it produces a PDB, and uses the
-; resulting PDB to go back to yaml, and verify that the resulting yaml
-; is identical.
-
-; RUN: llvm-pdbdump yaml2pdb -pdb=%t.pdb %p/Inputs/one-symbol.yaml
-; RUN: llvm-pdbdump pdb2yaml -minimal -dbi-module-syms -no-file-headers %t.pdb > %t.pdb.yaml
-; RUN: diff -b %p/Inputs/one-symbol.yaml %t.pdb.yaml
+; This testcase verifies that we can produce a minimal PDB, while
+; serving as an example for how to construct a minimal PDB for other
+; testcases.  It takes as input a small fragment of hand-written yaml
+; that specifies nothing about the PDB other than a definition of one
+; symbol that it contains.  Then it produces a PDB, and uses the
+; resulting PDB to go back to yaml, and verify that the resulting yaml
+; is identical.
+
+; RUN: llvm-pdbdump yaml2pdb -pdb=%t.pdb %p/Inputs/one-symbol.yaml
+; RUN: llvm-pdbdump pdb2yaml -minimal -module-syms -no-file-headers %t.pdb > %t.pdb.yaml
+; RUN: diff -b %p/Inputs/one-symbol.yaml %t.pdb.yaml

Modified: llvm/trunk/test/DebugInfo/PDB/pdb-yaml-symbols.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdb-yaml-symbols.test?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdb-yaml-symbols.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdb-yaml-symbols.test Thu Jun  8 18:39:33 2017
@@ -1,4 +1,4 @@
-; RUN: llvm-pdbdump pdb2yaml -dbi-module-syms %p/Inputs/empty.pdb \
+; RUN: llvm-pdbdump pdb2yaml -module-syms %p/Inputs/empty.pdb \
 ; RUN:   | FileCheck -check-prefix=YAML %s
 
 

Added: llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test?rev=305032&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test (added)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test Thu Jun  8 18:39:33 2017
@@ -0,0 +1,162 @@
+; RUN: llvm-pdbdump yaml2pdb -pdb=%t.pdb %p/Inputs/debug-subsections.yaml
+
+; RUN: llvm-pdbdump pdb2yaml -all -no-file-headers %t.pdb | FileCheck --check-prefix=YAML %s
+; RUN: llvm-pdbdump raw -subsections=all %t.pdb | FileCheck --check-prefix=RAW %s
+
+YAML:      Modules:
+YAML-NEXT:   - Module:          Foo.obj
+YAML-NEXT:     ObjFile:         Foo.obj
+YAML-NEXT:     Subsections:
+YAML-NEXT:       - !CrossModuleExports
+YAML-NEXT:         Exports:
+YAML-NEXT:           - LocalId:         4852
+YAML-NEXT:             GlobalId:        9283
+YAML-NEXT:           - LocalId:         2147487875
+YAML-NEXT:             GlobalId:        9123
+YAML:        - Module:          Bar.obj
+YAML-NEXT:     ObjFile:         Bar.obj
+YAML-NEXT:     Subsections:
+YAML-NEXT:       - !CrossModuleExports
+YAML-NEXT:         Exports:
+YAML-NEXT:           - LocalId:         4265
+YAML-NEXT:             GlobalId:        6097
+YAML-NEXT:           - LocalId:         4297
+YAML-NEXT:             GlobalId:        4677
+YAML-NEXT:       - !CrossModuleImports
+YAML-NEXT:         Imports:
+YAML-NEXT:           - Module:          Foo.obj
+YAML-NEXT:             Imports:         [ 4852, 2147487875 ]
+YAML:       - Module:          'd:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj'
+YAML-NEXT:    ObjFile:         'd:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj'
+YAML-NEXT:    SourceFiles:
+YAML-NEXT:      - 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
+YAML-NEXT:    Subsections:
+YAML-NEXT:      - !FileChecksums
+YAML-NEXT:        Checksums:
+YAML-NEXT:          - FileName:        'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
+YAML-NEXT:            Kind:            MD5
+YAML-NEXT:            Checksum:        A0A5BD0D3ECD93FC29D19DE826FBF4BC
+YAML-NEXT:          - FileName:        'f:\dd\externalapis\windows\10\sdk\inc\winerror.h'
+YAML-NEXT:            Kind:            MD5
+YAML-NEXT:            Checksum:        1154D69F5B2650196E1FC34F4134E56B
+YAML-NEXT:      - !Lines
+YAML-NEXT:        CodeSize:        10
+YAML-NEXT:        Flags:           [  ]
+YAML-NEXT:        RelocOffset:     16
+YAML-NEXT:        RelocSegment:    1
+YAML-NEXT:        Blocks:
+YAML-NEXT:          - FileName:        'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
+YAML-NEXT:            Lines:
+YAML-NEXT:              - Offset:          0
+YAML-NEXT:                LineStart:       5
+YAML-NEXT:                IsStatement:     true
+YAML-NEXT:                EndDelta:        0
+YAML-NEXT:              - Offset:          3
+YAML-NEXT:                LineStart:       6
+YAML-NEXT:                IsStatement:     true
+YAML-NEXT:                EndDelta:        0
+YAML-NEXT:              - Offset:          8
+YAML-NEXT:                LineStart:       7
+YAML-NEXT:                IsStatement:     true
+YAML-NEXT:                EndDelta:        0
+YAML-NEXT:            Columns:
+YAML-NEXT:      - !InlineeLines
+YAML-NEXT:        HasExtraFiles:   false
+YAML-NEXT:        Sites:           
+YAML-NEXT:          - FileName:        'f:\dd\externalapis\windows\10\sdk\inc\winerror.h'
+YAML-NEXT:            LineNum:         26950
+YAML-NEXT:            Inlinee:         22767
+
+
+RAW:      DBI Stream {
+RAW:        Modules [
+RAW-NEXT:     {
+RAW-NEXT:       Name: Foo.obj
+RAW:            Subsections [
+RAW-NEXT:         CrossModuleExports {
+RAW-NEXT:           Local: 0x12F4
+RAW-NEXT:           Global: 0x2443
+RAW-NEXT:           Local: 0x80001083
+RAW-NEXT:           Global: 0x23A3
+RAW-NEXT:         }
+RAW-NEXT:       ]
+RAW-NEXT:     }
+RAW-NEXT:     {
+RAW-NEXT:       Name: Bar.obj
+RAW:            Subsections [
+RAW-NEXT:         CrossModuleExports {
+RAW-NEXT:           Local: 0x10A9
+RAW-NEXT:           Global: 0x17D1
+RAW-NEXT:           Local: 0x10C9
+RAW-NEXT:           Global: 0x1245
+RAW-NEXT:         }
+RAW-NEXT:         CrossModuleImports {
+RAW-NEXT:           Module: Foo.obj
+RAW-NEXT:           Imports: [0x12F4, 0x80001083]
+RAW-NEXT:         }
+RAW-NEXT:       ]
+RAW-NEXT:     }
+RAW-NEXT:    {
+RAW-NEXT:      Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
+RAW:           Subsections [
+RAW-NEXT:        FileChecksums {
+RAW-NEXT:          Checksum {
+RAW-NEXT:            FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
+RAW-NEXT:            Kind: MD5 (0x1)
+RAW-NEXT:            Checksum (
+RAW-NEXT:              0000: A0A5BD0D 3ECD93FC 29D19DE8 26FBF4BC  |....>...)...&...|
+RAW-NEXT:            )
+RAW-NEXT:          }
+RAW-NEXT:          Checksum {
+RAW-NEXT:            FileName: f:\dd\externalapis\windows\10\sdk\inc\winerror.h
+RAW-NEXT:            Kind: MD5 (0x1)
+RAW-NEXT:            Checksum (
+RAW-NEXT:              0000: 1154D69F 5B265019 6E1FC34F 4134E56B  |.T..[&P.n..OA4.k|
+RAW-NEXT:            )
+RAW-NEXT:          }
+RAW-NEXT:        }
+RAW-NEXT:        Lines {
+RAW-NEXT:          Block {
+RAW-NEXT:            RelocSegment: 1
+RAW-NEXT:            RelocOffset: 16
+RAW-NEXT:            CodeSize: 10
+RAW-NEXT:            HasColumns: No
+RAW-NEXT:            Lines {
+RAW-NEXT:              FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
+RAW-NEXT:              Line {
+RAW-NEXT:                Offset: 0
+RAW-NEXT:                LineNumberStart: 5
+RAW-NEXT:                EndDelta: 0
+RAW-NEXT:                IsStatement: Yes
+RAW-NEXT:              }
+RAW-NEXT:              Line {
+RAW-NEXT:                Offset: 3
+RAW-NEXT:                LineNumberStart: 6
+RAW-NEXT:                EndDelta: 0
+RAW-NEXT:                IsStatement: Yes
+RAW-NEXT:              }
+RAW-NEXT:              Line {
+RAW-NEXT:                Offset: 8
+RAW-NEXT:                LineNumberStart: 7
+RAW-NEXT:                EndDelta: 0
+RAW-NEXT:                IsStatement: Yes
+RAW-NEXT:              }
+RAW-NEXT:            }
+RAW-NEXT:          }
+RAW-NEXT:        }
+RAW-NEXT:        InlineeLines {
+RAW-NEXT:          HasExtraFiles: No
+RAW-NEXT:          Lines [
+RAW-NEXT:            Inlinee {
+RAW-NEXT:              FileName: f:\dd\externalapis\windows\10\sdk\inc\winerror.h
+RAW-NEXT:              Function {
+RAW-NEXT:                Index: 0x58ef (unknown function)
+RAW-NEXT:              }
+RAW-NEXT:              SourceLine: 26950
+RAW-NEXT:            }
+RAW-NEXT:          ]
+RAW-NEXT:        }
+RAW-NEXT:      ]
+RAW-NEXT:    }
+RAW-NEXT:  ]
+RAW-NEXT:}

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Thu Jun  8 18:39:33 2017
@@ -1,7 +1,7 @@
 ; RUN: llvm-pdbdump raw -headers -string-table -tpi-records -tpi-record-bytes -module-syms \
 ; RUN:              -sym-record-bytes -globals -publics -module-files \
 ; RUN:              -stream-summary -stream-blocks -ipi-records -ipi-record-bytes \
-; RUN:              -section-contribs -section-map -section-headers -line-info \
+; RUN:              -section-contribs -section-map -section-headers -subsections=all \
 ; RUN:              -tpi-hash -fpo -page-stats %p/Inputs/empty.pdb | FileCheck -check-prefix=EMPTY %s
 ; RUN: llvm-pdbdump raw -all %p/Inputs/empty.pdb | FileCheck -check-prefix=ALL %s
 ; RUN: llvm-pdbdump raw -headers -modules -module-files \
@@ -484,7 +484,7 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:       ]
-; EMPTY-NEXT:       LineInfo [
+; EMPTY-NEXT:       Subsections [
 ; EMPTY-NEXT:         FileChecksums {
 ; EMPTY-NEXT:           Checksum {
 ; EMPTY-NEXT:             FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
@@ -757,7 +757,7 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:       ]
-; EMPTY-NEXT:       LineInfo [
+; EMPTY-NEXT:       Subsections [
 ; EMPTY-NEXT:       ]
 ; EMPTY-NEXT:     }
 ; EMPTY-NEXT:   ]

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test Thu Jun  8 18:39:33 2017
@@ -1,5 +1,5 @@
-RUN: llvm-pdbdump pdb2yaml -dbi-module-info -dbi-module-source-info \
-RUN:   -dbi-stream -pdb-stream -string-table -tpi-stream -stream-directory \
+RUN: llvm-pdbdump pdb2yaml -modules -module-files -dbi-stream \
+RUN:   -pdb-stream -string-table -tpi-stream -stream-directory \
 RUN:   -stream-metadata %p/Inputs/empty.pdb > %t.1
 RUN: llvm-pdbdump yaml2pdb -pdb=%t.2 %t.1
 

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-source-names.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-source-names.test?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-source-names.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-source-names.test Thu Jun  8 18:39:33 2017
@@ -7,10 +7,10 @@
 # pass if alignment is implemented correctly.
 
 RUN: llvm-pdbdump yaml2pdb -pdb=%T/source-names-1.pdb %p/Inputs/source-names-1.yaml
-RUN: llvm-pdbdump pdb2yaml -dbi-module-source-info %T/source-names-1.pdb \
+RUN: llvm-pdbdump pdb2yaml -module-files %T/source-names-1.pdb \
 RUN:     | FileCheck -check-prefix=CHECK1 %s
 RUN: llvm-pdbdump yaml2pdb -pdb=%T/source-names-2.pdb %p/Inputs/source-names-2.yaml
-RUN: llvm-pdbdump pdb2yaml -dbi-module-source-info %T/source-names-2.pdb \
+RUN: llvm-pdbdump pdb2yaml -module-files %T/source-names-2.pdb \
 RUN:     | FileCheck -check-prefix=CHECK2 %s
 
 CHECK1: SourceFiles:

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-write.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-write.test?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-write.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-write.test Thu Jun  8 18:39:33 2017
@@ -11,10 +11,10 @@
 ; (for example if we don't write the entire stream)
 ;
 ; RUN: llvm-pdbdump pdb2yaml -stream-metadata -stream-directory \
-; RUN:   -pdb-stream -tpi-stream -dbi-module-syms %p/Inputs/empty.pdb > %t.1
+; RUN:   -pdb-stream -tpi-stream -module-syms %p/Inputs/empty.pdb > %t.1
 ; RUN: llvm-pdbdump yaml2pdb -pdb=%t.2 %t.1
 ; RUN: llvm-pdbdump pdb2yaml -pdb-stream -tpi-stream \
-; RUN:   -dbi-module-syms -no-file-headers %p/Inputs/empty.pdb > %t.3
+; RUN:   -module-syms -no-file-headers %p/Inputs/empty.pdb > %t.3
 ; RUN: llvm-pdbdump pdb2yaml -pdb-stream -tpi-stream \
-; RUN:   -dbi-module-syms -no-file-headers %t.2 > %t.4
+; RUN:   -module-syms -no-file-headers %t.2 > %t.4
 ; RUN: diff %t.3 %t.4

Removed: llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo-write.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo-write.test?rev=305031&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo-write.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo-write.test (removed)
@@ -1,71 +0,0 @@
-; This testcase verifies that we can produce a PDB with line
-; information.  It does this by describing some line information
-; manually in YAML, creating a PDB out of it, then dumping then
-; line information from the resulting PDB.
-
-; RUN: llvm-pdbdump yaml2pdb -pdb=%t.pdb %p/Inputs/simple-line-info.yaml
-; RUN: llvm-pdbdump raw -line-info %t.pdb | FileCheck -check-prefix=LINES %s
-
-LINES:       Modules [
-LINES-NEXT:    {
-LINES-NEXT:      Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-LINES:           LineInfo [
-LINES-NEXT:        FileChecksums {
-LINES-NEXT:          Checksum {
-LINES-NEXT:            FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-LINES-NEXT:            Kind: MD5 (0x1)
-LINES-NEXT:            Checksum (
-LINES-NEXT:              0000: A0A5BD0D 3ECD93FC 29D19DE8 26FBF4BC  |....>...)...&...|
-LINES-NEXT:            )
-LINES-NEXT:          }
-LINES-NEXT:          Checksum {
-LINES-NEXT:            FileName: f:\dd\externalapis\windows\10\sdk\inc\winerror.h
-LINES-NEXT:            Kind: MD5 (0x1)
-LINES-NEXT:            Checksum (
-LINES-NEXT:              0000: 1154D69F 5B265019 6E1FC34F 4134E56B  |.T..[&P.n..OA4.k|
-LINES-NEXT:            )
-LINES-NEXT:          }
-LINES-NEXT:        }
-LINES-NEXT:        Lines {
-LINES-NEXT:          Block {
-LINES-NEXT:            RelocSegment: 1
-LINES-NEXT:            RelocOffset: 16
-LINES-NEXT:            CodeSize: 10
-LINES-NEXT:            HasColumns: No
-LINES-NEXT:            Lines {
-LINES-NEXT:              FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-LINES-NEXT:              Line {
-LINES-NEXT:                Offset: 0
-LINES-NEXT:                LineNumberStart: 5
-LINES-NEXT:                EndDelta: 0
-LINES-NEXT:                IsStatement: Yes
-LINES-NEXT:              }
-LINES-NEXT:              Line {
-LINES-NEXT:                Offset: 3
-LINES-NEXT:                LineNumberStart: 6
-LINES-NEXT:                EndDelta: 0
-LINES-NEXT:                IsStatement: Yes
-LINES-NEXT:              }
-LINES-NEXT:              Line {
-LINES-NEXT:                Offset: 8
-LINES-NEXT:                LineNumberStart: 7
-LINES-NEXT:                EndDelta: 0
-LINES-NEXT:                IsStatement: Yes
-LINES-NEXT:              }
-LINES-NEXT:            }
-LINES-NEXT:          }
-LINES-NEXT:        }
-LINES-NEXT:        InlineeLines {
-LINES-NEXT:          HasExtraFiles: No
-LINES-NEXT:          Lines [
-LINES-NEXT:            Inlinee {
-LINES-NEXT:              FileName: f:\dd\externalapis\windows\10\sdk\inc\winerror.h
-LINES-NEXT:              Function {
-LINES-NEXT:                Index: 0x58ef (unknown function)
-LINES-NEXT:              }
-LINES-NEXT:              SourceLine: 26950
-LINES-NEXT:            }
-LINES-NEXT:          ]
-LINES-NEXT:        }
-LINES-NEXT:      ]
-LINES-NEXT:    }

Removed: llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo.test?rev=305031&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-yaml-lineinfo.test (removed)
@@ -1,60 +0,0 @@
-; RUN: llvm-pdbdump pdb2yaml -dbi-module-lines %p/Inputs/empty.pdb \
-; RUN:   | FileCheck -check-prefix=YAML %s
-
-
-YAML: ---
-YAML: MSF:
-YAML:   SuperBlock:
-YAML:     BlockSize:       4096
-YAML:     FreeBlockMap:    2
-YAML:     NumBlocks:       25
-YAML:     NumDirectoryBytes: 136
-YAML:     Unknown1:        0
-YAML:     BlockMapAddr:    24
-YAML:   NumDirectoryBlocks: 1
-YAML:   DirectoryBlocks: [ 23 ]
-YAML:   NumStreams:      0
-YAML:   FileSize:        102400
-YAML: DbiStream:
-YAML:   VerHeader:       V70
-YAML:   Age:             1
-YAML:   BuildNumber:     35840
-YAML:   PdbDllVersion:   31101
-YAML:   PdbDllRbld:      0
-YAML:   Flags:           1
-YAML:   MachineType:     x86
-YAML:   Modules:
-YAML:   - Module:          'd:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj'
-YAML:     ObjFile:         'd:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj'
-YAML:     SourceFiles:
-YAML:       - 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
-YAML:     Subsections:
-YAML:       - !Lines
-YAML:         CodeSize:        10
-YAML:         Flags:           [  ]
-YAML:         RelocOffset:     16
-YAML:         RelocSegment:    1
-YAML:         Blocks:
-YAML:           - FileName:        'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
-YAML:             Lines:
-YAML:               - Offset:          0
-YAML:                 LineStart:       5
-YAML:                 IsStatement:     true
-YAML:                 EndDelta:        0
-YAML:               - Offset:          3
-YAML:                 LineStart:       6
-YAML:                 IsStatement:     true
-YAML:                 EndDelta:        0
-YAML:               - Offset:          8
-YAML:                 LineStart:       7
-YAML:                 IsStatement:     true
-YAML:                 EndDelta:        0
-YAML:             Columns:
-YAML:       - !FileChecksums
-YAML:         Checksums:
-YAML:           - FileName:        'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
-YAML:             Kind:            MD5
-YAML:             Checksum:        A0A5BD0D3ECD93FC29D19DE826FBF4BC
-YAML:  - Module:          '* Linker *'
-YAML:    ObjFile:         ''
-YAML: ...
\ No newline at end of file

Modified: llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/LLVMOutputStyle.cpp Thu Jun  8 18:39:33 2017
@@ -89,7 +89,8 @@ public:
       : C13DebugFragmentVisitor(F), P(P), IPI(IPI) {}
 
   Error handleLines() override {
-    if (Lines.empty())
+    if (Lines.empty() ||
+        !opts::checkModuleSubsection(opts::ModuleSubsection::Lines))
       return Error::success();
 
     DictScope DD(P, "Lines");
@@ -132,7 +133,8 @@ public:
   }
 
   Error handleFileChecksums() override {
-    if (!Checksums.hasValue())
+    if (!Checksums.hasValue() ||
+        !opts::checkModuleSubsection(opts::ModuleSubsection::FileChecksums))
       return Error::success();
 
     DictScope DD(P, "FileChecksums");
@@ -149,7 +151,8 @@ public:
   }
 
   Error handleInlineeLines() override {
-    if (InlineeLines.empty())
+    if (InlineeLines.empty() ||
+        !opts::checkModuleSubsection(opts::ModuleSubsection::InlineeLines))
       return Error::success();
 
     DictScope D(P, "InlineeLines");
@@ -177,6 +180,10 @@ public:
   }
 
   Error handleCrossModuleExports() override {
+    if (CrossExports.empty() ||
+        !opts::checkModuleSubsection(opts::ModuleSubsection::CrossScopeExports))
+      return Error::success();
+
     for (const auto &M : CrossExports) {
       DictScope D(P, "CrossModuleExports");
       for (const auto &E : M) {
@@ -188,6 +195,10 @@ public:
   }
 
   Error handleCrossModuleImports() override {
+    if (CrossImports.empty() ||
+        !opts::checkModuleSubsection(opts::ModuleSubsection::CrossScopeImports))
+      return Error::success();
+
     for (const auto &M : CrossImports) {
       DictScope D(P, "CrossModuleImports");
       for (const auto &ImportGroup : M) {
@@ -755,8 +766,10 @@ LLVMOutputStyle::initializeTypeDatabase(
 }
 
 Error LLVMOutputStyle::dumpDbiStream() {
-  bool DumpModules = opts::raw::DumpModules || opts::raw::DumpModuleSyms ||
-                     opts::raw::DumpModuleFiles || opts::raw::DumpLineInfo;
+  bool DumpModules = opts::shared::DumpModules ||
+                     opts::shared::DumpModuleSyms ||
+                     opts::shared::DumpModuleFiles ||
+                     !opts::shared::DumpModuleSubsections.empty();
   if (!opts::raw::DumpHeaders && !DumpModules)
     return Error::success();
   if (!File.hasPDBDbiStream()) {
@@ -806,7 +819,7 @@ Error LLVMOutputStyle::dumpDbiStream() {
       P.printNumber("Symbol Byte Size", Modi.getSymbolDebugInfoByteSize());
       P.printNumber("Type Server Index", Modi.getTypeServerIndex());
       P.printBoolean("Has EC Info", Modi.hasECInfo());
-      if (opts::raw::DumpModuleFiles) {
+      if (opts::shared::DumpModuleFiles) {
         std::string FileListName = to_string(Modules.getSourceFileCount(I)) +
                                    " Contributing Source Files";
         ListScope LL(P, FileListName);
@@ -815,8 +828,9 @@ Error LLVMOutputStyle::dumpDbiStream() {
       }
       bool HasModuleDI = (Modi.getModuleStreamIndex() < File.getNumStreams());
       bool ShouldDumpSymbols =
-          (opts::raw::DumpModuleSyms || opts::raw::DumpSymRecordBytes);
-      if (HasModuleDI && (ShouldDumpSymbols || opts::raw::DumpLineInfo)) {
+          (opts::shared::DumpModuleSyms || opts::raw::DumpSymRecordBytes);
+      if (HasModuleDI &&
+          (ShouldDumpSymbols || !opts::shared::DumpModuleSubsections.empty())) {
         auto ModStreamData = MappedBlockStream::createIndexedStream(
             File.getMsfLayout(), File.getMsfBuffer(),
             Modi.getModuleStreamIndex(), File.getAllocator());
@@ -837,7 +851,7 @@ Error LLVMOutputStyle::dumpDbiStream() {
           bool HadError = false;
           for (auto S : ModS.symbols(&HadError)) {
             DictScope LL(P, "");
-            if (opts::raw::DumpModuleSyms) {
+            if (opts::shared::DumpModuleSyms) {
               if (auto EC = SD.dump(S)) {
                 llvm::consumeError(std::move(EC));
                 HadError = true;
@@ -852,8 +866,8 @@ Error LLVMOutputStyle::dumpDbiStream() {
                 raw_error_code::corrupt_file,
                 "DBI stream contained corrupt symbol record");
         }
-        if (opts::raw::DumpLineInfo) {
-          ListScope SS(P, "LineInfo");
+        if (!opts::shared::DumpModuleSubsections.empty()) {
+          ListScope SS(P, "Subsections");
           auto ExpectedTypes = initializeTypeDatabase(StreamIPI);
           if (!ExpectedTypes)
             return ExpectedTypes.takeError();

Modified: llvm/trunk/tools/llvm-pdbdump/YAMLOutputStyle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/YAMLOutputStyle.cpp?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/YAMLOutputStyle.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/YAMLOutputStyle.cpp Thu Jun  8 18:39:33 2017
@@ -38,39 +38,8 @@ YAMLOutputStyle::YAMLOutputStyle(PDBFile
 }
 
 Error YAMLOutputStyle::dump() {
-  if (opts::pdb2yaml::All) {
-    opts::pdb2yaml::StreamMetadata = true;
-    opts::pdb2yaml::StreamDirectory = true;
-    opts::pdb2yaml::PdbStream = true;
-    opts::pdb2yaml::StringTable = true;
-    opts::pdb2yaml::DbiStream = true;
-    opts::pdb2yaml::DbiModuleInfo = true;
-    opts::pdb2yaml::DbiModuleSyms = true;
-    opts::pdb2yaml::DbiModuleSourceFileInfo = true;
-    opts::pdb2yaml::DbiModuleSourceLineInfo = true;
-    opts::pdb2yaml::TpiStream = true;
-    opts::pdb2yaml::IpiStream = true;
-  }
-
   if (opts::pdb2yaml::StreamDirectory)
     opts::pdb2yaml::StreamMetadata = true;
-  if (opts::pdb2yaml::DbiModuleSyms)
-    opts::pdb2yaml::DbiModuleInfo = true;
-
-  if (opts::pdb2yaml::DbiModuleSourceLineInfo)
-    opts::pdb2yaml::DbiModuleSourceFileInfo = true;
-
-  if (opts::pdb2yaml::DbiModuleSourceFileInfo)
-    opts::pdb2yaml::DbiModuleInfo = true;
-
-  if (opts::pdb2yaml::DbiModuleInfo)
-    opts::pdb2yaml::DbiStream = true;
-
-  // Some names from the module source file info get pulled from the string
-  // table, so if we're writing module source info, we have to write the string
-  // table as well.
-  if (opts::pdb2yaml::DbiModuleSourceLineInfo)
-    opts::pdb2yaml::StringTable = true;
 
   if (auto EC = dumpFileHeaders())
     return EC;
@@ -124,8 +93,8 @@ Error YAMLOutputStyle::dumpFileHeaders()
 }
 
 Error YAMLOutputStyle::dumpStringTable() {
-  bool RequiresStringTable = opts::pdb2yaml::DbiModuleSourceFileInfo ||
-                             opts::pdb2yaml::DbiModuleSourceLineInfo;
+  bool RequiresStringTable = opts::shared::DumpModuleFiles ||
+                             !opts::shared::DumpModuleSubsections.empty();
   bool RequestedStringTable = opts::pdb2yaml::StringTable;
   if (!RequiresStringTable && !RequestedStringTable)
     return Error::success();
@@ -191,6 +160,24 @@ Error YAMLOutputStyle::dumpPDBStream() {
   return Error::success();
 }
 
+static opts::ModuleSubsection convertSubsectionKind(DebugSubsectionKind K) {
+  switch (K) {
+  case DebugSubsectionKind::CrossScopeExports:
+    return opts::ModuleSubsection::CrossScopeExports;
+  case DebugSubsectionKind::CrossScopeImports:
+    return opts::ModuleSubsection::CrossScopeImports;
+  case DebugSubsectionKind::FileChecksums:
+    return opts::ModuleSubsection::FileChecksums;
+  case DebugSubsectionKind::InlineeLines:
+    return opts::ModuleSubsection::InlineeLines;
+  case DebugSubsectionKind::Lines:
+    return opts::ModuleSubsection::Lines;
+  default:
+    return opts::ModuleSubsection::Unknown;
+  }
+  llvm_unreachable("Unreachable!");
+}
+
 Error YAMLOutputStyle::dumpDbiStream() {
   if (!opts::pdb2yaml::DbiStream)
     return Error::success();
@@ -208,7 +195,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
   Obj.DbiStream->PdbDllRbld = DS.getPdbDllRbld();
   Obj.DbiStream->PdbDllVersion = DS.getPdbDllVersion();
   Obj.DbiStream->VerHeader = DS.getDbiVersion();
-  if (opts::pdb2yaml::DbiModuleInfo) {
+  if (opts::shared::DumpModules) {
     const auto &Modules = DS.modules();
     for (uint32_t I = 0; I < Modules.getModuleCount(); ++I) {
       DbiModuleDescriptor MI = Modules.getModuleDescriptor(I);
@@ -218,7 +205,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
 
       DMI.Mod = MI.getModuleName();
       DMI.Obj = MI.getObjFileName();
-      if (opts::pdb2yaml::DbiModuleSourceFileInfo) {
+      if (opts::shared::DumpModuleFiles) {
         auto Files = Modules.source_files(I);
         DMI.SourceFiles.assign(Files.begin(), Files.end());
       }
@@ -238,13 +225,17 @@ Error YAMLOutputStyle::dumpDbiStream() {
       auto ExpectedST = File.getStringTable();
       if (!ExpectedST)
         return ExpectedST.takeError();
-      if (opts::pdb2yaml::DbiModuleSourceLineInfo &&
+      if (!opts::shared::DumpModuleSubsections.empty() &&
           ModS.hasDebugSubsections()) {
         auto ExpectedChecksums = ModS.findChecksumsSubsection();
         if (!ExpectedChecksums)
           return ExpectedChecksums.takeError();
 
         for (const auto &SS : ModS.subsections()) {
+          opts::ModuleSubsection OptionKind = convertSubsectionKind(SS.kind());
+          if (!opts::checkModuleSubsection(OptionKind))
+            continue;
+
           auto Converted =
               CodeViewYAML::YAMLDebugSubsection::fromCodeViewSubection(
                   ExpectedST->getStringTable(), *ExpectedChecksums, SS);
@@ -254,7 +245,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
         }
       }
 
-      if (opts::pdb2yaml::DbiModuleSyms) {
+      if (opts::shared::DumpModuleSyms) {
         DMI.Modi.emplace();
 
         DMI.Modi->Signature = ModS.signature();

Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp Thu Jun  8 18:39:33 2017
@@ -269,7 +269,6 @@ namespace raw {
 
 cl::OptionCategory MsfOptions("MSF Container Options");
 cl::OptionCategory TypeOptions("Type Record Options");
-cl::OptionCategory FileOptions("Module & File Options");
 cl::OptionCategory SymbolOptions("Symbol Options");
 cl::OptionCategory MiscOptions("Miscellaneous Options");
 
@@ -323,20 +322,9 @@ cl::opt<bool> DumpIpiRecordBytes(
     cl::desc("dump CodeView type record raw bytes from IPI stream"),
     cl::cat(TypeOptions), cl::sub(RawSubcommand));
 
-// MODULE & FILE OPTIONS
-cl::opt<bool> DumpModules("modules", cl::desc("dump compiland information"),
-                          cl::cat(FileOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpModuleFiles("module-files", cl::desc("dump file information"),
-                              cl::cat(FileOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpLineInfo("line-info",
-                           cl::desc("dump file and line information"),
-                           cl::cat(FileOptions), cl::sub(RawSubcommand));
-
 // SYMBOL OPTIONS
 cl::opt<bool> DumpGlobals("globals", cl::desc("dump globals stream data"),
                           cl::cat(SymbolOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpModuleSyms("module-syms", cl::desc("dump module symbols"),
-                             cl::cat(SymbolOptions), cl::sub(RawSubcommand));
 cl::opt<bool> DumpPublics("publics", cl::desc("dump Publics stream data"),
                           cl::cat(SymbolOptions), cl::sub(RawSubcommand));
 cl::opt<bool>
@@ -381,11 +369,9 @@ namespace pdb2yaml {
 cl::opt<bool> All("all",
                   cl::desc("Dump everything we know how to dump."),
                   cl::sub(PdbToYamlSubcommand), cl::init(false));
-cl::opt<bool>
-    NoFileHeaders("no-file-headers",
-                  cl::desc("Do not dump MSF file headers (you will not be able "
-                           "to generate a fresh PDB from the resulting YAML)"),
-                  cl::sub(PdbToYamlSubcommand), cl::init(false));
+cl::opt<bool> NoFileHeaders("no-file-headers",
+                            cl::desc("Do not dump MSF file headers"),
+                            cl::sub(PdbToYamlSubcommand), cl::init(false));
 cl::opt<bool> Minimal("minimal",
                       cl::desc("Don't write fields with default values"),
                       cl::sub(PdbToYamlSubcommand), cl::init(false));
@@ -406,29 +392,8 @@ cl::opt<bool> StringTable("string-table"
                           cl::sub(PdbToYamlSubcommand), cl::init(false));
 
 cl::opt<bool> DbiStream("dbi-stream",
-                        cl::desc("Dump the DBI Stream (Stream 2)"),
+                        cl::desc("Dump the DBI Stream Headers (Stream 2)"),
                         cl::sub(PdbToYamlSubcommand), cl::init(false));
-cl::opt<bool>
-    DbiModuleInfo("dbi-module-info",
-                  cl::desc("Dump DBI Module Information (implies -dbi-stream)"),
-                  cl::sub(PdbToYamlSubcommand), cl::init(false));
-
-cl::opt<bool> DbiModuleSyms(
-    "dbi-module-syms",
-    cl::desc("Dump DBI Module Information (implies -dbi-module-info)"),
-    cl::sub(PdbToYamlSubcommand), cl::init(false));
-
-cl::opt<bool> DbiModuleSourceFileInfo(
-    "dbi-module-source-info",
-    cl::desc(
-        "Dump DBI Module Source File Information (implies -dbi-module-info)"),
-    cl::sub(PdbToYamlSubcommand), cl::init(false));
-
-cl::opt<bool>
-    DbiModuleSourceLineInfo("dbi-module-lines",
-                            cl::desc("Dump DBI Module Source Line Information "
-                                     "(implies -dbi-module-source-info)"),
-                            cl::sub(PdbToYamlSubcommand), cl::init(false));
 
 cl::opt<bool> TpiStream("tpi-stream",
                         cl::desc("Dump the TPI Stream (Stream 3)"),
@@ -443,6 +408,39 @@ cl::list<std::string> InputFilename(cl::
                                     cl::sub(PdbToYamlSubcommand));
 }
 
+namespace shared {
+cl::OptionCategory FileOptions("Module & File Options");
+
+// MODULE & FILE OPTIONS
+cl::opt<bool> DumpModules("modules", cl::desc("dump compiland information"),
+                          cl::cat(FileOptions), cl::sub(RawSubcommand),
+                          cl::sub(PdbToYamlSubcommand));
+cl::opt<bool> DumpModuleFiles("module-files", cl::desc("dump file information"),
+                              cl::cat(FileOptions), cl::sub(RawSubcommand),
+                              cl::sub(PdbToYamlSubcommand));
+cl::list<ModuleSubsection> DumpModuleSubsections(
+    "subsections", cl::ZeroOrMore, cl::CommaSeparated,
+    cl::desc("dump subsections from each module's debug stream"),
+    cl::values(
+        clEnumValN(
+            ModuleSubsection::CrossScopeExports, "cme",
+            "Cross module exports (DEBUG_S_CROSSSCOPEEXPORTS subsection)"),
+        clEnumValN(
+            ModuleSubsection::CrossScopeImports, "cmi",
+            "Cross module imports (DEBUG_S_CROSSSCOPEIMPORTS subsection)"),
+        clEnumValN(ModuleSubsection::FileChecksums, "fc",
+                   "File checksums (DEBUG_S_CHECKSUMS subsection)"),
+        clEnumValN(ModuleSubsection::InlineeLines, "ilines",
+                   "Inlinee lines (DEBUG_S_INLINEELINES subsection)"),
+        clEnumValN(ModuleSubsection::Lines, "lines",
+                   "Lines (DEBUG_S_LINES subsection)"),
+        clEnumValN(ModuleSubsection::All, "all", "All known subsections")),
+    cl::cat(FileOptions), cl::sub(RawSubcommand), cl::sub(PdbToYamlSubcommand));
+cl::opt<bool> DumpModuleSyms("module-syms", cl::desc("dump module symbols"),
+                             cl::cat(FileOptions), cl::sub(RawSubcommand),
+                             cl::sub(PdbToYamlSubcommand));
+} // namespace shared
+
 namespace analyze {
 cl::opt<bool> StringTable("hash-collisions", cl::desc("Find hash collisions"),
                           cl::sub(AnalyzeSubcommand), cl::init(false));
@@ -463,6 +461,13 @@ cl::opt<std::string>
 
 static ExitOnError ExitOnErr;
 
+bool opts::checkModuleSubsection(opts::ModuleSubsection MS) {
+  return any_of(opts::shared::DumpModuleSubsections,
+                [=](opts::ModuleSubsection M) {
+                  return M == MS || M == opts::ModuleSubsection::All;
+                });
+}
+
 static void yamlToPdb(StringRef Path) {
   BumpPtrAllocator Allocator;
   ErrorOr<std::unique_ptr<MemoryBuffer>> ErrorOrBuffer =
@@ -879,12 +884,29 @@ int main(int argc_, const char *argv_[])
     }
   }
 
+  if ((opts::RawSubcommand && opts::raw::RawAll) ||
+      (opts::PdbToYamlSubcommand && opts::pdb2yaml::All)) {
+    opts::shared::DumpModules = true;
+    opts::shared::DumpModuleFiles = true;
+    opts::shared::DumpModuleSyms = true;
+    opts::shared::DumpModuleSubsections.push_back(opts::ModuleSubsection::All);
+    if (llvm::is_contained(opts::shared::DumpModuleSubsections,
+                           opts::ModuleSubsection::All)) {
+      opts::shared::DumpModuleSubsections.reset();
+      opts::shared::DumpModuleSubsections.push_back(
+          opts::ModuleSubsection::All);
+    }
+  }
+
+  if (opts::shared::DumpModuleSyms || opts::shared::DumpModuleFiles)
+    opts::shared::DumpModules = true;
+
+  if (opts::shared::DumpModules)
+    opts::pdb2yaml::DbiStream = true;
+
   if (opts::RawSubcommand) {
     if (opts::raw::RawAll) {
       opts::raw::DumpHeaders = true;
-      opts::raw::DumpModules = true;
-      opts::raw::DumpModuleFiles = true;
-      opts::raw::DumpModuleSyms = true;
       opts::raw::DumpGlobals = true;
       opts::raw::DumpPublics = true;
       opts::raw::DumpSectionHeaders = true;
@@ -896,7 +918,6 @@ int main(int argc_, const char *argv_[])
       opts::raw::DumpIpiRecords = true;
       opts::raw::DumpSectionMap = true;
       opts::raw::DumpSectionContribs = true;
-      opts::raw::DumpLineInfo = true;
       opts::raw::DumpFpo = true;
       opts::raw::DumpStringTable = true;
     }
@@ -908,6 +929,17 @@ int main(int argc_, const char *argv_[])
       exit(1);
     }
   }
+  if (opts::PdbToYamlSubcommand) {
+    if (opts::pdb2yaml::All) {
+      opts::pdb2yaml::StreamMetadata = true;
+      opts::pdb2yaml::StreamDirectory = true;
+      opts::pdb2yaml::PdbStream = true;
+      opts::pdb2yaml::StringTable = true;
+      opts::pdb2yaml::DbiStream = true;
+      opts::pdb2yaml::TpiStream = true;
+      opts::pdb2yaml::IpiStream = true;
+    }
+  }
 
   llvm::sys::InitializeCOMRAII COM(llvm::sys::COMThreadingMode::MultiThreaded);
 

Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h?rev=305032&r1=305031&r2=305032&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h Thu Jun  8 18:39:33 2017
@@ -27,6 +27,25 @@ uint32_t getTypeLength(const PDBSymbolDa
 
 namespace opts {
 
+enum class ModuleSubsection {
+  Unknown,
+  Lines,
+  FileChecksums,
+  InlineeLines,
+  CrossScopeImports,
+  CrossScopeExports,
+  All
+};
+
+bool checkModuleSubsection(ModuleSubsection Kind);
+
+template <typename... Ts>
+bool checkModuleSubsection(ModuleSubsection K1, ModuleSubsection K2,
+                           Ts &&... Rest) {
+  return checkModuleSubsection(K1) ||
+         checkModuleSubsection(K2, std::forward<Ts>(Rest)...);
+}
+
 namespace pretty {
 
 enum class ClassDefinitionFormat { None, Layout, All };
@@ -96,13 +115,8 @@ extern llvm::cl::opt<bool> DumpTpiRecord
 extern llvm::cl::opt<bool> DumpTpiRecords;
 extern llvm::cl::opt<bool> DumpIpiRecords;
 extern llvm::cl::opt<bool> DumpIpiRecordBytes;
-extern llvm::cl::opt<bool> DumpModules;
-extern llvm::cl::opt<bool> DumpModuleFiles;
-extern llvm::cl::opt<bool> DumpModuleLines;
-extern llvm::cl::opt<bool> DumpModuleSyms;
 extern llvm::cl::opt<bool> DumpPublics;
 extern llvm::cl::opt<bool> DumpSectionContribs;
-extern llvm::cl::opt<bool> DumpLineInfo;
 extern llvm::cl::opt<bool> DumpSectionMap;
 extern llvm::cl::opt<bool> DumpSymRecordBytes;
 extern llvm::cl::opt<bool> DumpSectionHeaders;
@@ -123,14 +137,17 @@ extern llvm::cl::opt<bool> StreamDirecto
 extern llvm::cl::opt<bool> StringTable;
 extern llvm::cl::opt<bool> PdbStream;
 extern llvm::cl::opt<bool> DbiStream;
-extern llvm::cl::opt<bool> DbiModuleInfo;
-extern llvm::cl::opt<bool> DbiModuleSyms;
-extern llvm::cl::opt<bool> DbiModuleSourceFileInfo;
-extern llvm::cl::opt<bool> DbiModuleSourceLineInfo;
 extern llvm::cl::opt<bool> TpiStream;
 extern llvm::cl::opt<bool> IpiStream;
 extern llvm::cl::list<std::string> InputFilename;
 }
+
+namespace shared {
+extern llvm::cl::opt<bool> DumpModules;
+extern llvm::cl::opt<bool> DumpModuleFiles;
+extern llvm::cl::list<ModuleSubsection> DumpModuleSubsections;
+extern llvm::cl::opt<bool> DumpModuleSyms;
+} // namespace shared
 }
 
 #endif




More information about the llvm-commits mailing list