;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 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 -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 MFUN32: CodeViewDebugInfo [ MFUN32-NEXT: Magic: 0x4 MFUN32-NEXT: Subsection [ MFUN32-NEXT: Type: 0xF1 MFUN32-NEXT: PayloadSize: 0x52 MFUN32: ] MFUN32-NEXT: Subsection [ MFUN32-NEXT: Type: 0xF5 MFUN32-NEXT: PayloadSize: 0x24 MFUN32: ] 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: PayloadSize: 0x30 MFUN32: FunctionName: _x MFUN32-NEXT: ] MFUN32-NEXT: Subsection [ MFUN32-NEXT: Type: 0xF5 MFUN32-NEXT: PayloadSize: 0x24 MFUN32: ] 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: PayloadSize: 0x30 MFUN32: FunctionName: _y MFUN32-NEXT: ] MFUN32-NEXT: Subsection [ MFUN32-NEXT: Type: 0xF5 MFUN32-NEXT: PayloadSize: 0x24 MFUN32: ] 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-NEXT: PayloadSize: 0x40 MFUN32: FunctionName: _f MFUN32-NEXT: ] MFUN32-NEXT: Subsection [ MFUN32-NEXT: Type: 0xF4 MFUN32-NEXT: PayloadSize: 0x18 MFUN32: ] MFUN32-NEXT: Subsection [ MFUN32-NEXT: Type: 0xF3 MFUN32-NEXT: PayloadSize: 0x46 MFUN32: ] MFUN32-NEXT: Subsection [ MFUN32-NEXT: Type: 0xF1 MFUN32-NEXT: PayloadSize: 0x8 MFUN32: ] MFUN32-NEXT: FunctionLineTable [ MFUN32-NEXT: FunctionName: _x MFUN32-NEXT: CodeSize: 0xA MFUN32-NEXT: FilenameSegment [ MFUN32-NEXT: Filename: d:\source.c MFUN32-NEXT: +0x0: 3 MFUN32-NEXT: +0x3: 4 MFUN32-NEXT: +0x8: 5 MFUN32-NEXT: ] MFUN32-NEXT: ] MFUN32-NEXT: FunctionLineTable [ MFUN32-NEXT: FunctionName: _y MFUN32-NEXT: CodeSize: 0xA MFUN32-NEXT: FilenameSegment [ MFUN32-NEXT: Filename: d:\source.c MFUN32-NEXT: +0x0: 7 MFUN32-NEXT: +0x3: 8 MFUN32-NEXT: +0x8: 9 MFUN32-NEXT: ] MFUN32-NEXT: ] MFUN32-NEXT: FunctionLineTable [ MFUN32-NEXT: FunctionName: _f MFUN32-NEXT: CodeSize: 0x14 MFUN32-NEXT: FilenameSegment [ MFUN32-NEXT: Filename: d:\source.c MFUN32-NEXT: +0x0: 11 MFUN32-NEXT: +0x3: 12 MFUN32-NEXT: +0x8: 13 MFUN32-NEXT: +0xD: 14 MFUN32-NEXT: +0x12: 15 MFUN32-NEXT: ] MFUN32-NEXT: ] MFUN32-NEXT: ] MFUN64: CodeViewDebugInfo [ MFUN64-NEXT: Magic: 0x4 MFUN64-NEXT: Subsection [ MFUN64-NEXT: Type: 0xF1 MFUN64-NEXT: PayloadSize: 0x52 MFUN64: ] 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: PayloadSize: 0x30 MFUN64: FunctionName: x MFUN64-NEXT: ] 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: PayloadSize: 0x30 MFUN64: FunctionName: y MFUN64-NEXT: ] 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-NEXT: PayloadSize: 0x40 MFUN64: FunctionName: f MFUN64-NEXT: ] MFUN64-NEXT: Subsection [ MFUN64-NEXT: Type: 0xF4 MFUN64-NEXT: PayloadSize: 0x18 MFUN64: ] MFUN64-NEXT: Subsection [ MFUN64-NEXT: Type: 0xF3 MFUN64-NEXT: PayloadSize: 0xD MFUN64: ] MFUN64-NEXT: Subsection [ MFUN64-NEXT: Type: 0xF1 MFUN64-NEXT: PayloadSize: 0x8 MFUN64: ] MFUN64-NEXT: FunctionLineTable [ MFUN64-NEXT: FunctionName: x MFUN64-NEXT: CodeSize: 0xE MFUN64-NEXT: FilenameSegment [ MFUN64-NEXT: Filename: d:\source.c MFUN64-NEXT: +0x0: 3 MFUN64-NEXT: +0x4: 4 MFUN64-NEXT: +0x9: 5 MFUN64-NEXT: ] MFUN64-NEXT: ] MFUN64-NEXT: FunctionLineTable [ MFUN64-NEXT: FunctionName: y MFUN64-NEXT: CodeSize: 0xE MFUN64-NEXT: FilenameSegment [ MFUN64-NEXT: Filename: d:\source.c MFUN64-NEXT: +0x0: 7 MFUN64-NEXT: +0x4: 8 MFUN64-NEXT: +0x9: 9 MFUN64-NEXT: ] MFUN64-NEXT: ] MFUN64-NEXT: FunctionLineTable [ MFUN64-NEXT: FunctionName: f MFUN64-NEXT: CodeSize: 0x18 MFUN64-NEXT: FilenameSegment [ MFUN64-NEXT: Filename: d:\source.c MFUN64-NEXT: +0x0: 11 MFUN64-NEXT: +0x4: 12 MFUN64-NEXT: +0x9: 13 MFUN64-NEXT: +0xE: 14 MFUN64-NEXT: +0x13: 15 MFUN64-NEXT: ] MFUN64-NEXT: ] MFUN64-NEXT: ] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 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: PayloadSize: 0x51 MFILE32: ] MFILE32-NEXT: Subsection [ MFILE32-NEXT: Type: 0xF5 MFILE32-NEXT: PayloadSize: 0x24 MFILE32: ] 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-NEXT: PayloadSize: 0x64 MFILE32: FunctionName: _f MFILE32-NEXT: ] MFILE32-NEXT: Subsection [ MFILE32-NEXT: Type: 0xF4 MFILE32-NEXT: PayloadSize: 0x28 MFILE32: ] MFILE32-NEXT: Subsection [ MFILE32-NEXT: Type: 0xF3 MFILE32-NEXT: PayloadSize: 0x57 MFILE32: ] MFILE32-NEXT: Subsection [ MFILE32-NEXT: Type: 0xF1 MFILE32-NEXT: PayloadSize: 0x8 MFILE32: ] MFILE32-NEXT: FunctionLineTable [ MFILE32-NEXT: FunctionName: _f MFILE32-NEXT: CodeSize: 0x14 MFILE32-NEXT: FilenameSegment [ MFILE32-NEXT: Filename: d:\input.c MFILE32-NEXT: +0x0: 3 MFILE32-NEXT: ] MFILE32-NEXT: FilenameSegment [ MFILE32-NEXT: Filename: d:\one.c MFILE32-NEXT: +0x3: 1 MFILE32-NEXT: ] MFILE32-NEXT: FilenameSegment [ MFILE32-NEXT: Filename: d:\two.c MFILE32-NEXT: +0x8: 2 MFILE32-NEXT: ] MFILE32-NEXT: FilenameSegment [ MFILE32-NEXT: Filename: d:\one.c MFILE32-NEXT: +0xD: 7 MFILE32-NEXT: +0x12: 8 MFILE32-NEXT: ] MFILE32-NEXT: ] MFILE32-NEXT: ] MFILE64: CodeViewDebugInfo [ MFILE64-NEXT: Magic: 0x4 MFILE64-NEXT: Subsection [ MFILE64-NEXT: Type: 0xF1 MFILE64-NEXT: PayloadSize: 0x51 MFILE64: ] 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-NEXT: PayloadSize: 0x64 MFILE64: FunctionName: f MFILE64-NEXT: ] MFILE64-NEXT: Subsection [ MFILE64-NEXT: Type: 0xF4 MFILE64-NEXT: PayloadSize: 0x28 MFILE64: ] MFILE64-NEXT: Subsection [ MFILE64-NEXT: Type: 0xF3 MFILE64-NEXT: PayloadSize: 0x1E MFILE64: ] MFILE64-NEXT: Subsection [ MFILE64-NEXT: Type: 0xF1 MFILE64-NEXT: PayloadSize: 0x8 MFILE64: ] MFILE64-NEXT: FunctionLineTable [ MFILE64-NEXT: FunctionName: f MFILE64-NEXT: CodeSize: 0x18 MFILE64-NEXT: FilenameSegment [ MFILE64-NEXT: Filename: d:\input.c MFILE64-NEXT: +0x0: 3 MFILE64-NEXT: ] MFILE64-NEXT: FilenameSegment [ MFILE64-NEXT: Filename: d:\one.c MFILE64-NEXT: +0x4: 1 MFILE64-NEXT: ] MFILE64-NEXT: FilenameSegment [ MFILE64-NEXT: Filename: d:\two.c MFILE64-NEXT: +0x9: 2 MFILE64-NEXT: ] MFILE64-NEXT: FilenameSegment [ MFILE64-NEXT: Filename: d:\one.c MFILE64-NEXT: +0xE: 7 MFILE64-NEXT: +0x13: 8 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: 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: 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: ]