-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2012-i368 \
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; The following two object files were generated using the following command:
+; D:\> cl /Z7 /c source.c
+; with the following contents of D:\source.c:
+; void z(void);
+;
+; void x(void) {
+; z();
+; }
+;
+; void y(void) {
+; z();
+; }
+;
+; void f(void) {
+; x();
+; y();
+; z();
+; }
+; using 32-/64-bit versions of CL v17.00.61030 and v18.00.21005.1 respectively.
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2012-i368 \
RUN: | FileCheck %s -check-prefix MFUN32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2012-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2013-i368 \
+RUN: | FileCheck %s -check-prefix MFUN32
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2012-x86_64 \
+RUN: | FileCheck %s -check-prefix MFUN64
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2013-x86_64 \
RUN: | FileCheck %s -check-prefix MFUN64
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2012-i368 \
-RUN: | FileCheck %s -check-prefix MFILE32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2012-x86_64 \
-RUN: | FileCheck %s -check-prefix MFILE64
-MFUN32: CodeViewLineTables [
+MFUN32: CodeViewDebugInfo [
MFUN32-NEXT: Magic: 0x4
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF1
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF1
MFUN32-NEXT: PayloadSize: 0x4B
+MFUN32: ProcStart {
+MFUN32-NEXT: DisplayName: x
+MFUN32-NEXT: Section: _x
+MFUN32-NEXT: CodeSize: 0xA
+MFUN32-NEXT: }
+MFUN32-NEXT: ProcEnd
MFUN32: ]
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF2
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF1
MFUN32-NEXT: PayloadSize: 0x4B
+MFUN32: ProcStart {
+MFUN32-NEXT: DisplayName: y
+MFUN32-NEXT: Section: _y
+MFUN32-NEXT: CodeSize: 0xA
+MFUN32-NEXT: }
+MFUN32-NEXT: ProcEnd
MFUN32: ]
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF2
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF1
MFUN32-NEXT: PayloadSize: 0x4B
+MFUN32: ProcStart {
+MFUN32-NEXT: DisplayName: f
+MFUN32-NEXT: Section: _f
+MFUN32-NEXT: CodeSize: 0x14
+MFUN32-NEXT: }
+MFUN32-NEXT: ProcEnd
MFUN32: ]
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF2
MFUN32: ]
MFUN32-NEXT: FunctionLineTable [
MFUN32-NEXT: FunctionName: _x
+MFUN32-NEXT: Flags: 0x0
MFUN32-NEXT: CodeSize: 0xA
MFUN32-NEXT: FilenameSegment [
MFUN32-NEXT: Filename: d:\source.c
MFUN32-NEXT: ]
MFUN32-NEXT: FunctionLineTable [
MFUN32-NEXT: FunctionName: _y
+MFUN32-NEXT: Flags: 0x0
MFUN32-NEXT: CodeSize: 0xA
MFUN32-NEXT: FilenameSegment [
MFUN32-NEXT: Filename: d:\source.c
MFUN32-NEXT: ]
MFUN32-NEXT: FunctionLineTable [
MFUN32-NEXT: FunctionName: _f
+MFUN32-NEXT: Flags: 0x0
MFUN32-NEXT: CodeSize: 0x14
MFUN32-NEXT: FilenameSegment [
MFUN32-NEXT: Filename: d:\source.c
MFUN32-NEXT: ]
MFUN32-NEXT: ]
-MFUN64: CodeViewLineTables [
+MFUN64: CodeViewDebugInfo [
MFUN64-NEXT: Magic: 0x4
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF1
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF1
MFUN64-NEXT: PayloadSize: 0x4B
+MFUN64: ProcStart {
+MFUN64-NEXT: DisplayName: x
+MFUN64-NEXT: Section: x
+MFUN64-NEXT: CodeSize: 0xE
+MFUN64-NEXT: }
+MFUN64-NEXT: ProcEnd
MFUN64: ]
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF2
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF1
MFUN64-NEXT: PayloadSize: 0x4B
+MFUN64: ProcStart {
+MFUN64-NEXT: DisplayName: y
+MFUN64-NEXT: Section: y
+MFUN64-NEXT: CodeSize: 0xE
+MFUN64-NEXT: }
+MFUN64-NEXT: ProcEnd
MFUN64: ]
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF2
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF1
MFUN64-NEXT: PayloadSize: 0x4B
+MFUN64: ProcStart {
+MFUN64-NEXT: DisplayName: f
+MFUN64-NEXT: Section: f
+MFUN64-NEXT: CodeSize: 0x18
+MFUN64-NEXT: }
+MFUN64-NEXT: ProcEnd
MFUN64: ]
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF2
MFUN64: ]
MFUN64-NEXT: FunctionLineTable [
MFUN64-NEXT: FunctionName: x
+MFUN64-NEXT: Flags: 0x0
MFUN64-NEXT: CodeSize: 0xE
MFUN64-NEXT: FilenameSegment [
MFUN64-NEXT: Filename: d:\source.c
MFUN64-NEXT: ]
MFUN64-NEXT: FunctionLineTable [
MFUN64-NEXT: FunctionName: y
+MFUN64-NEXT: Flags: 0x0
MFUN64-NEXT: CodeSize: 0xE
MFUN64-NEXT: FilenameSegment [
MFUN64-NEXT: Filename: d:\source.c
MFUN64-NEXT: ]
MFUN64-NEXT: FunctionLineTable [
MFUN64-NEXT: FunctionName: f
+MFUN64-NEXT: Flags: 0x0
MFUN64-NEXT: CodeSize: 0x18
MFUN64-NEXT: FilenameSegment [
MFUN64-NEXT: Filename: d:\source.c
MFUN64-NEXT: ]
MFUN64-NEXT: ]
-MFILE32: CodeViewLineTables [
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; The following two object files were generated using the following command:
+; D:\> cl /Z7 /c input.c
+; with the following contents of D:\input.c:
+; void g(void);
+;
+; void f(void) {
+; #line 1 "one.c"
+; g();
+; #line 2 "two.c"
+; g();
+; #line 7 "one.c"
+; g();
+; }
+; using 32-/64-bit versions of CL v17.00.61030 and v18.00.21005.1 respectively.
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2012-i368 \
+RUN: | FileCheck %s -check-prefix MFILE32
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2013-i368 \
+RUN: | FileCheck %s -check-prefix MFILE32
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2012-x86_64 \
+RUN: | FileCheck %s -check-prefix MFILE64
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2013-x86_64 \
+RUN: | FileCheck %s -check-prefix MFILE64
+
+MFILE32: CodeViewDebugInfo [
MFILE32-NEXT: Magic: 0x4
MFILE32-NEXT: Subsection [
MFILE32-NEXT: Type: 0xF1
MFILE32-NEXT: Subsection [
MFILE32-NEXT: Type: 0xF1
MFILE32-NEXT: PayloadSize: 0x4B
+MFILE32: ProcStart {
+MFILE32-NEXT: DisplayName: f
+MFILE32-NEXT: Section: _f
+MFILE32-NEXT: CodeSize: 0x14
+MFILE32-NEXT: }
+MFILE32-NEXT: ProcEnd
MFILE32: ]
MFILE32-NEXT: Subsection [
MFILE32-NEXT: Type: 0xF2
MFILE32: ]
MFILE32-NEXT: FunctionLineTable [
MFILE32-NEXT: FunctionName: _f
+MFILE32-NEXT: Flags: 0x0
MFILE32-NEXT: CodeSize: 0x14
MFILE32-NEXT: FilenameSegment [
MFILE32-NEXT: Filename: d:\input.c
MFILE32-NEXT: ]
MFILE32-NEXT: ]
-MFILE64: CodeViewLineTables [
+MFILE64: CodeViewDebugInfo [
MFILE64-NEXT: Magic: 0x4
MFILE64-NEXT: Subsection [
MFILE64-NEXT: Type: 0xF1
MFILE64-NEXT: Subsection [
MFILE64-NEXT: Type: 0xF1
MFILE64-NEXT: PayloadSize: 0x4B
+MFILE64: ProcStart {
+MFILE64-NEXT: DisplayName: f
+MFILE64-NEXT: Section: f
+MFILE64-NEXT: CodeSize: 0x18
+MFILE64-NEXT: }
+MFILE64-NEXT: ProcEnd
MFILE64: ]
MFILE64-NEXT: Subsection [
MFILE64-NEXT: Type: 0xF2
MFILE64: ]
MFILE64-NEXT: FunctionLineTable [
MFILE64-NEXT: FunctionName: f
+MFILE64-NEXT: Flags: 0x0
MFILE64-NEXT: CodeSize: 0x18
MFILE64-NEXT: FilenameSegment [
MFILE64-NEXT: Filename: d:\input.c
MFILE64-NEXT: ]
MFILE64-NEXT: ]
MFILE64-NEXT: ]
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; The following object files were generated using the following command:
+; C:\src> cl /Z7 /Gy /c test.cc
+; with the following contents of C:\src\test.cc:
+; int f()
+; {
+; return 0;
+; }
+;
+; int g()
+; {
+; return 0;
+; }
+; using 32-version of CL v17.00.61030 and v18.00.21005.1 respectively.
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/comdat-function-linetables.obj.coff-2012-i386 \
+RUN: | FileCheck %s -check-prefix MCOMDAT
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/comdat-function-linetables.obj.coff-2013-i386 \
+RUN: | FileCheck %s -check-prefix MCOMDAT
+
+MCOMDAT: ProcStart {
+MCOMDAT-NEXT: DisplayName: f
+MCOMDAT-NEXT: Section: ?f@@YAHXZ
+MCOMDAT-NEXT: CodeSize: 0x7
+MCOMDAT-NEXT: }
+MCOMDAT: FunctionLineTable [
+MCOMDAT-NEXT: FunctionName: ?f@@YAHXZ
+MCOMDAT-NEXT: Flags: 0x0
+MCOMDAT-NEXT: CodeSize: 0x7
+MCOMDAT-NEXT: FilenameSegment [
+MCOMDAT-NEXT: Filename: c:\src\test.cc
+MCOMDAT-NEXT: +0x0: 2
+MCOMDAT-NEXT: +0x3: 3
+MCOMDAT-NEXT: +0x5: 4
+MCOMDAT-NEXT: ]
+MCOMDAT-NEXT: ]
+MCOMDAT: ProcStart {
+MCOMDAT-NEXT: DisplayName: g
+MCOMDAT-NEXT: Section: ?g@@YAHXZ
+MCOMDAT-NEXT: CodeSize: 0x7
+MCOMDAT-NEXT: }
+MCOMDAT: FunctionLineTable [
+MCOMDAT-NEXT: FunctionName: ?g@@YAHXZ
+MCOMDAT-NEXT: Flags: 0x0
+MCOMDAT-NEXT: CodeSize: 0x7
+MCOMDAT-NEXT: FilenameSegment [
+MCOMDAT-NEXT: Filename: c:\src\test.cc
+MCOMDAT-NEXT: +0x0: 7
+MCOMDAT-NEXT: +0x3: 8
+MCOMDAT-NEXT: +0x5: 9
+MCOMDAT-NEXT: ]
+MCOMDAT-NEXT: ]