diff options
Diffstat (limited to 'test/DebugInfo/PDB')
-rw-r--r-- | test/DebugInfo/PDB/Inputs/empty.cpp | 7 | ||||
-rw-r--r-- | test/DebugInfo/PDB/Inputs/empty.pdb | bin | 0 -> 102400 bytes | |||
-rw-r--r-- | test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp | 6 | ||||
-rw-r--r-- | test/DebugInfo/PDB/Inputs/symbolformat.cpp | 53 | ||||
-rw-r--r-- | test/DebugInfo/PDB/Inputs/symbolformat.pdb | bin | 0 -> 143360 bytes | |||
-rw-r--r-- | test/DebugInfo/PDB/lit.local.cfg | 1 | ||||
-rw-r--r-- | test/DebugInfo/PDB/pdbdump-flags.test | 32 | ||||
-rw-r--r-- | test/DebugInfo/PDB/pdbdump-symbol-format.test | 49 |
8 files changed, 148 insertions, 0 deletions
diff --git a/test/DebugInfo/PDB/Inputs/empty.cpp b/test/DebugInfo/PDB/Inputs/empty.cpp new file mode 100644 index 0000000..6021aca --- /dev/null +++ b/test/DebugInfo/PDB/Inputs/empty.cpp @@ -0,0 +1,7 @@ +// Build with "cl.exe /Zi empty.cpp /link /debug /nodefaultlib /entry:main" + +void *__purecall = 0; + +int main() { + return 42; +} diff --git a/test/DebugInfo/PDB/Inputs/empty.pdb b/test/DebugInfo/PDB/Inputs/empty.pdb Binary files differnew file mode 100644 index 0000000..ae65c3a --- /dev/null +++ b/test/DebugInfo/PDB/Inputs/empty.pdb diff --git a/test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp b/test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp new file mode 100644 index 0000000..56a5b26 --- /dev/null +++ b/test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp @@ -0,0 +1,6 @@ +// Compile with "cl /GR- /Zi /c /Ox /Oy symbolformat-fpo.cpp" +// Refer to symbolformat.cpp for linking instructions. + +unsigned fpo_func(unsigned n) { + return n * 2; +} diff --git a/test/DebugInfo/PDB/Inputs/symbolformat.cpp b/test/DebugInfo/PDB/Inputs/symbolformat.cpp new file mode 100644 index 0000000..c069a35 --- /dev/null +++ b/test/DebugInfo/PDB/Inputs/symbolformat.cpp @@ -0,0 +1,53 @@ +// Compile with "cl /c /Zi /GR- symbolformat.cpp" +// Compile symbolformat-fpo.cpp (see file for instructions) +// Link with "link symbolformat.obj symbolformat-fpo.obj /debug /nodefaultlib +// /entry:main /out:symbolformat.exe" + +int __cdecl _purecall(void) { return 0; } + +enum TestEnum { + Value, + Value10 = 10 +}; + +enum class TestEnumClass { + Value, + Value10 = 10 +}; + +struct A { + virtual void PureFunc() = 0 {} + virtual void VirtualFunc() {} + void RegularFunc() {} +}; + +struct VirtualBase { +}; + +struct B : public A, protected virtual VirtualBase { + void PureFunc() override {} + + enum NestedEnum { + FirstVal, + SecondVal + }; + + typedef int NestedTypedef; + NestedEnum EnumVar; + NestedTypedef TypedefVar; +}; + +typedef int IntType; +typedef A ClassAType; + +int main(int argc, char **argv) { + B b; + auto PureAddr = &B::PureFunc; + auto VirtualAddr = &A::PureFunc; + auto RegularAddr = &A::RegularFunc; + TestEnum Enum = Value; + TestEnumClass EnumClass = TestEnumClass::Value10; + IntType Int = 12; + ClassAType *ClassA = &b; + return 0; +} diff --git a/test/DebugInfo/PDB/Inputs/symbolformat.pdb b/test/DebugInfo/PDB/Inputs/symbolformat.pdb Binary files differnew file mode 100644 index 0000000..183870a --- /dev/null +++ b/test/DebugInfo/PDB/Inputs/symbolformat.pdb diff --git a/test/DebugInfo/PDB/lit.local.cfg b/test/DebugInfo/PDB/lit.local.cfg new file mode 100644 index 0000000..28a895f --- /dev/null +++ b/test/DebugInfo/PDB/lit.local.cfg @@ -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 index 0000000..d8d38cb --- /dev/null +++ b/test/DebugInfo/PDB/pdbdump-flags.test @@ -0,0 +1,32 @@ +; RUN: llvm-pdbdump %p/Inputs/empty.pdb | FileCheck %s -check-prefix=NO_ARGS +; RUN: llvm-pdbdump -types %p/Inputs/empty.pdb | FileCheck %s -check-prefix=TYPES +; RUN: llvm-pdbdump -compilands %p/Inputs/empty.pdb | FileCheck %s -check-prefix=COMPILANDS +; RUN: llvm-pdbdump -types -compilands %p/Inputs/empty.pdb | FileCheck %s -check-prefix=BOTH + +; Check that neither symbols nor compilands are dumped when neither argument specified. +; NO_ARGS: empty.pdb +; NO_ARGS: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0} +; NO_ARGS: Attributes: HasPrivateSymbols +; NO_ARGS-NOT: Dumping compilands +; NO_ARGS-NOT: Dumping symbols + +; Check that only symbols are dumped when only -types is specified. +; TYPES: empty.pdb +; TYPES: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0} +; TYPES: Attributes: HasPrivateSymbols +; TYPES: Dumping types +; TYPES-NOT: Dumping compilands + +; Check that only compilands are dumped when only -compilands is specified. +; COMPILANDS: empty.pdb +; COMPILANDS: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0} +; COMPILANDS: Attributes: HasPrivateSymbols +; COMPILANDS-NOT: Dumping types +; COMPILANDS: Dumping compilands + +; Check that types and compilands are dumped when both arguments are specified. +; BOTH: empty.pdb +; BOTH: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0} +; BOTH: Attributes: HasPrivateSymbols +; BOTH: Dumping types +; BOTH: Dumping compilands diff --git a/test/DebugInfo/PDB/pdbdump-symbol-format.test b/test/DebugInfo/PDB/pdbdump-symbol-format.test new file mode 100644 index 0000000..1540e16 --- /dev/null +++ b/test/DebugInfo/PDB/pdbdump-symbol-format.test @@ -0,0 +1,49 @@ +; RUN: llvm-pdbdump -symbols %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=SYM_FORMAT %s +; RUN: llvm-pdbdump -types %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=TYPES_FORMAT %s +; RUN: llvm-pdbdump -types -class-definitions %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=FULL_CLASS %s + +; The format is func [0x<rva_start>+<prologue_length> - 0x<rva_end>-<epilogue_length>] +; SYM_FORMAT: symbolformat-fpo.obj +; SYM_FORMAT-DAG: func [0x001130+0 - 0x001137-1] (FPO) uint32_t __cdecl fpo_func(uint32_t n) +; SYM_FORMAT: symbolformat.obj +; SYM_FORMAT-DAG: func [0x001140+3 - 0x001147-2] (EBP) int32_t __cdecl _purecall() +; SYM_FORMAT-DAG: func [0x001150+6 - 0x0011b6-4] (EBP) int32_t __cdecl main(int32_t argc, char** argv) +; SYM_FORMAT-DAG: func [0x0010b0+7 - 0x0010c7-4] (EBP) void A::A() +; SYM_FORMAT-DAG: func [0x0011c0+7 - 0x0011f1-6] (EBP) void B::B() +; SYM_FORMAT-DAG: thunk [0x000010f6 - 0x000010fa] (Pcode) B::`vcall'{0}' +; SYM_FORMAT-DAG: func [0x001100+7 - 0x00110b-4] (EBP) virtual void B::PureFunc() +; SYM_FORMAT-DAG: func [0x001110+7 - 0x00111b-4] (EBP) void A::RegularFunc() +; SYM_FORMAT-DAG: func [0x001120+7 - 0x00112b-4] (EBP) virtual void A::VirtualFunc() + +; TYPES_FORMAT: Enums +; TYPES_FORMAT-DAG: enum TestEnum +; TYPES_FORMAT-DAG: enum TestEnumClass +; TYPES_FORMAT: Function Signatures +; TYPES_FORMAT-DAG: int32_t __cdecl () +; TYPES_FORMAT-DAG: int32_t __cdecl (int32_t, char**) +; TYPES_FORMAT-DAG: void (A::)() +; TYPES_FORMAT-DAG: void (B::)() +; TYPES_FORMAT-DAG: void (B::)(B&) +; TYPES_FORMAT-DAG: void (B::)() +; TYPES_FORMAT-DAG: B& (B::)(B&) +; TYPES_FORMAT-DAG: void (A::)(A&) +; TYPES_FORMAT-DAG: void (A::)() +; TYPES_FORMAT-DAG: A& (A::)(A&) +; TYPES_FORMAT: Typedefs +; TYPES_FORMAT-DAG: typedef int32_t IntType +; TYPES_FORMAT-DAG: typedef class A ClassAType +; TYPES_FORMAT: Classes +; TYPES_FORMAT-DAG: class A +; TYPES_FORMAT-DAG: class B + +; FULL_CLASS: Classes +; FULL_CLASS-DAG: class A { +; FULL_CLASS: public: +; FULL_CLASS: virtual void PureFunc() = 0 +; FULL_CLASS: virtual void VirtualFunc() +; FULL_CLASS: void RegularFunc() +; FULL_CLASS: } +; FULL_CLASS-DAG: class B { +; FULL_CLASS: public: +; FULL_CLASS: virtual void PureFunc() +; FULL_CLASS: }
\ No newline at end of file |