[llvm-pdbdump] Add some tests for llvm-pdbdump.
authorZachary Turner <zturner@google.com>
Fri, 20 Feb 2015 23:05:57 +0000 (23:05 +0000)
committerZachary Turner <zturner@google.com>
Fri, 20 Feb 2015 23:05:57 +0000 (23:05 +0000)
This adds only a very basic set of tests that dump a few
functions and object files.

Differential Revision: http://reviews.llvm.org/D7656
Reviewed By: David Blaikie

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230083 91177308-0d34-0410-b5e6-96231b3b80d8

test/DebugInfo/PDB/Inputs/empty.cpp [new file with mode: 0644]
test/DebugInfo/PDB/Inputs/empty.pdb [new file with mode: 0644]
test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp [new file with mode: 0644]
test/DebugInfo/PDB/Inputs/symbolformat.cpp [new file with mode: 0644]
test/DebugInfo/PDB/Inputs/symbolformat.pdb [new file with mode: 0644]
test/DebugInfo/PDB/lit.local.cfg [new file with mode: 0644]
test/DebugInfo/PDB/pdbdump-flags.test [new file with mode: 0644]
test/DebugInfo/PDB/pdbdump-symbol-format.test [new file with mode: 0644]
test/lit.site.cfg.in

diff --git a/test/DebugInfo/PDB/Inputs/empty.cpp b/test/DebugInfo/PDB/Inputs/empty.cpp
new file mode 100644 (file)
index 0000000..f27ea18
--- /dev/null
@@ -0,0 +1,7 @@
+// Build with "cl.exe /Zi empty.cpp /link /debug /nodefaultlib /entry:main"\r
+\r
+void *__purecall = 0;\r
+\r
+int main() {\r
+  return 42;\r
+}\r
diff --git a/test/DebugInfo/PDB/Inputs/empty.pdb b/test/DebugInfo/PDB/Inputs/empty.pdb
new file mode 100644 (file)
index 0000000..ae65c3a
Binary files /dev/null and b/test/DebugInfo/PDB/Inputs/empty.pdb differ
diff --git a/test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp b/test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp
new file mode 100644 (file)
index 0000000..3a72008
--- /dev/null
@@ -0,0 +1,6 @@
+// Compile with "cl /GR- /Zi /c /Ox /Oy symbolformat-fpo.cpp"\r
+// Refer to symbolformat.cpp for linking instructions.\r
+\r
+unsigned fpo_func(unsigned n) {\r
+  return n * 2;\r
+}\r
diff --git a/test/DebugInfo/PDB/Inputs/symbolformat.cpp b/test/DebugInfo/PDB/Inputs/symbolformat.cpp
new file mode 100644 (file)
index 0000000..86135a4
--- /dev/null
@@ -0,0 +1,24 @@
+// Compile with "cl /c /Zi /GR- symbolformat.cpp"\r
+// Compile symbolformat-fpo.cpp (see file for instructions)\r
+// Link with "link symbolformat.obj symbolformat-fpo.obj /debug /nodefaultlib\r
+//    /entry:main /out:symbolformat.exe"\r
+\r
+int __cdecl _purecall(void) { return 0; }\r
+\r
+struct A {\r
+  virtual void PureFunc() = 0 {}\r
+  virtual void VirtualFunc() {}\r
+  void RegularFunc() {}\r
+};\r
+\r
+struct B : public A {\r
+  void PureFunc() override {}\r
+};\r
+\r
+int main(int argc, char **argv) {\r
+  B b;\r
+  auto PureAddr = &B::PureFunc;\r
+  auto VirtualAddr = &A::PureFunc;\r
+  auto RegularAddr = &A::RegularFunc;\r
+  return 0;\r
+}\r
diff --git a/test/DebugInfo/PDB/Inputs/symbolformat.pdb b/test/DebugInfo/PDB/Inputs/symbolformat.pdb
new file mode 100644 (file)
index 0000000..3bbc7bb
Binary files /dev/null and b/test/DebugInfo/PDB/Inputs/symbolformat.pdb differ
diff --git a/test/DebugInfo/PDB/lit.local.cfg b/test/DebugInfo/PDB/lit.local.cfg
new file mode 100644 (file)
index 0000000..28a895f
--- /dev/null
@@ -0,0 +1 @@
+config.unsupported = not config.have_dia_sdk
diff --git a/test/DebugInfo/PDB/pdbdump-flags.test b/test/DebugInfo/PDB/pdbdump-flags.test
new file mode 100644 (file)
index 0000000..fd14e8a
--- /dev/null
@@ -0,0 +1,14 @@
+; RUN: llvm-pdbdump %p/Inputs/empty.pdb | FileCheck %s -check-prefix SUMMARY_CHECK
+; RUN: llvm-pdbdump -functions %p/Inputs/empty.pdb | FileCheck %s -check-prefix MAIN_CHECK
+
+; Check PDB file summary information
+; SUMMARY_CHECK: empty.pdb
+; SUMMARY_CHECK: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0}
+; SUMMARY_CHECK: Attributes: HasPrivateSymbols
+
+; Check that running with only -compilands doesn't include unwanted symbol types
+; MAIN_CHECK: (EBP) int32_t __cdecl main()
+; MAIN_CHECK-NOT: vtbl:
+; MAIN_CHECK-NOT: enum:
+; MAIN_CHECK-NOT: class:
+; MAIN_CHECK-NOT: data:
diff --git a/test/DebugInfo/PDB/pdbdump-symbol-format.test b/test/DebugInfo/PDB/pdbdump-symbol-format.test
new file mode 100644 (file)
index 0000000..64753df
--- /dev/null
@@ -0,0 +1,14 @@
+; RUN: llvm-pdbdump -all -hidden -group-by=compiland %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=FORMAT %s
+
+; The format here is func [0x<rva_start>+<prologue_length> - 0x<rva_end>-<epilogue_length>]
+; FORMAT: test\DebugInfo\PDB\Inputs\symbolformat-fpo.obj
+; FORMAT-DAG: func [0x001130+0 - 0x001137-1] (VFrame) uint32_t __cdecl fpo_func(uint32_t)
+; FORMAT: d:\src\llvm\test\DebugInfo\PDB\Inputs\symbolformat.obj
+; FORMAT-DAG: func [0x001060+3 - 0x001067-2] (EBP) int32_t __cdecl _purecall()
+; FORMAT-DAG: func [0x001070+6 - 0x001099-4] (EBP) int32_t __cdecl main(int32_t, char**)
+; FORMAT-DAG: func [0x0010b0+7 - 0x0010c7-4] (EBP) void __thiscall A::A()
+; FORMAT-DAG: func [0x0010d0+7 - 0x0010ef-4] (EBP) void __thiscall B::B()
+; FORMAT-DAG: thunk [0x000010f6 - 0x000010fa] (Pcode) B::`vcall'{0}'
+; FORMAT-DAG: func [0x001100+7 - 0x00110b-4] (EBP) virtual void __thiscall B::PureFunc()
+; FORMAT-DAG: func [0x001110+7 - 0x00111b-4] (EBP) void __thiscall A::RegularFunc()
+; FORMAT-DAG: func [0x001120+7 - 0x00112b-4] (EBP) virtual void __thiscall A::VirtualFunc()
index 9336c76369a7bb48f8279d71f9664838213b86fc..f964a28551f55e6c47b2e0cd9f6a79434422fe58 100644 (file)
@@ -31,6 +31,7 @@ config.host_ldflags = "@HOST_LDFLAGS@"
 config.llvm_use_intel_jitevents = "@LLVM_USE_INTEL_JITEVENTS@"
 config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
 config.have_zlib = "@HAVE_LIBZ@"
+config.have_dia_sdk = "@HAVE_DIA_SDK@"
 config.enable_ffi = "@LLVM_ENABLE_FFI@"
 
 # Support substitution of the tools_dir with user parameters. This is