diff options
Diffstat (limited to 'test/DebugInfo')
37 files changed, 1127 insertions, 263 deletions
diff --git a/test/DebugInfo/COFF/asm.ll b/test/DebugInfo/COFF/asm.ll index 3d245e9d396d..a55eec2782a6 100644 --- a/test/DebugInfo/COFF/asm.ll +++ b/test/DebugInfo/COFF/asm.ll @@ -35,7 +35,7 @@ ; OBJ32: CodeViewDebugInfo [ ; OBJ32: Subsection [ ; OBJ32-NEXT: SubSectionType: Symbols (0xF1) -; OBJ32: ProcStart { +; OBJ32: {{.*}}Proc{{.*}}Sym { ; OBJ32: CodeSize: 0x6 ; OBJ32: DisplayName: f ; OBJ32: LinkageName: _f @@ -94,13 +94,13 @@ ; OBJ64: ] ; OBJ64: Subsection [ ; OBJ64-NEXT: SubSectionType: Symbols (0xF1) -; OBJ64: ProcStart { +; OBJ64: {{.*}}Proc{{.*}}Sym { ; OBJ64: CodeSize: 0xE ; OBJ64: DisplayName: f ; OBJ64: LinkageName: f ; OBJ64: } ; OBJ64-NEXT: ProcEnd { -; OBJ64-NEXT: } +; OBJ64: } ; OBJ64-NEXT: ] ; OBJ64: FunctionLineTable [ ; OBJ64-NEXT: Name: f diff --git a/test/DebugInfo/COFF/cpp-mangling.ll b/test/DebugInfo/COFF/cpp-mangling.ll index 8d1a136ec5fc..6f8b5a21ffba 100644 --- a/test/DebugInfo/COFF/cpp-mangling.ll +++ b/test/DebugInfo/COFF/cpp-mangling.ll @@ -12,12 +12,12 @@ ; fn_tmpl<int, foo::bar>(); ; } -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: FunctionType: bar ({{.*}}) ; CHECK: DisplayName: foo::bar{{$}} ; CHECK-NEXT: LinkageName: ?bar@foo@@YAHH@Z -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: FunctionType: fn_tmpl ({{.*}}) ; CHECK: DisplayName: foo::fn_tmpl<int,&foo::bar> ; CHECK-NEXT: LinkageName: ??$fn_tmpl@H$1?bar@foo@@YAHH@Z@foo@@YAXXZ diff --git a/test/DebugInfo/COFF/fp-stack.ll b/test/DebugInfo/COFF/fp-stack.ll index 4a30a49a3768..8061e2ee23d1 100644 --- a/test/DebugInfo/COFF/fp-stack.ll +++ b/test/DebugInfo/COFF/fp-stack.ll @@ -11,7 +11,7 @@ entry: } ; ASM: .cv_def_range Lfunc_begin0 Lfunc_end0, "A\021\200\000\000\000" -; OBJ: DefRangeRegister { +; OBJ: DefRangeRegisterSym { ; OBJ: Register: 128 ; OBJ: MayHaveNoName: 0 ; OBJ: LocalVariableAddrRange { diff --git a/test/DebugInfo/COFF/globals.ll b/test/DebugInfo/COFF/globals.ll index 0d1b9413e3d8..f5d6906e181e 100644 --- a/test/DebugInfo/COFF/globals.ll +++ b/test/DebugInfo/COFF/globals.ll @@ -81,13 +81,13 @@ ; OBJ: DisplayName: first ; OBJ: LinkageName: ?first@@3HA ; OBJ: } -; OBJ: ThreadLocalDataSym { +; OBJ: GlobalTLS { ; OBJ: DataOffset: ?middle@@3PEBHEB+0x0 ; OBJ: Type: const int* (0x1001) ; OBJ: DisplayName: middle ; OBJ: LinkageName: ?middle@@3PEBHEB ; OBJ: } -; OBJ: DataSym { +; OBJ: GlobalData { ; OBJ: Kind: S_GDATA32 (0x110D) ; OBJ: DataOffset: ?last@@3HA+0x0 ; OBJ: Type: int (0x74) @@ -101,7 +101,7 @@ ; OBJ: Magic: 0x4 ; OBJ: Subsection [ ; OBJ: SubSectionType: Symbols (0xF1) -; OBJ: DataSym { +; OBJ: GlobalData { ; OBJ: DataOffset: ?comdat@?$A@X@@2HB+0x0 ; OBJ: Type: const int (0x1000) ; OBJ: DisplayName: comdat diff --git a/test/DebugInfo/COFF/inlining-files.ll b/test/DebugInfo/COFF/inlining-files.ll index a6f5d281eb09..e3e616b618da 100644 --- a/test/DebugInfo/COFF/inlining-files.ll +++ b/test/DebugInfo/COFF/inlining-files.ll @@ -18,10 +18,10 @@ ; OBJ: Subsection [ ; OBJ: SubSectionType: Symbols (0xF1) -; OBJ: ProcStart { +; OBJ: {{.*}}Proc{{.*}}Sym { ; OBJ: DisplayName: f ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: PtrParent: 0x0 ; OBJ: PtrEnd: 0x0 ; OBJ: Inlinee: file_change (0x1002) diff --git a/test/DebugInfo/COFF/inlining-header.ll b/test/DebugInfo/COFF/inlining-header.ll index 0981825e0d3b..7e19f14716f0 100644 --- a/test/DebugInfo/COFF/inlining-header.ll +++ b/test/DebugInfo/COFF/inlining-header.ll @@ -63,7 +63,7 @@ ; OBJ: Subsection [ ; OBJ: SubSectionType: Symbols (0xF1) -; OBJ: ProcStart { +; OBJ: {{.*}}Proc{{.*}}Sym { ; OBJ: Kind: S_GPROC32_ID (0x1147) ; OBJ: FunctionType: main (0x1005) ; OBJ: CodeOffset: _main+0x0 @@ -74,8 +74,8 @@ ; OBJ: LinkageName: _main ; OBJ: } -; Previously, g's InlineSite referenced t.h, which was wasteful. -; OBJ: InlineSite { +; Previously, g's InlineSiteSym referenced t.h, which was wasteful. +; OBJ: InlineSiteSym { ; OBJ: Inlinee: g (0x1002) ; OBJ: BinaryAnnotations [ ; OBJ-NEXT: ChangeCodeOffsetAndLineOffset: {CodeOffset: 0x6, LineOffset: 1} @@ -85,7 +85,7 @@ ; OBJ-NEXT: ] ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: Inlinee: f (0x1003) ; OBJ: BinaryAnnotations [ ; OBJ-NEXT: ChangeCodeOffsetAndLineOffset: {CodeOffset: 0xD, LineOffset: 1} diff --git a/test/DebugInfo/COFF/inlining-levels.ll b/test/DebugInfo/COFF/inlining-levels.ll index 0c5c73c8fdbe..7f93dbb850a2 100644 --- a/test/DebugInfo/COFF/inlining-levels.ll +++ b/test/DebugInfo/COFF/inlining-levels.ll @@ -18,14 +18,14 @@ ; OBJ: Subsection [ ; OBJ: SubSectionType: Symbols (0xF1) -; OBJ: ProcStart { -; OBJ: InlineSite { +; OBJ: {{.*}}Proc{{.*}}Sym { +; OBJ: InlineSiteSym { ; OBJ: Inlinee: h (0x1002) ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: Inlinee: g (0x1003) ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: Inlinee: f (0x1004) ; OBJ: } ; OBJ: InlineSiteEnd { diff --git a/test/DebugInfo/COFF/inlining-same-name.ll b/test/DebugInfo/COFF/inlining-same-name.ll index 4a9c9924135d..3700b7060a7a 100644 --- a/test/DebugInfo/COFF/inlining-same-name.ll +++ b/test/DebugInfo/COFF/inlining-same-name.ll @@ -14,15 +14,15 @@ ; CHECK: CodeViewDebugInfo [ ; CHECK: Section: .debug$S ; CHECK: Subsection [ -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: DisplayName: main ; CHECK: } -; CHECK: InlineSite { +; CHECK: InlineSiteSym { ; CHECK: Inlinee: same_name (0x1002) ; CHECK: } ; CHECK: InlineSiteEnd { ; CHECK: } -; CHECK: InlineSite { +; CHECK: InlineSiteSym { ; CHECK: Inlinee: same_name (0x1002) ; CHECK: } ; CHECK: InlineSiteEnd { diff --git a/test/DebugInfo/COFF/inlining.ll b/test/DebugInfo/COFF/inlining.ll index 76b8f8c88ee2..ddfd5e056a1b 100644 --- a/test/DebugInfo/COFF/inlining.ll +++ b/test/DebugInfo/COFF/inlining.ll @@ -166,7 +166,7 @@ ; OBJ: ] ; OBJ: Subsection [ ; OBJ: SubSectionType: Symbols (0xF1) -; OBJ: ProcStart { +; OBJ: {{.*}}Proc{{.*}}Sym { ; OBJ: PtrParent: 0x0 ; OBJ: PtrEnd: 0x0 ; OBJ: PtrNext: 0x0 @@ -181,7 +181,7 @@ ; OBJ: DisplayName: baz ; OBJ: LinkageName: ?baz@@YAXXZ ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: PtrParent: 0x0 ; OBJ: PtrEnd: 0x0 ; OBJ: Inlinee: bar (0x1002) @@ -193,7 +193,7 @@ ; OBJ-NEXT: ChangeCodeLength: 0x7 ; OBJ: ] ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: PtrParent: 0x0 ; OBJ: PtrEnd: 0x0 ; OBJ: Inlinee: foo (0x1003) diff --git a/test/DebugInfo/COFF/int8-char-type.ll b/test/DebugInfo/COFF/int8-char-type.ll index 82972a452819..2e4395b4a599 100644 --- a/test/DebugInfo/COFF/int8-char-type.ll +++ b/test/DebugInfo/COFF/int8-char-type.ll @@ -5,7 +5,7 @@ ; DW_ATE_[un]signed encoding for all integer types if they don't have distinct ; integer types for characters types. This was PR30552. -; CHECK-LABEL: DataSym { +; CHECK-LABEL: GlobalData { ; CHECK-NEXT: Kind: S_GDATA32 (0x110D) ; CHECK-NEXT: DataOffset: ; CHECK-NEXT: Type: signed char (0x10) @@ -13,7 +13,7 @@ ; CHECK-NEXT: LinkageName: x ; CHECK-NEXT: } -; CHECK-LABEL: DataSym { +; CHECK-LABEL: GlobalData { ; CHECK-NEXT: Kind: S_GDATA32 (0x110D) ; CHECK-NEXT: DataOffset: ; CHECK-NEXT: Type: unsigned char (0x20) diff --git a/test/DebugInfo/COFF/local-constant.ll b/test/DebugInfo/COFF/local-constant.ll index bf8ba8446a6d..c99dd32e22e4 100644 --- a/test/DebugInfo/COFF/local-constant.ll +++ b/test/DebugInfo/COFF/local-constant.ll @@ -11,10 +11,11 @@ ; FIXME: Find a way to describe variables optimized to constants. -; OBJ: ProcStart { +; OBJ: {{.*}}Proc{{.*}}Sym { ; OBJ: DisplayName: constant_var ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { +; OBJ-NEXT: Kind: ; OBJ-NEXT: Type: int (0x74) ; OBJ-NEXT: Flags [ (0x100) ; OBJ-NEXT: IsOptimizedOut (0x100) diff --git a/test/DebugInfo/COFF/local-variable-gap.ll b/test/DebugInfo/COFF/local-variable-gap.ll index a2d05eaa03e4..ab38bbd8c13f 100644 --- a/test/DebugInfo/COFF/local-variable-gap.ll +++ b/test/DebugInfo/COFF/local-variable-gap.ll @@ -66,12 +66,13 @@ ; ASM: .short 2 # Record length ; ASM: .short 4431 # Record kind: S_PROC_ID_END -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: VarName: p ; OBJ: } -; OBJ-NOT: Local { -; OBJ: DefRangeRegister { +; OBJ-NOT: LocalSym { +; OBJ: DefRangeRegisterSym { +; OBJ-NEXT: Kind: ; OBJ-NEXT: Register: 23 ; OBJ-NEXT: MayHaveNoName: 0 ; OBJ-NEXT: LocalVariableAddrRange { diff --git a/test/DebugInfo/COFF/local-variables.ll b/test/DebugInfo/COFF/local-variables.ll index 249b6e1103db..f7087f76f4c1 100644 --- a/test/DebugInfo/COFF/local-variables.ll +++ b/test/DebugInfo/COFF/local-variables.ll @@ -99,18 +99,18 @@ ; OBJ: Subsection [ ; OBJ: SubSectionType: Symbols (0xF1) -; OBJ: ProcStart { +; OBJ: {{.*}}Proc{{.*}}Sym { ; OBJ: DisplayName: f ; OBJ: LinkageName: f ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x1) ; OBJ: IsParameter (0x1) ; OBJ: ] ; OBJ: VarName: param ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 335 ; OBJ: HasSpilledUDTMember: No ; OBJ: OffsetInParent: 0 @@ -121,13 +121,13 @@ ; OBJ: Range: 0x4F ; OBJ: } ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x0) ; OBJ: ] ; OBJ: VarName: a ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 335 ; OBJ: HasSpilledUDTMember: No ; OBJ: OffsetInParent: 0 @@ -138,13 +138,13 @@ ; OBJ: Range: 0x21 ; OBJ: } ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x0) ; OBJ: ] ; OBJ: VarName: b ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 335 ; OBJ: HasSpilledUDTMember: No ; OBJ: OffsetInParent: 0 @@ -155,7 +155,7 @@ ; OBJ: Range: 0x1F ; OBJ: } ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: PtrParent: 0x0 ; OBJ: PtrEnd: 0x0 ; OBJ: Inlinee: will_be_inlined (0x1002) @@ -166,13 +166,13 @@ ; OBJ: ChangeCodeLength: 0xC ; OBJ: ] ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x0) ; OBJ: ] ; OBJ: VarName: v ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 335 ; OBJ: HasSpilledUDTMember: No ; OBJ: OffsetInParent: 0 @@ -185,7 +185,7 @@ ; OBJ: } ; OBJ: InlineSiteEnd { ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: PtrParent: 0x0 ; OBJ: PtrEnd: 0x0 ; OBJ: Inlinee: will_be_inlined (0x1002) @@ -196,13 +196,13 @@ ; OBJ: ChangeCodeLength: 0xA ; OBJ: ] ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x0) ; OBJ: ] ; OBJ: VarName: v ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 335 ; OBJ: HasSpilledUDTMember: No ; OBJ: OffsetInParent: 0 diff --git a/test/DebugInfo/COFF/long-name.ll b/test/DebugInfo/COFF/long-name.ll index 998d77f7ca06..65bd4c16f750 100644 --- a/test/DebugInfo/COFF/long-name.ll +++ b/test/DebugInfo/COFF/long-name.ll @@ -1,6 +1,6 @@ ; RUN: llc < %s -filetype=obj | llvm-readobj -codeview | FileCheck %s -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: Kind: S_GPROC32_ID (0x1147) ; CHECK: FunctionType: {{A+}} (0x1002) ; CHECK: CodeOffset: f+0x0 diff --git a/test/DebugInfo/COFF/multifile.ll b/test/DebugInfo/COFF/multifile.ll index 5e53fa57acc4..8af99a6063e6 100644 --- a/test/DebugInfo/COFF/multifile.ll +++ b/test/DebugInfo/COFF/multifile.ll @@ -43,13 +43,13 @@ ; OBJ32: ] ; OBJ32: Subsection [ ; OBJ32-NEXT: SubSectionType: Symbols (0xF1) -; OBJ32: ProcStart { +; OBJ32: {{.*}}Proc{{.*}}Sym { ; OBJ32: CodeSize: 0x10 ; OBJ32: DisplayName: f ; OBJ32: LinkageName: _f ; OBJ32: } ; OBJ32-NEXT: ProcEnd { -; OBJ32-NEXT: } +; OBJ32: } ; OBJ32-NEXT: ] ; OBJ32: FunctionLineTable [ ; OBJ32-NEXT: Name: _f @@ -115,13 +115,13 @@ ; OBJ64: ] ; OBJ64: Subsection [ ; OBJ64-NEXT: SubSectionType: Symbols (0xF1) -; OBJ64: ProcStart { +; OBJ64: {{.*}}Proc{{.*}}Sym { ; OBJ64: CodeSize: 0x18 ; OBJ64: DisplayName: f ; OBJ64: LinkageName: f ; OBJ64: } ; OBJ64-NEXT: ProcEnd { -; OBJ64-NEXT: } +; OBJ64: } ; OBJ64-NEXT: ] ; OBJ64: FunctionLineTable [ ; OBJ64-NEXT: Name: f diff --git a/test/DebugInfo/COFF/multifunction.ll b/test/DebugInfo/COFF/multifunction.ll index a6290e8f021d..87db2a20eaa6 100644 --- a/test/DebugInfo/COFF/multifunction.ll +++ b/test/DebugInfo/COFF/multifunction.ll @@ -145,7 +145,7 @@ ; OBJ32: ] ; OBJ32: Subsection [ ; OBJ32-NEXT: SubSectionType: Symbols (0xF1) -; OBJ32: ProcStart { +; OBJ32: {{.*}}Proc{{.*}}Sym { ; OBJ32: Kind: S_LPROC32_ID (0x1146) ; OBJ32: CodeSize: 0x6 ; OBJ32: DisplayName: x @@ -159,7 +159,7 @@ ; OBJ32: ] ; OBJ32: Subsection [ ; OBJ32-NEXT: SubSectionType: Symbols (0xF1) -; OBJ32: ProcStart { +; OBJ32: {{.*}}Proc{{.*}}Sym { ; OBJ32: Kind: S_GPROC32_ID (0x1147) ; OBJ32: CodeSize: 0x6 ; OBJ32: DisplayName: y @@ -173,7 +173,7 @@ ; OBJ32: ] ; OBJ32: Subsection [ ; OBJ32-NEXT: SubSectionType: Symbols (0xF1) -; OBJ32: ProcStart { +; OBJ32: {{.*}}Proc{{.*}}Sym { ; OBJ32: Kind: S_GPROC32_ID (0x1147) ; OBJ32: CodeSize: 0x10 ; OBJ32: DisplayName: f @@ -419,7 +419,7 @@ ; OBJ64-NEXT: ] ; OBJ64: Subsection [ ; OBJ64-NEXT: SubSectionType: Symbols (0xF1) -; OBJ64: ProcStart { +; OBJ64: {{.*}}Proc{{.*}}Sym { ; OBJ64: Kind: S_LPROC32_ID (0x1146) ; OBJ64: CodeSize: 0xE ; OBJ64: DisplayName: x @@ -433,7 +433,7 @@ ; OBJ64: ] ; OBJ64: Subsection [ ; OBJ64-NEXT: SubSectionType: Symbols (0xF1) -; OBJ64: ProcStart { +; OBJ64: {{.*}}Proc{{.*}}Sym { ; OBJ64: Kind: S_GPROC32_ID (0x1147) ; OBJ64: CodeSize: 0xE ; OBJ64: DisplayName: y @@ -447,7 +447,7 @@ ; OBJ64: ] ; OBJ64: Subsection [ ; OBJ64-NEXT: SubSectionType: Symbols (0xF1) -; OBJ64: ProcStart { +; OBJ64: {{.*}}Proc{{.*}}Sym { ; OBJ64: Kind: S_GPROC32_ID (0x1147) ; OBJ64: CodeSize: 0x18 ; OBJ64: DisplayName: f diff --git a/test/DebugInfo/COFF/pieces.ll b/test/DebugInfo/COFF/pieces.ll index 60330e057726..098f2ae62f0b 100644 --- a/test/DebugInfo/COFF/pieces.ll +++ b/test/DebugInfo/COFF/pieces.ll @@ -105,21 +105,21 @@ ; ASM: .cv_def_range [[oy_start]] [[oy_end]], "C\021\027\000\000\000\004\000\000\000" -; OBJ-LABEL: ProcStart { +; OBJ-LABEL: {{.*}}Proc{{.*}}Sym { ; OBJ: Kind: S_GPROC32_ID (0x1147) ; OBJ: DisplayName: loop_csr ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: VarName: o ; OBJ: } -; OBJ: DefRangeSubfieldRegister { +; OBJ: DefRangeSubfieldRegisterSym { ; OBJ: Register: 24 ; OBJ: MayHaveNoName: 0 ; OBJ: OffsetInParent: 0 ; OBJ: LocalVariableAddrRange { ; OBJ: } ; OBJ: } -; OBJ: DefRangeSubfieldRegister { +; OBJ: DefRangeSubfieldRegisterSym { ; OBJ: Register: 23 ; OBJ: MayHaveNoName: 0 ; OBJ: OffsetInParent: 4 @@ -135,14 +135,14 @@ ; ASM: .asciz "o" ; ASM: .cv_def_range .Lfunc_begin1 .Lfunc_end1, "C\021\022\000\000\000\004\000\000\000" -; OBJ-LABEL: ProcStart { +; OBJ-LABEL: {{.*}}Proc{{.*}}Sym { ; OBJ: Kind: S_GPROC32_ID (0x1147) ; OBJ: DisplayName: pad_right ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: VarName: o ; OBJ: } -; OBJ: DefRangeSubfieldRegister { +; OBJ: DefRangeSubfieldRegisterSym { ; OBJ: Register: 18 ; OBJ: MayHaveNoName: 0 ; OBJ: OffsetInParent: 4 @@ -158,14 +158,14 @@ ; ASM: .asciz "o" ; ASM: .cv_def_range .Lfunc_begin2 .Lfunc_end2, "C\021\022\000\000\000\000\000\000\000" -; OBJ-LABEL: ProcStart { +; OBJ-LABEL: {{.*}}Proc{{.*}}Sym { ; OBJ: Kind: S_GPROC32_ID (0x1147) ; OBJ: DisplayName: pad_left ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: VarName: o ; OBJ: } -; OBJ: DefRangeSubfieldRegister { +; OBJ: DefRangeSubfieldRegisterSym { ; OBJ: Register: 18 ; OBJ: MayHaveNoName: 0 ; OBJ: OffsetInParent: 0 @@ -185,17 +185,17 @@ ; ASM: .asciz "p" ; ASM: .cv_def_range [[p_start]] .Lfunc_end3, "C\021\021\000\000\000\004\000\000\000" -; OBJ-LABEL: ProcStart { +; OBJ-LABEL: {{.*}}Proc{{.*}}Sym { ; OBJ: Kind: S_GPROC32_ID (0x1147) ; OBJ: DisplayName: nested ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: VarName: o ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: VarName: p ; OBJ: } -; OBJ: DefRangeSubfieldRegister { +; OBJ: DefRangeSubfieldRegisterSym { ; OBJ: Register: 17 ; OBJ: MayHaveNoName: 0 ; OBJ: OffsetInParent: 4 @@ -212,14 +212,14 @@ ; ASM: .asciz "o" ; ASM: .cv_def_range [[spill_o_x_start]] [[spill_o_x_end]], "E\021O\001A\000$\000\000\000" -; OBJ-LABEL: ProcStart { +; OBJ-LABEL: {{.*}}Proc{{.*}}Sym { ; OBJ: Kind: S_GPROC32_ID (0x1147) ; OBJ: DisplayName: bitpiece_spill ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: VarName: o ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 335 ; OBJ: HasSpilledUDTMember: Yes ; OBJ: OffsetInParent: 4 diff --git a/test/DebugInfo/COFF/register-variables.ll b/test/DebugInfo/COFF/register-variables.ll index d0ca5ca2afad..f8cd5c4fc3c1 100644 --- a/test/DebugInfo/COFF/register-variables.ll +++ b/test/DebugInfo/COFF/register-variables.ll @@ -81,17 +81,17 @@ ; OBJ: Subsection [ ; OBJ: SubSectionType: Symbols (0xF1) -; OBJ: ProcStart { +; OBJ: {{.*}}Proc{{.*}}Sym { ; OBJ: DisplayName: f ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x1) ; OBJ: IsParameter (0x1) ; OBJ: ] ; OBJ: VarName: p ; OBJ: } -; OBJ: DefRangeRegister { +; OBJ: DefRangeRegisterSym { ; OBJ: Register: 18 ; OBJ: LocalVariableAddrRange { ; OBJ: OffsetStart: .text+0x0 @@ -99,7 +99,7 @@ ; OBJ: Range: 0x7 ; OBJ: } ; OBJ: } -; OBJ: DefRangeRegister { +; OBJ: DefRangeRegisterSym { ; OBJ: Register: 23 ; OBJ: LocalVariableAddrRange { ; OBJ: OffsetStart: .text+0x7 @@ -107,13 +107,13 @@ ; OBJ: Range: 0x18 ; OBJ: } ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x0) ; OBJ: ] ; OBJ: VarName: a ; OBJ: } -; OBJ: DefRangeRegister { +; OBJ: DefRangeRegisterSym { ; OBJ: Register: 17 ; OBJ: LocalVariableAddrRange { ; OBJ: OffsetStart: .text+0xC @@ -121,13 +121,13 @@ ; OBJ: Range: 0x6 ; OBJ: } ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x0) ; OBJ: ] ; OBJ: VarName: c ; OBJ: } -; OBJ: DefRangeRegister { +; OBJ: DefRangeRegisterSym { ; OBJ: Register: 17 ; OBJ: LocalVariableAddrRange { ; OBJ: OffsetStart: .text+0xC @@ -135,13 +135,13 @@ ; OBJ: Range: 0x4 ; OBJ: } ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x0) ; OBJ: ] ; OBJ: VarName: b ; OBJ: } -; OBJ: DefRangeRegister { +; OBJ: DefRangeRegisterSym { ; OBJ: Register: 17 ; OBJ: MayHaveNoName: 0 ; OBJ: OffsetStart: .text+0x12 @@ -149,19 +149,19 @@ ; OBJ: Range: 0x6 ; OBJ: } ; OBJ: } -; OBJ: InlineSite { +; OBJ: InlineSiteSym { ; OBJ: PtrParent: 0x0 ; OBJ: PtrEnd: 0x0 ; OBJ: Inlinee: inlineinc (0x1002) ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x1) ; OBJ: IsParameter (0x1) ; OBJ: ] ; OBJ: VarName: a ; OBJ: } -; OBJ: DefRangeRegister { +; OBJ: DefRangeRegisterSym { ; OBJ: Register: 17 ; OBJ: LocalVariableAddrRange { ; OBJ: OffsetStart: .text+0xC @@ -169,13 +169,13 @@ ; OBJ: Range: 0x6 ; OBJ: } ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x0) ; OBJ: ] ; OBJ: VarName: b ; OBJ: } -; OBJ: DefRangeRegister { +; OBJ: DefRangeRegisterSym { ; OBJ: Register: 17 ; OBJ: LocalVariableAddrRange { ; OBJ: OffsetStart: .text+0x12 diff --git a/test/DebugInfo/COFF/simple.ll b/test/DebugInfo/COFF/simple.ll index 3a0b1c9fa7cd..50d121be6942 100644 --- a/test/DebugInfo/COFF/simple.ll +++ b/test/DebugInfo/COFF/simple.ll @@ -77,13 +77,13 @@ ; OBJ32-NEXT: ] ; OBJ32: Subsection [ ; OBJ32-NEXT: SubSectionType: Symbols (0xF1) -; OBJ32: ProcStart { +; OBJ32: {{.*}}Proc{{.*}}Sym { ; OBJ32: CodeSize: 0x6 ; OBJ32: DisplayName: f ; OBJ32: LinkageName: _f ; OBJ32: } ; OBJ32-NEXT: ProcEnd { -; OBJ32-NEXT: } +; OBJ32: } ; OBJ32-NEXT: ] ; OBJ32: FunctionLineTable [ ; OBJ32-NEXT: Name: _f @@ -174,13 +174,13 @@ ; OBJ64-NEXT: ] ; OBJ64: Subsection [ ; OBJ64-NEXT: SubSectionType: Symbols (0xF1) -; OBJ64: ProcStart { +; OBJ64: {{.*}}Proc{{.*}}Sym { ; OBJ64: CodeSize: 0xE ; OBJ64: DisplayName: f ; OBJ64: LinkageName: f ; OBJ64: } ; OBJ64-NEXT: ProcEnd { -; OBJ64-NEXT: } +; OBJ64: } ; OBJ64-NEXT: ] ; OBJ64: FunctionLineTable [ ; OBJ64-NEXT: Name: f diff --git a/test/DebugInfo/COFF/typedef.ll b/test/DebugInfo/COFF/typedef.ll index cf4e3df257de..9d841419c561 100644 --- a/test/DebugInfo/COFF/typedef.ll +++ b/test/DebugInfo/COFF/typedef.ll @@ -2,7 +2,7 @@ ; CHECK: CodeViewDebugInfo [ ; CHECK: Subsection [ -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: wchar_t (0x71) ; CHECK: Flags [ (0x0) ; CHECK: ] @@ -10,7 +10,7 @@ ; CHECK: } ; CHECK: Subsection [ ; CHECK: SubSectionType: Symbols (0xF1) -; CHECK: UDT { +; CHECK: UDTSym { ; CHECK: Type: wchar_t (0x71) ; CHECK: UDTName: XYZ ; CHECK: } diff --git a/test/DebugInfo/COFF/types-array.ll b/test/DebugInfo/COFF/types-array.ll index dca3884b1d09..1a4afa8bd219 100644 --- a/test/DebugInfo/COFF/types-array.ll +++ b/test/DebugInfo/COFF/types-array.ll @@ -46,7 +46,7 @@ ; CHECK: Magic: 0x4 ; CHECK: Subsection [ ; CHECK: SubSectionType: Symbols (0xF1) -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: PtrParent: 0x0 ; CHECK: PtrEnd: 0x0 ; CHECK: PtrNext: 0x0 @@ -61,13 +61,13 @@ ; CHECK: DisplayName: f ; CHECK: LinkageName: ?f@@YAXXZ ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: 0x1003 ; CHECK: Flags [ (0x0) ; CHECK: ] ; CHECK: VarName: a ; CHECK: } -; CHECK: DefRangeRegisterRel { +; CHECK: DefRangeRegisterRelSym { ; CHECK: BaseRegister: 22 ; CHECK: HasSpilledUDTMember: No ; CHECK: OffsetInParent: 0 diff --git a/test/DebugInfo/COFF/types-basic.ll b/test/DebugInfo/COFF/types-basic.ll index 4ead4bfc1c4c..4b9fcd864c27 100644 --- a/test/DebugInfo/COFF/types-basic.ll +++ b/test/DebugInfo/COFF/types-basic.ll @@ -218,7 +218,7 @@ ; CHECK: CodeViewDebugInfo [ ; CHECK: Subsection [ ; CHECK: SubSectionType: Symbols (0xF1) -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: DbgStart: 0x0 ; CHECK: DbgEnd: 0x0 ; CHECK: FunctionType: f (0x1002) @@ -229,68 +229,68 @@ ; CHECK: DisplayName: f ; CHECK: LinkageName: ?f@@YAXMN_J@Z ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: float (0x40) ; CHECK: Flags [ (0x1) ; CHECK: IsParameter (0x1) ; CHECK: ] ; CHECK: VarName: p1 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: double (0x41) ; CHECK: Flags [ (0x1) ; CHECK: IsParameter (0x1) ; CHECK: ] ; CHECK: VarName: p2 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: __int64 (0x13) ; CHECK: Flags [ (0x1) ; CHECK: IsParameter (0x1) ; CHECK: ] ; CHECK: VarName: p3 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: int (0x74) ; CHECK: VarName: v1 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: int* (0x674) ; CHECK: VarName: v2 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: const int* (0x1004) ; CHECK: VarName: v21 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: void* (0x603) ; CHECK: VarName: v3 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: int A::* (0x1006) ; CHECK: VarName: v4 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: void A::() A::* (0x100E) ; CHECK: VarName: v5 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: long (0x12) ; CHECK: VarName: l1 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: long (0x12) ; CHECK: VarName: l2 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: unsigned long (0x22) ; CHECK: VarName: l3 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: unsigned long (0x22) ; CHECK: VarName: l4 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: const void* (0x1010) ; CHECK: VarName: v6 ; CHECK: } @@ -298,48 +298,48 @@ ; CHECK: } ; CHECK: ] ; CHECK: Subsection [ -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: Type: CharTypes (0x1012) ; CHECK: DisplayName: CharTypes ; CHECK: LinkageName: ?CharTypes@@YAXXZ ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: wchar_t (0x71) ; CHECK: Flags [ (0x0) ; CHECK: ] ; CHECK: VarName: w ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: unsigned short (0x21) ; CHECK: Flags [ (0x0) ; CHECK: ] ; CHECK: VarName: us ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: char (0x70) ; CHECK: Flags [ (0x0) ; CHECK: ] ; CHECK: VarName: c ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: unsigned char (0x20) ; CHECK: Flags [ (0x0) ; CHECK: ] ; CHECK: VarName: uc ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: signed char (0x10) ; CHECK: Flags [ (0x0) ; CHECK: ] ; CHECK: VarName: sc ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: char16_t (0x7A) ; CHECK: Flags [ (0x0) ; CHECK: ] ; CHECK: VarName: c16 ; CHECK: } -; CHECK: Local { +; CHECK: LocalSym { ; CHECK: Type: char32_t (0x7B) ; CHECK: Flags [ (0x0) ; CHECK: ] diff --git a/test/DebugInfo/COFF/udts.ll b/test/DebugInfo/COFF/udts.ll index abc688d70a61..735901f7571c 100644 --- a/test/DebugInfo/COFF/udts.ll +++ b/test/DebugInfo/COFF/udts.ll @@ -18,37 +18,39 @@ target triple = "i686-pc-windows-msvc18.0.0" ; typedef struct { int x; } U; ; U u; -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: DisplayName: f ; CHECK: LinkageName: ?f@@YAXXZ ; CHECK: } -; CHECK: UDT { +; CHECK: UDTSym { +; CHECK-NEXT: Kind: S_UDT (0x1108) ; CHECK-NEXT: Type: int (0x74) ; CHECK-NEXT: UDTName: f::FOO ; CHECK-NEXT: } ; CHECK-NEXT: ProcEnd { -; CHECK-NEXT: } -; CHECK: ProcStart { +; CHECK: {{.*}}Proc{{.*}}Sym { ; CHECK: DisplayName: g ; CHECK: LinkageName: ?g@@YAMPEAUS@@@Z ; CHECK: } -; CHECK: UDT { +; CHECK: UDTSym { +; CHECK-NEXT: Kind: S_UDT (0x1108) ; CHECK-NEXT: Type: g::pun (0x{{[0-9A-F]+}}) ; CHECK-NEXT: UDTName: g::pun ; CHECK-NEXT: } ; CHECK-NEXT: ProcEnd { -; CHECK-NEXT: } ; CHECK: Subsection -; CHECK-NOT: ProcStart -; CHECK: UDT { +; CHECK-NOT: {{.*}}Proc{{.*}}Sym +; CHECK: UDTSym { +; CHECK-NEXT: Kind: S_UDT (0x1108) ; CHECK-NEXT: Type: S (0x{{[0-9A-F]+}}) ; CHECK-NEXT: UDTName: S -; CHECK: UDT { +; CHECK: UDTSym { +; CHECK-NEXT: Kind: S_UDT (0x1108) ; CHECK-NEXT: Type: <unnamed-tag> (0x{{[0-9A-F]+}}) ; CHECK-NEXT: UDTName: U -; CHECK-NOT: UDT { +; CHECK-NOT: UDTSym { %struct.U = type { i32 } %struct.S = type { i32 } diff --git a/test/DebugInfo/Inputs/dwarfdump-str-offsets-macho.o b/test/DebugInfo/Inputs/dwarfdump-str-offsets-macho.o Binary files differnew file mode 100644 index 000000000000..c0ed489d846c --- /dev/null +++ b/test/DebugInfo/Inputs/dwarfdump-str-offsets-macho.o diff --git a/test/DebugInfo/Inputs/dwarfdump-str-offsets-macho.s b/test/DebugInfo/Inputs/dwarfdump-str-offsets-macho.s new file mode 100644 index 000000000000..9ee9ad234d84 --- /dev/null +++ b/test/DebugInfo/Inputs/dwarfdump-str-offsets-macho.s @@ -0,0 +1,201 @@ +# Test object to verify dwarfdump handles v5 string offset tables in Mach-O. +# This is similar to dwarfdump-str-offsets.s with 2 CUs and 1 TU, but no +# split sections. +# +# To generate the test object: +# llvm-mc -triple i386-apple-darwin9 dwarfdump-str-offsets-macho.s -filetype=obj \ +# -o dwarfdump-str-offsets-macho.o + + .section __DWARF,__debug_str,regular,debug +Linfo_string: + .asciz "Handmade DWARF producer" +str_CU1: + .asciz "Compile_Unit_1" +str_CU1_dir: + .asciz "/home/test/CU1" +str_CU2: + .asciz "Compile_Unit_2" +str_CU2_dir: + .asciz "/home/test/CU2" +str_TU: + .asciz "Type_Unit" +str_TU_type: + .asciz "MyStruct" +str_Subprogram: + .asciz "MyFunc" +str_Variable1: + .asciz "MyVar1" +str_Variable2: + .asciz "MyVar2" +str_Variable3: + .asciz "MyVar3" + + .section __DWARF,__debug_str_offs,regular,debug +Ldebug_str_offsets: + .long Ldebug_str_offsets_segment0_end-Ldebug_str_offsets_base0 + .short 5 # DWARF version + .short 0 # Padding +Ldebug_str_offsets_base0: + .long str_producer + .long str_CU1 + .long str_CU1_dir + .long str_Subprogram + .long str_Variable1 + .long str_Variable2 + .long str_Variable3 +Ldebug_str_offsets_segment0_end: +# CU2's contribution + .long Ldebug_str_offsets_segment1_end-Ldebug_str_offsets_base1 + .short 5 # DWARF version + .short 0 # Padding +Ldebug_str_offsets_base1: + .long str_producer + .long str_CU2 + .long str_CU2_dir +Ldebug_str_offsets_segment1_end: +# The TU's contribution + .long Ldebug_str_offsets_segment2_end-Ldebug_str_offsets_base2 + .short 5 # DWARF version + .short 0 # Padding +Ldebug_str_offsets_base2: + .long str_TU + .long str_TU_type +Ldebug_str_offsets_segment2_end: + + .section __DWARF,__debug_abbrev,regular,debug +Lsection_abbrev: + .byte 0x01 # Abbrev code + .byte 0x11 # DW_TAG_compile_unit + .byte 0x01 # DW_CHILDREN_yes + .byte 0x25 # DW_AT_producer + .byte 0x1a # DW_FORM_strx + .byte 0x03 # DW_AT_name + .byte 0x1a # DW_FORM_strx + .byte 0x72 # DW_AT_str_offsets_base + .byte 0x17 # DW_FORM_sec_offset + .byte 0x1b # DW_AT_comp_dir + .byte 0x1a # DW_FORM_strx + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x02 # Abbrev code + .byte 0x41 # DW_TAG_type_unit + .byte 0x01 # DW_CHILDREN_yes + .byte 0x03 # DW_AT_name + .byte 0x1a # DW_FORM_strx + .byte 0x72 # DW_AT_str_offsets_base + .byte 0x17 # DW_FORM_sec_offset + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x03 # Abbrev code + .byte 0x13 # DW_TAG_structure_type + .byte 0x00 # DW_CHILDREN_no (no members) + .byte 0x03 # DW_AT_name + .byte 0x1a # DW_FORM_strx + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x04 # Abbrev code + .byte 0x2e # DW_TAG_subprogram + .byte 0x01 # DW_CHILDREN_yes + .byte 0x03 # DW_AT_name + .byte 0x25 # DW_FORM_strx1 + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x05 # Abbrev code + .byte 0x34 # DW_TAG_variable + .byte 0x00 # DW_CHILDREN_no + .byte 0x03 # DW_AT_name + .byte 0x26 # DW_FORM_strx2 + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x06 # Abbrev code + .byte 0x34 # DW_TAG_variable + .byte 0x00 # DW_CHILDREN_no + .byte 0x03 # DW_AT_name + .byte 0x27 # DW_FORM_strx3 + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x07 # Abbrev code + .byte 0x34 # DW_TAG_variable + .byte 0x00 # DW_CHILDREN_no + .byte 0x03 # DW_AT_name + .byte 0x28 # DW_FORM_strx4 + .byte 0x00 # EOM(1) + .byte 0x00 # EOM(2) + .byte 0x00 # EOM(3) + + .section __DWARF,__debug_info,regular,debug +Lsection_info: +# DWARF v5 CU header. + .long CU1_5_end-CU1_5_version # Length of Unit +CU1_5_version: + .short 5 # DWARF version number + .byte 1 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .long 0 # Offset Into Abbrev. Section +# The compile-unit DIE, which has a DW_AT_producer, DW_AT_name, +# DW_AT_str_offsets and DW_AT_compdir. + .byte 1 # Abbreviation code + .byte 0 # The index of the producer string + .byte 1 # The index of the CU name string + .long Ldebug_str_offsets_base0-Ldebug_str_offsets + .byte 2 # The index of the comp dir string +# A subprogram DIE with DW_AT_name, using DW_FORM_strx1. + .byte 4 # Abbreviation code + .byte 3 # Subprogram name string (DW_FORM_strx1) +# A variable DIE with DW_AT_name, using DW_FORM_strx2. + .byte 5 # Abbreviation code + .short 0x0004 # Subprogram name string (DW_FORM_strx2) +# A variable DIE with DW_AT_name, using DW_FORM_strx3. + .byte 6 # Abbreviation code + .byte 5 # Subprogram name string (DW_FORM_strx3) + .short 0 # Subprogram name string (DW_FORM_strx3) +# A variable DIE with DW_AT_name, using DW_FORM_strx4. + .byte 7 # Abbreviation code + .quad 0x00000006 # Subprogram name string (DW_FORM_strx4) + .byte 0 # NULL + .byte 0 # NULL + .byte 0 # NULL +CU1_5_end: + +# DWARF v5 CU header + .long CU2_5_end-CU2_5_version # Length of Unit +CU2_5_version: + .short 5 # DWARF version number + .byte 1 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .long 0 # Offset Into Abbrev. Section +# The compile-unit DIE, which has a DW_AT_producer, DW_AT_name, +# DW_AT_str_offsets and DW_AT_compdir. + .byte 1 # Abbreviation code + .byte 0 # The index of the producer string + .byte 1 # The index of the CU name string + .long Ldebug_str_offsets_base1-Ldebug_str_offsets + .byte 2 # The index of the comp dir string + .byte 0 # NULL +CU2_5_end: + + .section __DWARF,__debug_types,regular,debug +# DWARF v5 Type unit header. +TU_5_start: + .long TU_5_end-TU_5_version # Length of Unit +TU_5_version: + .short 5 # DWARF version number + .byte 2 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .long 0 # Offset Into Abbrev. Section + .quad 0x0011223344556677 # Type Signature + .long TU_5_type-TU_5_start # Type offset +# The type-unit DIE, which has a name. + .byte 2 # Abbreviation code + .byte 0 # Index of the unit type name string + .long Ldebug_str_offsets_base2-Ldebug_str_offsets # offset into the str_offsets section +# The type DIE, which has a name. +TU_5_type: + .byte 3 # Abbreviation code + .byte 1 # Index of the type name string + .byte 0 # NULL + .byte 0 # NULL +TU_5_end: + + +.subsections_via_symbols diff --git a/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 space b/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64-space Binary files differindex 7330cd8baa1e..7330cd8baa1e 100755 --- a/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64 space +++ b/test/DebugInfo/Inputs/dwarfdump-test3.elf-x86-64-space diff --git a/test/DebugInfo/PDB/Inputs/every-type.cpp b/test/DebugInfo/PDB/Inputs/every-type.cpp new file mode 100644 index 000000000000..ed715b034300 --- /dev/null +++ b/test/DebugInfo/PDB/Inputs/every-type.cpp @@ -0,0 +1,63 @@ +// Build with "cl.exe /Zi /GR- /GX- every-type.cpp /link /debug /nodefaultlib /entry:main" + +// clang-format off +void *__purecall = 0; + +void __cdecl operator delete(void *,unsigned int) {} + +struct FooStruct { }; // LF_STRUCTURE + +class FooClass { // LF_CLASS + // LF_FIELDLIST + enum NestedEnum { // LF_ENUM + // LF_NESTTYPE + A, B, C // LF_ENUMERATE + }; + + void RegularMethod() {} // LF_ARGLIST + // LF_ONEMETHOD + // LF_MFUNCTION + + void OverloadedMethod(int) {} // LF_METHODLIST + // LF_METHOD + void OverloadedMethod(int, int) {} + + int HiNibble : 4; // LF_BITFIELD + int LoNibble : 4; + NestedEnum EnumVariable; // LF_MEMBER + static void *StaticMember; // LF_POINTER + // LF_STMEMBER +}; + +void *FooClass::StaticMember = nullptr; + +class Inherit : public FooClass { // LF_BCLASS +public: + virtual ~Inherit() {} // LF_VTSHAPE + // LF_VFUNCTAB +}; + +class VInherit : public virtual FooClass { // LF_VBCLASS + +}; + +class IVInherit : public VInherit { // LF_IVBCLASS +}; + +union TheUnion { + int X; // LF_UNION +}; + +int SomeArray[7] = {1, 2, 3, 4, 5, 6, 7}; // LF_ARRAY + +int main(int argc, char **argv) { // LF_PROCEDURE + const int X = 7; // LF_MODIFIER + + FooStruct FooStructInstance; + FooClass FooClassInstance; + Inherit InheritInstance; + VInherit VInheritInstance; + IVInherit IVInheritInstance; + TheUnion UnionInstance; + return SomeArray[argc]; +} diff --git a/test/DebugInfo/PDB/Inputs/every-type.pdb b/test/DebugInfo/PDB/Inputs/every-type.pdb Binary files differnew file mode 100644 index 000000000000..64996d61d3e7 --- /dev/null +++ b/test/DebugInfo/PDB/Inputs/every-type.pdb diff --git a/test/DebugInfo/PDB/Inputs/every-type.yaml b/test/DebugInfo/PDB/Inputs/every-type.yaml new file mode 100644 index 000000000000..8f23e8ad5e89 --- /dev/null +++ b/test/DebugInfo/PDB/Inputs/every-type.yaml @@ -0,0 +1,272 @@ +--- +TpiStream: + Records: + # int* [Index: 0x1000] + - Kind: LF_POINTER + Pointer: + ReferentType: 116 # int + Attrs: 32778 + # const int* [Index: 0x1001] + - Kind: LF_MODIFIER + Modifier: + ModifiedType: 0x1000 + Modifiers: [ Const ] + # char* [Index: 0x1002] + - Kind: LF_POINTER + Pointer: + ReferentType: 1136 # char* + Attrs: 32778 + # (int, char **) [Index: 0x1003] + - Kind: LF_ARGLIST + ArgList: + ArgIndicies: [ 116, 0x1002 ] + # (int, double) [Index: 0x1004] + - Kind: LF_ARGLIST + ArgList: + ArgIndicies: [ 116, 65 ] # (int, double) + # int main(int argc, char **argv) [Index: 0x1005] + - Kind: LF_PROCEDURE + Procedure: + ReturnType: 117 # int + CallConv: NearC # __cdecl + Options: [ None ] + ParameterCount: 2 + ArgumentList: 0x1003 # (int, char**) + # <label> [Index: 0x1006] + - Kind: LF_LABEL + Label: + Mode: Near + # <forward decl> + # class FooClass; [Index: 0x1007] + - Kind: LF_STRUCTURE + Class: + MemberCount: 0 + Options: [ None, ForwardReference ] + FieldList: 0 + Name: 'FooClass' + DerivationList: 0 + VTableShape: 0 + Size: 0 + # char* [Index: 0x1008] + - Kind: LF_POINTER + Pointer: + ReferentType: 0x1007 # FooClass + Attrs: 33802 # const + # int (FooClass::)(int, char **) [Index: 0x1009] + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 116 # int + ClassType: 0x1007 # FooClass + ThisType: 0x1008 # const FooClass* + CallConv: ThisCall + Options: [ None ] + ParameterCount: 2 + ArgumentList: 0x1003 # (int, char**) + ThisPointerAdjustment: 0 + # int (FooClass::)(int, double) [Index: 0x100A] + - Kind: LF_MFUNCTION + MemberFunction: + ReturnType: 116 # int + ClassType: 0x1007 # FooClass + ThisType: 0x1008 # const FooClass* + CallConv: ThisCall + Options: [ None ] + ParameterCount: 2 + ArgumentList: 0x1004 # (int, double) + ThisPointerAdjustment: 0 + # <method overload list> + # int (FooClass::)(int, char **) + # int (FooClass::)(int, double) [Index: 0x100B] + - Kind: LF_METHODLIST + MethodOverloadList: + Methods: + - Type: 0x1009 # int (FooClass::)(int, char **) + Attrs: 3 # public + VFTableOffset: -1 + Name: '' + - Type: 0x100A # int (FooClass::)(int, double) + Attrs: 3 # public + VFTableOffset: -1 + Name: '' + # <Field List> + # A, B, C [Index: 0x100C] + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 0 + Name: A + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 1 + Name: B + - Kind: LF_ENUMERATE + Enumerator: + Attrs: 3 + Value: 2 + Name: C + # enum FooClass::Enum : uint32_t { + # A, B, C + # }; [Index: 0x100D] + - Kind: LF_ENUM + Enum: + NumEnumerators: 3 + Options: [ None, Nested ] + FieldList: 0x100C + Name: 'FooClass::Enum' + UnderlyingType: 117 + # <Field List> + # public: + # enum FooEnum : uint32_t { + # A, B, C + # }; + # FooEnum EnumMember; + # static int StaticInt; + # int FooClass::OverloadedMethod(int, char **); + # int FooClass::OverloadedMethod(int, double); + # int FooClass::RegularMethod(int, double); + # [Index: 0x100E] + - Kind: LF_FIELDLIST + FieldList: + # enum FooEnum : uint32_t { + # A, B, C + # }; + - Kind: LF_NESTTYPE + NestedType: + Type: 0x100D + Name: FooEnum + # FooEnum EnumMember; + - Kind: LF_MEMBER + DataMember: + Attrs: 3 # public + Type: 0x100D # void* + FieldOffset: 0 + Name: EnumMember + # static int StaticInt; + - Kind: LF_STMEMBER + StaticDataMember: + Attrs: 3 # public + Type: 116 # int + Name: StaticInt + # int FooClass::OverloadedMethod(int, char **); + # int FooClass::OverloadedMethod(int, double); + - Kind: LF_METHOD + OverloadedMethod: + NumOverloads: 2 + MethodList: 0x100B + Name: OverloadedMethod + # int FooClass::RegularMethod(int, double); + - Kind: LF_ONEMETHOD + OneMethod: + Type: 0x100A + Attrs: 3 # public + VFTableOffset: -1 + Name: RegularMethod + # class FooClass { + # public: + # enum FooEnum : uint32_t { + # A, B, C + # }; + # FooEnum EnumMember; + # static int StaticInt; + # int FooClass::OverloadedMethod(int, char **); + # int FooClass::OverloadedMethod(int, double); + # int FooClass::RegularMethod(int, double); + # }; [Index: 0x100F] + - Kind: LF_CLASS + Class: + MemberCount: 6 + Options: [ None ] + FieldList: 0x100E + Name: 'FooClass' + DerivationList: 0 + VTableShape: 0 + Size: 4 + # struct FooStructure; [Index: 0x1010] + - Kind: LF_STRUCTURE + Class: + MemberCount: 6 + Options: [ None ] + FieldList: 0x100E + Name: 'FooStructure' + DerivationList: 0 + VTableShape: 0 + Size: 4 + # interface FooInterface; [Index: 0x1011] + - Kind: LF_INTERFACE + Class: + MemberCount: 6 + Options: [ None ] + FieldList: 0x100E + Name: 'FooInterface' + DerivationList: 0 + VTableShape: 0 + Size: 4 + # <field list> + # : public FooClass [Index: 0x1012] + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_BCLASS + Attrs: 3 # public + Type: 0x100F # FooClass + Offset: 0 + # <field list> + # : public virtual FooClass [Index: 0x1013] + - Kind: LF_FIELDLIST + FieldList: + - Kind: LF_VBCLASS + Attrs: 3 # public + BaseType: 0x100F # FooClass + VBPtrType: 0x1001 # const int * + VBPtrOffset: 0 + VTableIndex: 1 + # class Inherit : public FooClass {}; [Index: 0x1014] + - Kind: LF_STRUCTURE + Class: + MemberCount: 1 + Options: [ None ] + FieldList: 0x100E + Name: 'Inherit' + DerivationList: 0x1012 + VTableShape: 0 + Size: 4 + # class VInherit : public virtual FooClass {}; [Index: 0x1015] + - Kind: LF_STRUCTURE + Class: + MemberCount: 1 + Options: [ None ] + FieldList: 0x100E + Name: 'Inherit' + DerivationList: 0x1012 + VTableShape: 0 + Size: 4 + +# // Member type records. These are generally not length prefixed, and appear +# // inside of a field list record. +# MEMBER_RECORD(LF_VFUNCTAB, 0x1409, VFPtr) + +# MEMBER_RECORD_ALIAS(LF_BINTERFACE, 0x151a, BaseInterface, BaseClass) + +# MEMBER_RECORD_ALIAS(LF_IVBCLASS, 0x1402, IndirectVirtualBaseClass, +# VirtualBaseClass) + + +# TYPE_RECORD(LF_ARRAY, 0x1503, Array) +# TYPE_RECORD(LF_UNION, 0x1506, Union) +# TYPE_RECORD(LF_TYPESERVER2, 0x1515, TypeServer2) +# TYPE_RECORD(LF_VFTABLE, 0x151d, VFTable) +# TYPE_RECORD(LF_VTSHAPE, 0x000a, VFTableShape) + +# TYPE_RECORD(LF_BITFIELD, 0x1205, BitField) + + +# // ID leaf records. Subsequent leaf types may be referenced from .debug$S. +# TYPE_RECORD(LF_FUNC_ID, 0x1601, FuncId) +# TYPE_RECORD(LF_MFUNC_ID, 0x1602, MemberFuncId) +# TYPE_RECORD(LF_BUILDINFO, 0x1603, BuildInfo) +# TYPE_RECORD(LF_SUBSTR_LIST, 0x1604, StringList) +# TYPE_RECORD(LF_STRING_ID, 0x1605, StringId) +# TYPE_RECORD(LF_UDT_SRC_LINE, 0x1606, UdtSourceLine) +# TYPE_RECORD(LF_UDT_MOD_SRC_LINE, 0x1607, UdtModSourceLine) diff --git a/test/DebugInfo/PDB/every-type.test b/test/DebugInfo/PDB/every-type.test new file mode 100644 index 000000000000..e6b9c15815d0 --- /dev/null +++ b/test/DebugInfo/PDB/every-type.test @@ -0,0 +1,261 @@ +The test input (every-type.pdb) is generated from some short and trivial C++ code +that exercises the entire type system to generate every possible type record that +we claim to understand. We then test this in two ways: + 1) We just dump the output for the purposes of readability. This tests that we + we can dump every possible type record. + 2) We dump the output to yaml, and then re-generate a PDB with the same type + stream, and then run test 1 on the new PDB. This verifies that the PDB + hasn't changed. + + +RUN: llvm-pdbutil dump -type-index=0x1018,0x102A,0x103B,0x1093,0x1095,0x1096,0x1098 \ +RUN: -dependents %p/Inputs/every-type.pdb | FileCheck --check-prefix=TYPES %s + +RUN: llvm-pdbutil pdb2yaml -tpi-stream -ipi-stream %p/Inputs/every-type.pdb > %t.pdb.yaml +RUN: llvm-pdbutil yaml2pdb -pdb=%t.yaml.pdb %t.pdb.yaml +RUN: llvm-pdbutil dump -type-index=0x1018,0x102A,0x103B,0x1093,0x1095,0x1096,0x1098 \ +RUN: -dependents %t.yaml.pdb | FileCheck --check-prefix=TYPES %s + +TYPES: Types (TPI Stream) +TYPES-NEXT: ============================================================ +TYPES-NEXT: Showing 7 records and their dependents (73 records total) +TYPES-NEXT: 0x1005 | LF_MODIFIER [size = 12] +TYPES-NEXT: referent = 0x0074 (int), modifiers = const +TYPES-NEXT: 0x1006 | LF_CLASS [size = 48] `FooClass` +TYPES-NEXT: unique name: `.?AVFooClass@@` +TYPES-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> +TYPES-NEXT: options: forward ref | has unique name +TYPES-NEXT: 0x1007 | LF_VTSHAPE [size = 8] +TYPES-NEXT: 0x1008 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1007, mode = pointer, opts = None, kind = ptr32 +TYPES-NEXT: 0x1009 | LF_CLASS [size = 44] `Inherit` +TYPES-NEXT: unique name: `.?AVInherit@@` +TYPES-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> +TYPES-NEXT: options: forward ref | has unique name +TYPES-NEXT: 0x100A | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1009, mode = pointer, opts = const, kind = ptr32 +TYPES-NEXT: 0x100B | LF_ARGLIST [size = 8] +TYPES-NEXT: 0x100C | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B +TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x100D | LF_MODIFIER [size = 12] +TYPES-NEXT: referent = 0x1009, modifiers = const +TYPES-NEXT: 0x100E | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x100D, mode = ref, opts = None, kind = ptr32 +TYPES-NEXT: 0x100F | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x100E: `const Inherit&` +TYPES-NEXT: 0x1010 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x100F +TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = constructor +TYPES-NEXT: 0x1011 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B +TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = constructor +TYPES-NEXT: 0x1012 | LF_METHODLIST [size = 20] +TYPES-NEXT: - Method [type = 0x1010, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1011, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x1013 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1009, mode = ref, opts = None, kind = ptr32 +TYPES-NEXT: 0x1014 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1013, # args = 1, param list = 0x100F +TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x1015 | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x0075 (unsigned): `unsigned` +TYPES-NEXT: 0x1016 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0403 (void*), # args = 1, param list = 0x1015 +TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x1017 | LF_FIELDLIST [size = 152] +TYPES-NEXT: - LF_BCLASS +TYPES-NEXT: type = 0x1006, offset = 4, attrs = public +TYPES-NEXT: - LF_VFUNCTAB type = 0x1008 +TYPES-NEXT: - LF_ONEMETHOD [name = `~Inherit`] +TYPES-NEXT: type = 0x100C, vftable offset = 0, attrs = public intro virtual +TYPES-NEXT: - LF_METHOD [name = `Inherit`, # overloads = 2, overload list = 0x1012] +TYPES-NEXT: - LF_ONEMETHOD [name = `operator=`] +TYPES-NEXT: type = 0x1014, vftable offset = -1, attrs = public compiler-generated +TYPES-NEXT: - LF_ONEMETHOD [name = `__local_vftable_ctor_closure`] +TYPES-NEXT: type = 0x100C, vftable offset = -1, attrs = public compiler-generated +TYPES-NEXT: - LF_ONEMETHOD [name = `__vecDelDtor`] +TYPES-NEXT: type = 0x1016, vftable offset = 0, attrs = public intro virtual compiler-generated +TYPES-NEXT: 0x1018 | LF_CLASS [size = 44] `Inherit` +TYPES-NEXT: unique name: `.?AVInherit@@` +TYPES-NEXT: vtable: 0x1007, base list: <no type>, field list: 0x1017 +TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator= +TYPES-NEXT: 0x1019 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1005, mode = pointer, opts = None, kind = ptr32 +TYPES-NEXT: 0x101A | LF_CLASS [size = 48] `VInherit` +TYPES-NEXT: unique name: `.?AVVInherit@@` +TYPES-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> +TYPES-NEXT: options: forward ref | has unique name +TYPES-NEXT: 0x101B | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x101A, mode = pointer, opts = const, kind = ptr32 +TYPES-NEXT: 0x101C | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x101A, mode = rvalue ref, opts = None, kind = ptr32 +TYPES-NEXT: 0x101D | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x101C: `VInherit&&` +TYPES-NEXT: 0x101E | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x101D +TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x101F | LF_MODIFIER [size = 12] +TYPES-NEXT: referent = 0x101A, modifiers = const +TYPES-NEXT: 0x1020 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x101F, mode = ref, opts = None, kind = ptr32 +TYPES-NEXT: 0x1021 | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x1020: `const VInherit&` +TYPES-NEXT: 0x1022 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1021 +TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1023 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B +TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1024 | LF_METHODLIST [size = 28] +TYPES-NEXT: - Method [type = 0x101E, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1022, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1023, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x1025 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x101A, mode = ref, opts = None, kind = ptr32 +TYPES-NEXT: 0x1026 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1025, # args = 1, param list = 0x101D +TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x1027 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1025, # args = 1, param list = 0x1021 +TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x1028 | LF_METHODLIST [size = 20] +TYPES-NEXT: - Method [type = 0x1026, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1027, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x1029 | LF_FIELDLIST [size = 60] +TYPES-NEXT: - LF_VBCLASS +TYPES-NEXT: base = 0x1006, vbptr = 0x1019, vbptr offset = 0, vtable index = 1 +TYPES-NEXT: attrs = public +TYPES-NEXT: - LF_METHOD [name = `VInherit`, # overloads = 3, overload list = 0x1024] +TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x1028] +TYPES-NEXT: 0x102A | LF_CLASS [size = 48] `VInherit` +TYPES-NEXT: unique name: `.?AVVInherit@@` +TYPES-NEXT: vtable: <no type>, base list: <no type>, field list: 0x1029 +TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator= +TYPES-NEXT: 0x102B | LF_CLASS [size = 48] `IVInherit` +TYPES-NEXT: unique name: `.?AVIVInherit@@` +TYPES-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> +TYPES-NEXT: options: forward ref | has unique name +TYPES-NEXT: 0x102C | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x102B, mode = pointer, opts = const, kind = ptr32 +TYPES-NEXT: 0x102D | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x102B, mode = rvalue ref, opts = None, kind = ptr32 +TYPES-NEXT: 0x102E | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x102D: `IVInherit&&` +TYPES-NEXT: 0x102F | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x102E +TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1030 | LF_MODIFIER [size = 12] +TYPES-NEXT: referent = 0x102B, modifiers = const +TYPES-NEXT: 0x1031 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1030, mode = ref, opts = None, kind = ptr32 +TYPES-NEXT: 0x1032 | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x1031: `const IVInherit&` +TYPES-NEXT: 0x1033 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1032 +TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1034 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B +TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1035 | LF_METHODLIST [size = 28] +TYPES-NEXT: - Method [type = 0x102F, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1033, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1034, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x1036 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x102B, mode = ref, opts = None, kind = ptr32 +TYPES-NEXT: 0x1037 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1036, # args = 1, param list = 0x102E +TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x1038 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1036, # args = 1, param list = 0x1032 +TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x1039 | LF_METHODLIST [size = 20] +TYPES-NEXT: - Method [type = 0x1037, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1038, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x103A | LF_FIELDLIST [size = 72] +TYPES-NEXT: - LF_BCLASS +TYPES-NEXT: type = 0x101A, offset = 0, attrs = public +TYPES-NEXT: - LF_IVBCLASS +TYPES-NEXT: base = 0x1006, vbptr = 0x1019, vbptr offset = 0, vtable index = 1 +TYPES-NEXT: attrs = public +TYPES-NEXT: - LF_METHOD [name = `IVInherit`, # overloads = 3, overload list = 0x1035] +TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x1039] +TYPES-NEXT: 0x103B | LF_CLASS [size = 48] `IVInherit` +TYPES-NEXT: unique name: `.?AVIVInherit@@` +TYPES-NEXT: vtable: <no type>, base list: <no type>, field list: 0x103A +TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator= +TYPES-NEXT: 0x1087 | LF_FIELDLIST [size = 28] +TYPES-NEXT: - LF_ENUMERATE [A = 0] +TYPES-NEXT: - LF_ENUMERATE [B = 1] +TYPES-NEXT: - LF_ENUMERATE [C = 2] +TYPES-NEXT: 0x1088 | LF_ENUM [size = 64] `FooClass::NestedEnum` +TYPES-NEXT: unique name: `.?AW4NestedEnum@FooClass@@` +TYPES-NEXT: field list: 0x1087, underlying type: 0x0074 (int) +TYPES-NEXT: options: has unique name | is nested +TYPES-NEXT: 0x1089 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1006, mode = pointer, opts = const, kind = ptr32 +TYPES-NEXT: 0x108A | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B +TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x108B | LF_ARGLIST [size = 16] +TYPES-NEXT: 0x0074 (int): `int` +TYPES-NEXT: 0x0074 (int): `int` +TYPES-NEXT: 0x108C | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 2, param list = 0x108B +TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x108D | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x0074 (int): `int` +TYPES-NEXT: 0x108E | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x108D +TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0 +TYPES-NEXT: calling conv = thiscall, options = None +TYPES-NEXT: 0x108F | LF_METHODLIST [size = 20] +TYPES-NEXT: - Method [type = 0x108C, vftable offset = -1, attrs = private] +TYPES-NEXT: - Method [type = 0x108E, vftable offset = -1, attrs = private] +TYPES-NEXT: 0x1090 | LF_BITFIELD [size = 12] +TYPES-NEXT: type = 0x0074 (int), bit offset = 0, # bits = 4 +TYPES-NEXT: 0x1091 | LF_BITFIELD [size = 12] +TYPES-NEXT: type = 0x0074 (int), bit offset = 4, # bits = 4 +TYPES-NEXT: 0x1092 | LF_FIELDLIST [size = 164] +TYPES-NEXT: - LF_NESTTYPE [name = `NestedEnum`, parent = 0x1088] +TYPES-NEXT: - LF_ONEMETHOD [name = `RegularMethod`] +TYPES-NEXT: type = 0x108A, vftable offset = -1, attrs = private +TYPES-NEXT: - LF_METHOD [name = `OverloadedMethod`, # overloads = 2, overload list = 0x108F] +TYPES-NEXT: - LF_MEMBER [name = `HiNibble`, Type = 0x1090, offset = 0, attrs = private] +TYPES-NEXT: - LF_MEMBER [name = `LoNibble`, Type = 0x1091, offset = 0, attrs = private] +TYPES-NEXT: - LF_MEMBER [name = `EnumVariable`, Type = 0x1088, offset = 4, attrs = private] +TYPES-NEXT: - LF_STMEMBER [name = `StaticMember`, type = 0x0403 (void*), attrs = private] +TYPES-NEXT: 0x1093 | LF_CLASS [size = 48] `FooClass` +TYPES-NEXT: unique name: `.?AVFooClass@@` +TYPES-NEXT: vtable: <no type>, base list: <no type>, field list: 0x1092 +TYPES-NEXT: options: contains nested class | has unique name +TYPES-NEXT: 0x1094 | LF_FIELDLIST [size = 16] +TYPES-NEXT: - LF_MEMBER [name = `X`, Type = 0x0074 (int), offset = 0, attrs = public] +TYPES-NEXT: 0x1095 | LF_UNION [size = 40] `TheUnion` +TYPES-NEXT: unique name: `.?ATTheUnion@@` +TYPES-NEXT: field list: 0x1094 +TYPES-NEXT: options: has unique name | sealed +TYPES-NEXT: 0x1096 | LF_PROCEDURE [size = 16] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x1097 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1096, mode = pointer, opts = const, kind = ptr32 +TYPES-NEXT: 0x1098 | LF_ARRAY [size = 16] +TYPES-NEXT: size: 4, index type: 0x0022 (unsigned long), element type: 0x1097 diff --git a/test/DebugInfo/PDB/pdbdump-headers.test b/test/DebugInfo/PDB/pdbdump-headers.test index 3b7895e06b77..1887af2e8268 100644 --- a/test/DebugInfo/PDB/pdbdump-headers.test +++ b/test/DebugInfo/PDB/pdbdump-headers.test @@ -67,9 +67,11 @@ ALL-NEXT: ============================================================ ALL-NEXT: Mod 0000 | Name: `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: ALL-NEXT: Obj: `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: ALL-NEXT: debug stream: 12, # files: 1, has ec info: false +ALL-NEXT: pdb file ni: 0 ``, src file ni: 0 `` ALL-NEXT: Mod 0001 | Name: `* Linker *`: ALL-NEXT: Obj: ``: ALL-NEXT: debug stream: 14, # files: 0, has ec info: false +ALL-NEXT: pdb file ni: 1 `{{.*empty.pdb}}`, src file ni: 0 `` ALL: Files ALL-NEXT: ============================================================ ALL-NEXT: Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`: @@ -99,13 +101,11 @@ ALL-NEXT: - LF_ENUMERATE [single = 2] ALL-NEXT: - LF_ENUMERATE [free = 3] ALL-NEXT: - LF_ENUMERATE [neutral = 4] ALL-NEXT: - LF_ENUMERATE [both = 5] -ALL-NEXT: 0x1003 | LF_ENUM [size = 120, hash = 208239] -ALL-NEXT: name: `__vc_attributes::threadingAttribute::threading_e` +ALL-NEXT: 0x1003 | LF_ENUM [size = 120, hash = 208239] `__vc_attributes::threadingAttribute::threading_e` ALL-NEXT: unique name: `.?AW4threading_e@threadingAttribute@__vc_attributes@@` ALL-NEXT: field list: 0x1002, underlying type: 0x0074 (int) ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x1004 | LF_STRUCTURE [size = 100, hash = 16377] -ALL-NEXT: class name: `__vc_attributes::threadingAttribute` +ALL-NEXT: 0x1004 | LF_STRUCTURE [size = 100, hash = 16377] `__vc_attributes::threadingAttribute` ALL-NEXT: unique name: `.?AUthreadingAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> ALL-NEXT: options: forward ref | has unique name @@ -128,8 +128,7 @@ ALL-NEXT: 0x100A | LF_FIELDLIST [size = 68, hash = 185421] ALL-NEXT: - LF_NESTTYPE [name = `threading_e`, parent = 0x1003] ALL-NEXT: - LF_METHOD [name = `threadingAttribute`, # overloads = 2, overload list = 0x1009] ALL-NEXT: - LF_MEMBER [name = `value`, Type = 0x1003, offset = 0, attrs = public] -ALL-NEXT: 0x100B | LF_STRUCTURE [size = 100, hash = 119540] -ALL-NEXT: class name: `__vc_attributes::threadingAttribute` +ALL-NEXT: 0x100B | LF_STRUCTURE [size = 100, hash = 119540] `__vc_attributes::threadingAttribute` ALL-NEXT: unique name: `.?AUthreadingAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: 0x100A ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name @@ -137,13 +136,11 @@ ALL-NEXT: 0x100C | LF_FIELDLIST [size = 48, hash = 261871] ALL-NEXT: - LF_ENUMERATE [native = 0] ALL-NEXT: - LF_ENUMERATE [com = 1] ALL-NEXT: - LF_ENUMERATE [managed = 2] -ALL-NEXT: 0x100D | LF_ENUM [size = 120, hash = 198119] -ALL-NEXT: name: `__vc_attributes::event_receiverAttribute::type_e` +ALL-NEXT: 0x100D | LF_ENUM [size = 120, hash = 198119] `__vc_attributes::event_receiverAttribute::type_e` ALL-NEXT: unique name: `.?AW4type_e@event_receiverAttribute@__vc_attributes@@` ALL-NEXT: field list: 0x100C, underlying type: 0x0074 (int) ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x100E | LF_STRUCTURE [size = 112, hash = 48056] -ALL-NEXT: class name: `__vc_attributes::event_receiverAttribute` +ALL-NEXT: 0x100E | LF_STRUCTURE [size = 112, hash = 48056] `__vc_attributes::event_receiverAttribute` ALL-NEXT: unique name: `.?AUevent_receiverAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> ALL-NEXT: options: forward ref | has unique name @@ -175,8 +172,7 @@ ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x100D] ALL-NEXT: - LF_METHOD [name = `event_receiverAttribute`, # overloads = 3, overload list = 0x1015] ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x100D, offset = 0, attrs = public] ALL-NEXT: - LF_MEMBER [name = `layout_dependent`, Type = 0x0030 (bool), offset = 4, attrs = public] -ALL-NEXT: 0x1017 | LF_STRUCTURE [size = 112, hash = 148734] -ALL-NEXT: class name: `__vc_attributes::event_receiverAttribute` +ALL-NEXT: 0x1017 | LF_STRUCTURE [size = 112, hash = 148734] `__vc_attributes::event_receiverAttribute` ALL-NEXT: unique name: `.?AUevent_receiverAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: 0x1016 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name @@ -184,13 +180,11 @@ ALL-NEXT: 0x1018 | LF_FIELDLIST [size = 48, hash = 81128] ALL-NEXT: - LF_ENUMERATE [never = 0] ALL-NEXT: - LF_ENUMERATE [allowed = 1] ALL-NEXT: - LF_ENUMERATE [always = 2] -ALL-NEXT: 0x1019 | LF_ENUM [size = 116, hash = 60158] -ALL-NEXT: name: `__vc_attributes::aggregatableAttribute::type_e` +ALL-NEXT: 0x1019 | LF_ENUM [size = 116, hash = 60158] `__vc_attributes::aggregatableAttribute::type_e` ALL-NEXT: unique name: `.?AW4type_e@aggregatableAttribute@__vc_attributes@@` ALL-NEXT: field list: 0x1018, underlying type: 0x0074 (int) ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x101A | LF_STRUCTURE [size = 108, hash = 217249] -ALL-NEXT: class name: `__vc_attributes::aggregatableAttribute` +ALL-NEXT: 0x101A | LF_STRUCTURE [size = 108, hash = 217249] `__vc_attributes::aggregatableAttribute` ALL-NEXT: unique name: `.?AUaggregatableAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> ALL-NEXT: options: forward ref | has unique name @@ -213,26 +207,22 @@ ALL-NEXT: 0x1020 | LF_FIELDLIST [size = 68, hash = 6214] ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x1019] ALL-NEXT: - LF_METHOD [name = `aggregatableAttribute`, # overloads = 2, overload list = 0x101F] ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1019, offset = 0, attrs = public] -ALL-NEXT: 0x1021 | LF_STRUCTURE [size = 108, hash = 94935] -ALL-NEXT: class name: `__vc_attributes::aggregatableAttribute` +ALL-NEXT: 0x1021 | LF_STRUCTURE [size = 108, hash = 94935] `__vc_attributes::aggregatableAttribute` ALL-NEXT: unique name: `.?AUaggregatableAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: 0x1020 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name -ALL-NEXT: 0x1022 | LF_ENUM [size = 116, hash = 151449] -ALL-NEXT: name: `__vc_attributes::event_sourceAttribute::type_e` +ALL-NEXT: 0x1022 | LF_ENUM [size = 116, hash = 151449] `__vc_attributes::event_sourceAttribute::type_e` ALL-NEXT: unique name: `.?AW4type_e@event_sourceAttribute@__vc_attributes@@` ALL-NEXT: field list: 0x100C, underlying type: 0x0074 (int) ALL-NEXT: options: has unique name | is nested ALL-NEXT: 0x1023 | LF_FIELDLIST [size = 28, hash = 135589] ALL-NEXT: - LF_ENUMERATE [speed = 0] ALL-NEXT: - LF_ENUMERATE [size = 1] -ALL-NEXT: 0x1024 | LF_ENUM [size = 124, hash = 73373] -ALL-NEXT: name: `__vc_attributes::event_sourceAttribute::optimize_e` +ALL-NEXT: 0x1024 | LF_ENUM [size = 124, hash = 73373] `__vc_attributes::event_sourceAttribute::optimize_e` ALL-NEXT: unique name: `.?AW4optimize_e@event_sourceAttribute@__vc_attributes@@` ALL-NEXT: field list: 0x1023, underlying type: 0x0074 (int) ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x1025 | LF_STRUCTURE [size = 108, hash = 96512] -ALL-NEXT: class name: `__vc_attributes::event_sourceAttribute` +ALL-NEXT: 0x1025 | LF_STRUCTURE [size = 108, hash = 96512] `__vc_attributes::event_sourceAttribute` ALL-NEXT: unique name: `.?AUevent_sourceAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> ALL-NEXT: options: forward ref | has unique name @@ -258,8 +248,7 @@ ALL-NEXT: - LF_METHOD [name = `event_sourceAttribute`, # overloads = ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1022, offset = 0, attrs = public] ALL-NEXT: - LF_MEMBER [name = `optimize`, Type = 0x1024, offset = 4, attrs = public] ALL-NEXT: - LF_MEMBER [name = `decorate`, Type = 0x0030 (bool), offset = 8, attrs = public] -ALL-NEXT: 0x102C | LF_STRUCTURE [size = 108, hash = 238560] -ALL-NEXT: class name: `__vc_attributes::event_sourceAttribute` +ALL-NEXT: 0x102C | LF_STRUCTURE [size = 108, hash = 238560] `__vc_attributes::event_sourceAttribute` ALL-NEXT: unique name: `.?AUevent_sourceAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: 0x102B ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name @@ -270,13 +259,11 @@ ALL-NEXT: - LF_ENUMERATE [service = 3] ALL-NEXT: - LF_ENUMERATE [unspecified = 4] ALL-NEXT: - LF_ENUMERATE [EXE = 2] ALL-NEXT: - LF_ENUMERATE [SERVICE = 3] -ALL-NEXT: 0x102E | LF_ENUM [size = 104, hash = 115151] -ALL-NEXT: name: `__vc_attributes::moduleAttribute::type_e` +ALL-NEXT: 0x102E | LF_ENUM [size = 104, hash = 115151] `__vc_attributes::moduleAttribute::type_e` ALL-NEXT: unique name: `.?AW4type_e@moduleAttribute@__vc_attributes@@` ALL-NEXT: field list: 0x102D, underlying type: 0x0074 (int) ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x102F | LF_STRUCTURE [size = 96, hash = 197306] -ALL-NEXT: class name: `__vc_attributes::moduleAttribute` +ALL-NEXT: 0x102F | LF_STRUCTURE [size = 96, hash = 197306] `__vc_attributes::moduleAttribute` ALL-NEXT: unique name: `.?AUmoduleAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> ALL-NEXT: options: forward ref | has unique name @@ -338,8 +325,7 @@ ALL-NEXT: - LF_MEMBER [name = `hidden`, Type = 0x0030 (bool), offset ALL-NEXT: - LF_MEMBER [name = `restricted`, Type = 0x0030 (bool), offset = 45, attrs = public] ALL-NEXT: - LF_MEMBER [name = `custom`, Type = 0x1032, offset = 48, attrs = public] ALL-NEXT: - LF_MEMBER [name = `resource_name`, Type = 0x1032, offset = 52, attrs = public] -ALL-NEXT: 0x103A | LF_STRUCTURE [size = 96, hash = 98548] -ALL-NEXT: class name: `__vc_attributes::moduleAttribute` +ALL-NEXT: 0x103A | LF_STRUCTURE [size = 96, hash = 98548] `__vc_attributes::moduleAttribute` ALL-NEXT: unique name: `.?AUmoduleAttribute@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: 0x1039 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name @@ -374,13 +360,11 @@ ALL-NEXT: - LF_ENUMERATE [eModuleUsage = 16777216] ALL-NEXT: - LF_ENUMERATE [eIllegalUsage = 33554432] ALL-NEXT: - LF_ENUMERATE [eAsynchronousUsage = 67108864] ALL-NEXT: - LF_ENUMERATE [eAnyIDLUsage = 4161535] -ALL-NEXT: 0x103C | LF_ENUM [size = 140, hash = 171328] -ALL-NEXT: name: `__vc_attributes::helper_attributes::usageAttribute::usage_e` +ALL-NEXT: 0x103C | LF_ENUM [size = 140, hash = 171328] `__vc_attributes::helper_attributes::usageAttribute::usage_e` ALL-NEXT: unique name: `.?AW4usage_e@usageAttribute@helper_attributes@__vc_attributes@@` ALL-NEXT: field list: 0x103B, underlying type: 0x0074 (int) ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x103D | LF_STRUCTURE [size = 128, hash = 203640] -ALL-NEXT: class name: `__vc_attributes::helper_attributes::usageAttribute` +ALL-NEXT: 0x103D | LF_STRUCTURE [size = 128, hash = 203640] `__vc_attributes::helper_attributes::usageAttribute` ALL-NEXT: unique name: `.?AUusageAttribute@helper_attributes@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> ALL-NEXT: options: forward ref | has unique name @@ -397,8 +381,7 @@ ALL-NEXT: - LF_NESTTYPE [name = `usage_e`, parent = 0x103C] ALL-NEXT: - LF_ONEMETHOD [name = `usageAttribute`] ALL-NEXT: type = 0x1040, vftable offset = -1, attrs = public ALL-NEXT: - LF_MEMBER [name = `value`, Type = 0x0075 (unsigned), offset = 0, attrs = public] -ALL-NEXT: 0x1042 | LF_STRUCTURE [size = 128, hash = 165040] -ALL-NEXT: class name: `__vc_attributes::helper_attributes::usageAttribute` +ALL-NEXT: 0x1042 | LF_STRUCTURE [size = 128, hash = 165040] `__vc_attributes::helper_attributes::usageAttribute` ALL-NEXT: unique name: `.?AUusageAttribute@helper_attributes@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: 0x1041 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name @@ -407,13 +390,11 @@ ALL-NEXT: - LF_ENUMERATE [eBoolean = 0] ALL-NEXT: - LF_ENUMERATE [eInteger = 1] ALL-NEXT: - LF_ENUMERATE [eFloat = 2] ALL-NEXT: - LF_ENUMERATE [eDouble = 3] -ALL-NEXT: 0x1044 | LF_ENUM [size = 148, hash = 142625] -ALL-NEXT: name: `__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e` +ALL-NEXT: 0x1044 | LF_ENUM [size = 148, hash = 142625] `__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e` ALL-NEXT: unique name: `.?AW4type_e@v1_alttypeAttribute@helper_attributes@__vc_attributes@@` ALL-NEXT: field list: 0x1043, underlying type: 0x0074 (int) ALL-NEXT: options: has unique name | is nested -ALL-NEXT: 0x1045 | LF_STRUCTURE [size = 140, hash = 52534] -ALL-NEXT: class name: `__vc_attributes::helper_attributes::v1_alttypeAttribute` +ALL-NEXT: 0x1045 | LF_STRUCTURE [size = 140, hash = 52534] `__vc_attributes::helper_attributes::v1_alttypeAttribute` ALL-NEXT: unique name: `.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> ALL-NEXT: options: forward ref | has unique name @@ -430,8 +411,7 @@ ALL-NEXT: - LF_NESTTYPE [name = `type_e`, parent = 0x1044] ALL-NEXT: - LF_ONEMETHOD [name = `v1_alttypeAttribute`] ALL-NEXT: type = 0x1048, vftable offset = -1, attrs = public ALL-NEXT: - LF_MEMBER [name = `type`, Type = 0x1044, offset = 0, attrs = public] -ALL-NEXT: 0x104A | LF_STRUCTURE [size = 140, hash = 213215] -ALL-NEXT: class name: `__vc_attributes::helper_attributes::v1_alttypeAttribute` +ALL-NEXT: 0x104A | LF_STRUCTURE [size = 140, hash = 213215] `__vc_attributes::helper_attributes::v1_alttypeAttribute` ALL-NEXT: unique name: `.?AUv1_alttypeAttribute@helper_attributes@__vc_attributes@@` ALL-NEXT: vtable: <no type>, base list: <no type>, field list: 0x1049 ALL-NEXT: options: has ctor / dtor | contains nested class | has unique name @@ -590,147 +570,195 @@ BIG-NEXT: ============================================================ BIG-NEXT: Mod 0000 | Name: `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`: BIG-NEXT: Obj: `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`: BIG-NEXT: debug stream: 12, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0001 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_cpu_disp_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 14, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0002 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_initsect_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 15, # files: 19, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0003 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_sehprolg4_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 16, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 1 `f:\dd\vctools\crt\vcstartup\src\eh\i386\sehprolg4.asm` BIG-NEXT: Mod 0004 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_chandler4gs_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 17, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0005 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_secchk_.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 18, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0006 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_cookie.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 19, # files: 9, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0007 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_report.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 20, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0008 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_support.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 21, # files: 10, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0009 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\checkcfg.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 22, # files: 14, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0010 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\guard_support.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 23, # files: 10, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0011 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\loadcfg.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 24, # files: 9, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0012 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_dtor.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 25, # files: 11, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0013 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_init.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 26, # files: 10, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0014 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr_detection.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 27, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0015 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_detection.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 28, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0016 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\argv_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 29, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0017 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\commit_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 30, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0018 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_local_stdio_options.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 31, # files: 24, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0019 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\denormal_control.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 32, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0020 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\env_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 33, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0021 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\file_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 34, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0022 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\invalid_parameter_handler.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 35, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0023 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 36, # files: 2, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0024 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\new_mode.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 37, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0025 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\thread_locale.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 38, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0026 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\tncleanup.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 39, # files: 21, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0027 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\exe_main.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 40, # files: 26, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0028 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\initializers.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 41, # files: 20, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0029 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 42, # files: 20, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0030 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_stubs.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 43, # files: 1, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0031 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility_desktop.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 44, # files: 20, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0032 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_precision.obj`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`: BIG-NEXT: debug stream: 45, # files: 20, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0033 | Name: `Import:KERNEL32.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib`: BIG-NEXT: debug stream: 47, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0034 | Name: `KERNEL32.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib`: BIG-NEXT: debug stream: 46, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0035 | Name: `Import:VCRUNTIME140.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib`: BIG-NEXT: debug stream: 49, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0036 | Name: `VCRUNTIME140.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib`: BIG-NEXT: debug stream: 48, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0037 | Name: `Import:api-ms-win-crt-stdio-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 59, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0038 | Name: `api-ms-win-crt-stdio-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 58, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0039 | Name: `Import:api-ms-win-crt-runtime-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 57, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0040 | Name: `api-ms-win-crt-runtime-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 56, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0041 | Name: `Import:api-ms-win-crt-math-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 55, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0042 | Name: `api-ms-win-crt-math-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 54, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0043 | Name: `Import:api-ms-win-crt-locale-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 53, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0044 | Name: `api-ms-win-crt-locale-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 52, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0045 | Name: `Import:api-ms-win-crt-heap-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 51, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0046 | Name: `api-ms-win-crt-heap-l1-1-0.dll`: BIG-NEXT: Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`: BIG-NEXT: debug stream: 50, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 0 ``, src file ni: 0 `` BIG-NEXT: Mod 0047 | Name: `* Linker *`: BIG-NEXT: Obj: ``: BIG-NEXT: debug stream: 60, # files: 0, has ec info: false +BIG-NEXT: pdb file ni: 55 `{{.*test.pdb}}`, src file ni: 0 `` BIG: Files BIG-NEXT: ============================================================ BIG-NEXT: Mod 0000 | `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`: diff --git a/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test b/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test index 3903c07b027f..dd4c072fe0c9 100644 --- a/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test +++ b/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test @@ -14,8 +14,7 @@ TPI-TYPES-NEXT: - LF_MEMBER [name = `FooMember`, Type = 0x0403 (void* TPI-TYPES-NEXT: 0x1002 | LF_ARGLIST [size = 16] TPI-TYPES-NEXT: 0x0074 (int): `int` TPI-TYPES-NEXT: 0x1000: `char**` -TPI-TYPES-NEXT: 0x1003 | LF_STRUCTURE [size = 36] -TPI-TYPES-NEXT: class name: `FooBar` +TPI-TYPES-NEXT: 0x1003 | LF_STRUCTURE [size = 36] `FooBar` TPI-TYPES-NEXT: unique name: `FooBar` TPI-TYPES-NEXT: vtable: <no type>, base list: <no type>, field list: 0x1001 TPI-TYPES-NEXT: options: has unique name diff --git a/test/DebugInfo/PDB/pdbdump-mergetypes.test b/test/DebugInfo/PDB/pdbdump-mergetypes.test index 8ab64cfab516..60cf4a172aa2 100644 --- a/test/DebugInfo/PDB/pdbdump-mergetypes.test +++ b/test/DebugInfo/PDB/pdbdump-mergetypes.test @@ -11,8 +11,7 @@ MERGED-NEXT: 0x1000 | LF_POINTER [size = 12] MERGED-NEXT: referent = 0x0075 (unsigned), mode = pointer, opts = None, kind = ptr32 MERGED-NEXT: 0x1001 | LF_POINTER [size = 12] MERGED-NEXT: referent = 0x0076 (__int64), mode = pointer, opts = None, kind = ptr32 -MERGED-NEXT: 0x1002 | LF_STRUCTURE [size = 48] -MERGED-NEXT: class name: `OnlyInMerge1` +MERGED-NEXT: 0x1002 | LF_STRUCTURE [size = 48] `OnlyInMerge1` MERGED-NEXT: unique name: `OnlyInMerge1` MERGED-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> MERGED-NEXT: options: forward ref | has unique name @@ -29,8 +28,7 @@ MERGED-NEXT: 0x1003: `unsigned**` MERGED-NEXT: 0x1007 | LF_PROCEDURE [size = 16] MERGED-NEXT: return type = 0x0075 (unsigned), # args = 0, param list = 0x1006 MERGED-NEXT: calling conv = cdecl, options = None -MERGED-NEXT: 0x1008 | LF_STRUCTURE [size = 48] -MERGED-NEXT: class name: `OnlyInMerge2` +MERGED-NEXT: 0x1008 | LF_STRUCTURE [size = 48] `OnlyInMerge2` MERGED-NEXT: unique name: `OnlyInMerge2` MERGED-NEXT: vtable: <no type>, base list: <no type>, field list: <no type> MERGED-NEXT: options: forward ref | has unique name diff --git a/test/DebugInfo/X86/dbg-declare-inalloca.ll b/test/DebugInfo/X86/dbg-declare-inalloca.ll index e3f5c7e629b8..e8a310856c10 100644 --- a/test/DebugInfo/X86/dbg-declare-inalloca.ll +++ b/test/DebugInfo/X86/dbg-declare-inalloca.ll @@ -55,41 +55,41 @@ ; CHECK: .asciz "c" ; CHECK: .cv_def_range [[start]] [[end]] -; OBJ-LABEL: ProcStart { +; OBJ-LABEL: {{.*}}Proc{{.*}}Sym { ; OBJ: Kind: S_GPROC32_ID (0x1147) ; OBJ: DisplayName: f ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: NonTrivial (0x1007) ; OBJ: Flags [ (0x1) ; OBJ: IsParameter (0x1) ; OBJ: ] ; OBJ: VarName: a ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 21 ; OBJ: BasePointerOffset: 12 ; OBJ: } -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x1) ; OBJ: IsParameter (0x1) ; OBJ: ] ; OBJ: VarName: b ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 21 ; OBJ: BasePointerOffset: 16 ; OBJ: } ; FIXME: Retain unused. -; OBJ: Local { +; OBJ: LocalSym { ; OBJ: Type: int (0x74) ; OBJ: Flags [ (0x1) ; OBJ: IsParameter (0x1) ; OBJ: ] ; OBJ: VarName: c ; OBJ: } -; OBJ: DefRangeRegisterRel { +; OBJ: DefRangeRegisterRelSym { ; OBJ: BaseRegister: 21 ; OBJ: BasePointerOffset: 24 ; OBJ: } diff --git a/test/DebugInfo/dwarfdump-str-offsets.test b/test/DebugInfo/dwarfdump-str-offsets.test index 0465357ba32a..c09135580fe6 100644 --- a/test/DebugInfo/dwarfdump-str-offsets.test +++ b/test/DebugInfo/dwarfdump-str-offsets.test @@ -1,92 +1,94 @@ -RUN: llvm-dwarfdump %p/Inputs/dwarfdump-str-offsets.x86_64.o | FileCheck %s +RUN: llvm-dwarfdump %p/Inputs/dwarfdump-str-offsets.x86_64.o | FileCheck --check-prefix=COMMON \ +RUN: --check-prefix=SPLIT %s +RUN: llvm-dwarfdump %p/Inputs/dwarfdump-str-offsets-macho.o | FileCheck --check-prefix=COMMON %s ; We are using a hand-constructed object file and are interest in the correct ; diplay of the DW_str_offsetsbase attribute, the correct display of strings ; and the dump of the .debug_str_offsets[.dwo] table. ; ; Abbreviation for DW_AT_str_offsets_base -CHECK: .debug_abbrev contents: -CHECK-NOT: contents: -CHECK: DW_TAG_compile_unit -CHECK-NOT: DW_TAG -CHECK: DW_AT_str_offsets_base DW_FORM_sec_offset +COMMON: .debug_abbrev contents: +COMMON-NOT: contents: +COMMON: DW_TAG_compile_unit +COMMON-NOT: DW_TAG +COMMON: DW_AT_str_offsets_base DW_FORM_sec_offset ; Verify that strings are displayed correctly as indexed strings -CHECK: .debug_info contents: -CHECK-NOT: contents: -CHECK: DW_TAG_compile_unit -CHECK-NEXT: DW_AT_producer [DW_FORM_strx] ( indexed (00000000) string = "Handmade DWARF producer") -CHECK-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "Compile_Unit_1") -CHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008) -CHECK-NEXT: DW_AT_comp_dir [DW_FORM_strx] ( indexed (00000002) string = "/home/test/CU1") -CHECK-NOT: NULL -CHECK: DW_TAG_subprogram -CHECK-NEXT: DW_AT_name [DW_FORM_strx1] ( indexed (00000003) string = "MyFunc") -CHECK-NOT: NULL -CHECK: DW_TAG_variable -CHECK-NEXT: DW_AT_name [DW_FORM_strx2] ( indexed (00000004) string = "MyVar1") -CHECK-NOT: NULL -CHECK: DW_TAG_variable -CHECK-NEXT: DW_AT_name [DW_FORM_strx3] ( indexed (00000005) string = "MyVar2") -CHECK-NOT: NULL -CHECK: DW_TAG_variable -CHECK-NEXT: DW_AT_name [DW_FORM_strx4] ( indexed (00000006) string = "MyVar3") +COMMON: .debug_info contents: +COMMON-NOT: contents: +COMMON: DW_TAG_compile_unit +COMMON-NEXT: DW_AT_producer [DW_FORM_strx] ( indexed (00000000) string = "Handmade DWARF producer") +COMMON-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "Compile_Unit_1") +COMMON-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008) +COMMON-NEXT: DW_AT_comp_dir [DW_FORM_strx] ( indexed (00000002) string = "/home/test/CU1") +COMMON-NOT: NULL +COMMON: DW_TAG_subprogram +COMMON-NEXT: DW_AT_name [DW_FORM_strx1] ( indexed (00000003) string = "MyFunc") +COMMON-NOT: NULL +COMMON: DW_TAG_variable +COMMON-NEXT: DW_AT_name [DW_FORM_strx2] ( indexed (00000004) string = "MyVar1") +COMMON-NOT: NULL +COMMON: DW_TAG_variable +COMMON-NEXT: DW_AT_name [DW_FORM_strx3] ( indexed (00000005) string = "MyVar2") +COMMON-NOT: NULL +COMMON: DW_TAG_variable +COMMON-NEXT: DW_AT_name [DW_FORM_strx4] ( indexed (00000006) string = "MyVar3") ; Second compile unit (b.cpp) -CHECK: DW_TAG_compile_unit -CHECK-NEXT: DW_AT_producer [DW_FORM_strx] ( indexed (00000000) string = "Handmade DWARF producer") -CHECK-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "Compile_Unit_2") -CHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x0000002c) -CHECK-NEXT: DW_AT_comp_dir [DW_FORM_strx] ( indexed (00000002) string = "/home/test/CU2") +COMMON: DW_TAG_compile_unit +COMMON-NEXT: DW_AT_producer [DW_FORM_strx] ( indexed (00000000) string = "Handmade DWARF producer") +COMMON-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "Compile_Unit_2") +COMMON-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x0000002c) +COMMON-NEXT: DW_AT_comp_dir [DW_FORM_strx] ( indexed (00000002) string = "/home/test/CU2") ; The split CU -CHECK: .debug_info.dwo contents: -CHECK-NOT: contents: -CHECK: DW_TAG_compile_unit -CHECK-NEXT: DW_AT_producer [DW_FORM_strx] ( indexed (00000000) string = "Handmade split DWARF producer") -CHECK-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "V5_split_compile_unit") -CHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008) -CHECK-NEXT: DW_AT_comp_dir [DW_FORM_strx] ( indexed (00000002) string = "/home/test/splitCU") +SPLIT: .debug_info.dwo contents: +SPLIT-NOT: contents: +SPLIT: DW_TAG_compile_unit +SPLIT-NEXT: DW_AT_producer [DW_FORM_strx] ( indexed (00000000) string = "Handmade split DWARF producer") +SPLIT-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "V5_split_compile_unit") +SPLIT-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000008) +SPLIT-NEXT: DW_AT_comp_dir [DW_FORM_strx] ( indexed (00000002) string = "/home/test/splitCU") ; The type unit -CHECK: .debug_types contents: -CHECK: DW_TAG_type_unit -CHECK-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000000) string = "Type_Unit") -CHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000040) -CHECK: DW_TAG_structure_type -CHECK-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "MyStruct") +COMMON: .debug_types contents: +COMMON: DW_TAG_type_unit +COMMON-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000000) string = "Type_Unit") +COMMON-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x00000040) +COMMON: DW_TAG_structure_type +COMMON-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "MyStruct") ; The split type unit -CHECK: .debug_types.dwo contents: -CHECK: DW_TAG_type_unit -CHECK-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000000) string = "V5_split_type_unit") -CHECK-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x0000001c) -CHECK: DW_TAG_structure_type -CHECK-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "V5_split_Mystruct") +SPLIT: .debug_types.dwo contents: +SPLIT: DW_TAG_type_unit +SPLIT-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000000) string = "V5_split_type_unit") +SPLIT-NEXT: DW_AT_str_offsets_base [DW_FORM_sec_offset] (0x0000001c) +SPLIT: DW_TAG_structure_type +SPLIT-NEXT: DW_AT_name [DW_FORM_strx] ( indexed (00000001) string = "V5_split_Mystruct") ; The .debug_str_offsets section -CHECK: .debug_str_offsets contents: -CHECK-NEXT: 0x00000000: Contribution size = 28, Version = 5 -CHECK-NEXT: 0x00000008: 00000000 "Handmade DWARF producer" -CHECK-NEXT: 0x0000000c: 00000018 "Compile_Unit_1" -CHECK-NEXT: 0x00000010: 00000027 "/home/test/CU1" -CHECK-NEXT: 0x00000014: 00000067 "MyFunc" -CHECK-NEXT: 0x00000018: 0000006e "MyVar1" -CHECK-NEXT: 0x0000001c: 00000075 "MyVar2" -CHECK-NEXT: 0x00000020: 0000007c "MyVar3" -CHECK-NEXT: 0x00000024: Contribution size = 12, Version = 5 -CHECK-NEXT: 0x0000002c: 00000000 "Handmade DWARF producer" -CHECK-NEXT: 0x00000030: 00000036 "Compile_Unit_2" -CHECK-NEXT: 0x00000034: 00000045 "/home/test/CU2" -CHECK-NEXT: 0x00000038: Contribution size = 8, Version = 5 -CHECK-NEXT: 0x00000040: 00000054 "Type_Unit" -CHECK-NEXT: 0x00000044: 0000005e "MyStruct" +COMMON: .debug_str_offsets contents: +COMMON-NEXT: 0x00000000: Contribution size = 28, Version = 5 +COMMON-NEXT: 0x00000008: 00000000 "Handmade DWARF producer" +COMMON-NEXT: 0x0000000c: 00000018 "Compile_Unit_1" +COMMON-NEXT: 0x00000010: 00000027 "/home/test/CU1" +COMMON-NEXT: 0x00000014: 00000067 "MyFunc" +COMMON-NEXT: 0x00000018: 0000006e "MyVar1" +COMMON-NEXT: 0x0000001c: 00000075 "MyVar2" +COMMON-NEXT: 0x00000020: 0000007c "MyVar3" +COMMON-NEXT: 0x00000024: Contribution size = 12, Version = 5 +COMMON-NEXT: 0x0000002c: 00000000 "Handmade DWARF producer" +COMMON-NEXT: 0x00000030: 00000036 "Compile_Unit_2" +COMMON-NEXT: 0x00000034: 00000045 "/home/test/CU2" +COMMON-NEXT: 0x00000038: Contribution size = 8, Version = 5 +COMMON-NEXT: 0x00000040: 00000054 "Type_Unit" +COMMON-NEXT: 0x00000044: 0000005e "MyStruct" -CHECK: .debug_str_offsets.dwo contents: -CHECK-NEXT: 0x00000000: Contribution size = 12, Version = 5 -CHECK-NEXT: 0x00000008: 00000000 "Handmade split DWARF producer" -CHECK-NEXT: 0x0000000c: 0000001e "V5_split_compile_unit" -CHECK-NEXT: 0x00000010: 00000034 "/home/test/splitCU" -CHECK-NEXT: 0x00000014: Contribution size = 8, Version = 5 -CHECK-NEXT: 0x0000001c: 00000047 "V5_split_type_unit" -CHECK-NEXT: 0x00000020: 0000005a "V5_split_Mystruct" +SPLIT: .debug_str_offsets.dwo contents: +SPLIT-NEXT: 0x00000000: Contribution size = 12, Version = 5 +SPLIT-NEXT: 0x00000008: 00000000 "Handmade split DWARF producer" +SPLIT-NEXT: 0x0000000c: 0000001e "V5_split_compile_unit" +SPLIT-NEXT: 0x00000010: 00000034 "/home/test/splitCU" +SPLIT-NEXT: 0x00000014: Contribution size = 8, Version = 5 +SPLIT-NEXT: 0x0000001c: 00000047 "V5_split_type_unit" +SPLIT-NEXT: 0x00000020: 0000005a "V5_split_Mystruct" diff --git a/test/DebugInfo/invalid-relocations.test b/test/DebugInfo/invalid-relocations.test new file mode 100644 index 000000000000..2252e1a205c3 --- /dev/null +++ b/test/DebugInfo/invalid-relocations.test @@ -0,0 +1,35 @@ +# RUN: yaml2obj %s > %t.o +# RUN: llvm-dwarfdump %t.o 2>&1 | FileCheck %s +# CHECK: failed to compute relocation: Unknown + +!ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_386 +Sections: + - Type: SHT_PROGBITS + Name: .text + Flags: [ ] + AddressAlign: 0x04 + Content: "0000" + - Type: SHT_PROGBITS + Name: .debug_info + Flags: [ ] + AddressAlign: 0x04 + Content: "0000" + - Type: SHT_REL + Name: .rel.debug_info + Link: .symtab + Info: .debug_info + Relocations: + - Offset: 0 + Symbol: _start + Type: 0xFF +Symbols: + Global: + - Name: _start + Type: STT_FUNC + Section: .text + Value: 0x0 diff --git a/test/DebugInfo/llvm-symbolizer.test b/test/DebugInfo/llvm-symbolizer.test index 2c64804659fc..bcad37cf9a48 100644 --- a/test/DebugInfo/llvm-symbolizer.test +++ b/test/DebugInfo/llvm-symbolizer.test @@ -10,9 +10,10 @@ RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x8dc" >> %t.input RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0xa05" >> %t.input RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x987" >> %t.input RUN: echo "%p/Inputs/dwarfdump-inl-test.high_pc.elf-x86-64 0x568" >> %t.input -RUN: echo "\"%p/Inputs/dwarfdump-test3.elf-x86-64 space\" 0x640" >> %t.input -RUN: echo "\"%p/Inputs/dwarfdump-test3.elf-x86-64 space\" 0x633" >> %t.input -RUN: echo "\"%p/Inputs/dwarfdump-test3.elf-x86-64 space\" 0x62d" >> %t.input +RUN: cp "%p/Inputs/dwarfdump-test3.elf-x86-64-space" "%T/dwarfdump-test3.elf-x86-64 space" +RUN: echo "\"%T/dwarfdump-test3.elf-x86-64 space\" 0x640" >> %t.input +RUN: echo "\"%T/dwarfdump-test3.elf-x86-64 space\" 0x633" >> %t.input +RUN: echo "\"%T/dwarfdump-test3.elf-x86-64 space\" 0x62d" >> %t.input RUN: echo "%p/Inputs/macho-universal 0x1f84" >> %t.input RUN: echo "%p/Inputs/macho-universal:i386 0x1f67" >> %t.input RUN: echo "%p/Inputs/macho-universal:x86_64 0x100000f05" >> %t.input |