| # REQUIRES: x86 |
| # RUN: llvm-mc -filetype=obj %s -o %t.obj -triple x86_64-windows-msvc |
| # RUN: lld-link -entry:main -nodefaultlib %t.obj -out:%t.exe -pdb:%t.pdb -debug |
| # RUN: llvm-symbolizer --obj=%t.exe --relative-address \ |
| # RUN: 0x1000 0x1003 0x1010 0x1013 | FileCheck %s |
| |
| # Compiled from this cpp code: |
| # int f1(int x) { |
| # int y = x + 1; |
| # return y; |
| # } |
| # int f2(int n) { |
| # return f1(n); |
| # } |
| # int main() { |
| # return f2(100); |
| # } |
| |
| .text |
| .def @feat.00; |
| .scl 3; |
| .type 0; |
| .endef |
| .globl @feat.00 |
| .set @feat.00, 0 |
| .file "t.cpp" |
| .def "?f1@@YAHH@Z"; |
| .scl 2; |
| .type 32; |
| .endef |
| .globl "?f1@@YAHH@Z" # -- Begin function ?f1@@YAHH@Z |
| .p2align 4, 0x90 |
| "?f1@@YAHH@Z": # @"?f1@@YAHH@Z" |
| .Lfunc_begin0: |
| .cv_func_id 0 |
| # %bb.0: # %entry |
| .cv_file 1 "C:\\src\\tests\\t.cpp" "E6E6D87A9021656AD44E74484F5BA421" 1 |
| |
| # CHECK: f1(int) |
| # CHECK-NEXT: t.cpp:2:13 |
| .cv_loc 0 1 2 13 # t.cpp:2:13 |
| # kill: def $ecx killed $ecx def $rcx |
| leal 1(%rcx), %eax |
| |
| # CHECK: f1(int) |
| # CHECK-NEXT: t.cpp:3:3 |
| .cv_loc 0 1 3 3 # t.cpp:3:3 |
| retq |
| .Ltmp0: |
| .Lfunc_end0: |
| # -- End function |
| .def "?f2@@YAHH@Z"; |
| .scl 2; |
| .type 32; |
| .endef |
| .globl "?f2@@YAHH@Z" # -- Begin function ?f2@@YAHH@Z |
| .p2align 4, 0x90 |
| "?f2@@YAHH@Z": # @"?f2@@YAHH@Z" |
| .Lfunc_begin1: |
| .cv_func_id 1 |
| # %bb.0: # %entry |
| # CHECK: f1 |
| # CHECK-NEXT: t.cpp:2:0 |
| # CHECK-NEXT: f2(int) |
| # CHECK-NEXT: t.cpp:6:3 |
| .cv_inline_site_id 2 within 1 inlined_at 1 6 10 |
| .cv_loc 2 1 2 13 # t.cpp:2:13 |
| # kill: def $ecx killed $ecx def $rcx |
| leal 1(%rcx), %eax |
| .Ltmp1: |
| .cv_loc 1 1 6 3 # t.cpp:6:3 |
| retq |
| # CHECK: f2(int) |
| # CHECK-NEXT: t.cpp:6:3 |
| .Ltmp2: |
| .Lfunc_end1: |
| # -- End function |
| .def main; |
| .scl 2; |
| .type 32; |
| .endef |
| .globl main # -- Begin function main |
| .p2align 4, 0x90 |
| main: # @main |
| .Lfunc_begin2: |
| .cv_func_id 3 |
| # %bb.0: # %entry |
| .cv_loc 3 1 9 3 # t.cpp:9:3 |
| movl $101, %eax |
| retq |
| .Ltmp3: |
| .Lfunc_end2: |
| # -- End function |
| .section .debug$S,"dr" |
| .p2align 2 |
| .long 4 # Debug section magic |
| .long 241 |
| .long .Ltmp5-.Ltmp4 # Subsection size |
| .Ltmp4: |
| .short .Ltmp7-.Ltmp6 # Record length |
| .Ltmp6: |
| .short 4412 # Record kind: S_COMPILE3 |
| .long 1 # Flags and language |
| .short 208 # CPUType |
| .short 12 # Frontend version |
| .short 0 |
| .short 0 |
| .short 0 |
| .short 12000 # Backend version |
| .short 0 |
| .short 0 |
| .short 0 |
| .asciz "clang version 12.0.0 (https://github.com/llvm/llvm-project.git e2e86f4e77ec2fd79743f4d0e94689e9668600ad)" # Null-terminated compiler version string |
| .p2align 2 |
| .Ltmp7: |
| .Ltmp5: |
| .p2align 2 |
| .long 246 # Inlinee lines subsection |
| .long .Ltmp9-.Ltmp8 # Subsection size |
| .Ltmp8: |
| .long 0 # Inlinee lines signature |
| |
| # Inlined function f1 starts at t.cpp:1 |
| .long 4098 # Type index of inlined function |
| .cv_filechecksumoffset 1 # Offset into filechecksum table |
| .long 1 # Starting line number |
| .Ltmp9: |
| .p2align 2 |
| .long 241 # Symbol subsection for f1 |
| .long .Ltmp11-.Ltmp10 # Subsection size |
| .Ltmp10: |
| .short .Ltmp13-.Ltmp12 # Record length |
| .Ltmp12: |
| .short 4423 # Record kind: S_GPROC32_ID |
| .long 0 # PtrParent |
| .long 0 # PtrEnd |
| .long 0 # PtrNext |
| .long .Lfunc_end0-"?f1@@YAHH@Z" # Code size |
| .long 0 # Offset after prologue |
| .long 0 # Offset before epilogue |
| .long 4098 # Function type index |
| .secrel32 "?f1@@YAHH@Z" # Function section relative address |
| .secidx "?f1@@YAHH@Z" # Function section index |
| .byte 0 # Flags |
| .asciz "f1" # Function name |
| .p2align 2 |
| .Ltmp13: |
| .short .Ltmp15-.Ltmp14 # Record length |
| .Ltmp14: |
| .short 4114 # Record kind: S_FRAMEPROC |
| .long 0 # FrameSize |
| .long 0 # Padding |
| .long 0 # Offset of padding |
| .long 0 # Bytes of callee saved registers |
| .long 0 # Exception handler offset |
| .short 0 # Exception handler section |
| .long 1048576 # Flags (defines frame register) |
| .p2align 2 |
| .Ltmp15: |
| .short 2 # Record length |
| .short 4431 # Record kind: S_PROC_ID_END |
| .Ltmp11: |
| .p2align 2 |
| .cv_linetable 0, "?f1@@YAHH@Z", .Lfunc_end0 |
| .long 241 # Symbol subsection for f2 |
| .long .Ltmp17-.Ltmp16 # Subsection size |
| .Ltmp16: |
| .short .Ltmp19-.Ltmp18 # Record length |
| .Ltmp18: |
| .short 4423 # Record kind: S_GPROC32_ID |
| .long 0 # PtrParent |
| .long 0 # PtrEnd |
| .long 0 # PtrNext |
| .long .Lfunc_end1-"?f2@@YAHH@Z" # Code size |
| .long 0 # Offset after prologue |
| .long 0 # Offset before epilogue |
| .long 4099 # Function type index |
| .secrel32 "?f2@@YAHH@Z" # Function section relative address |
| .secidx "?f2@@YAHH@Z" # Function section index |
| .byte 0 # Flags |
| .asciz "f2" # Function name |
| .p2align 2 |
| .Ltmp19: |
| .short .Ltmp21-.Ltmp20 # Record length |
| .Ltmp20: |
| .short 4114 # Record kind: S_FRAMEPROC |
| .long 0 # FrameSize |
| .long 0 # Padding |
| .long 0 # Offset of padding |
| .long 0 # Bytes of callee saved registers |
| .long 0 # Exception handler offset |
| .short 0 # Exception handler section |
| .long 1048576 # Flags (defines frame register) |
| .p2align 2 |
| .Ltmp21: |
| .short .Ltmp23-.Ltmp22 # Record length |
| .Ltmp22: |
| .short 4429 # Record kind: S_INLINESITE |
| .long 0 # PtrParent |
| .long 0 # PtrEnd |
| .long 4098 # Inlinee type index |
| .cv_inline_linetable 2 1 1 .Lfunc_begin1 .Lfunc_end1 |
| .p2align 2 |
| .Ltmp23: |
| .short 2 # Record length |
| .short 4430 # Record kind: S_INLINESITE_END |
| .short 2 # Record length |
| .short 4431 # Record kind: S_PROC_ID_END |
| .Ltmp17: |
| .p2align 2 |
| .cv_linetable 1, "?f2@@YAHH@Z", .Lfunc_end1 |
| .long 241 # Symbol subsection for main |
| .long .Ltmp25-.Ltmp24 # Subsection size |
| .Ltmp24: |
| .short .Ltmp27-.Ltmp26 # Record length |
| .Ltmp26: |
| .short 4423 # Record kind: S_GPROC32_ID |
| .long 0 # PtrParent |
| .long 0 # PtrEnd |
| .long 0 # PtrNext |
| .long .Lfunc_end2-main # Code size |
| .long 0 # Offset after prologue |
| .long 0 # Offset before epilogue |
| .long 4100 # Function type index |
| .secrel32 main # Function section relative address |
| .secidx main # Function section index |
| .byte 0 # Flags |
| .asciz "main" # Function name |
| .p2align 2 |
| .Ltmp27: |
| .short .Ltmp29-.Ltmp28 # Record length |
| .Ltmp28: |
| .short 4114 # Record kind: S_FRAMEPROC |
| .long 0 # FrameSize |
| .long 0 # Padding |
| .long 0 # Offset of padding |
| .long 0 # Bytes of callee saved registers |
| .long 0 # Exception handler offset |
| .short 0 # Exception handler section |
| .long 1048576 # Flags (defines frame register) |
| .p2align 2 |
| .Ltmp29: |
| .short 2 # Record length |
| .short 4431 # Record kind: S_PROC_ID_END |
| .Ltmp25: |
| .p2align 2 |
| .cv_linetable 3, main, .Lfunc_end2 |
| .cv_filechecksums # File index to string table offset subsection |
| .cv_stringtable # String table |
| .long 241 |
| .long .Ltmp31-.Ltmp30 # Subsection size |
| .Ltmp30: |
| .short .Ltmp33-.Ltmp32 # Record length |
| .Ltmp32: |
| .short 4428 # Record kind: S_BUILDINFO |
| .long 4103 # LF_BUILDINFO index |
| .p2align 2 |
| .Ltmp33: |
| .Ltmp31: |
| .p2align 2 |
| .section .debug$T,"dr" |
| .p2align 2 |
| .long 4 # Debug section magic |
| # ArgList (0x1000) |
| .short 0x6 # Record length |
| .short 0x1201 # Record kind: LF_ARGLIST |
| .long 0x0 # NumArgs |
| # Procedure (0x1001) |
| .short 0xe # Record length |
| .short 0x1008 # Record kind: LF_PROCEDURE |
| .long 0x3 # ReturnType: void |
| .byte 0x0 # CallingConvention: NearC |
| .byte 0x0 # FunctionOptions |
| .short 0x0 # NumParameters |
| .long 0x1000 # ArgListType: () |
| # FuncId (0x1002) |
| .short 0xe # Record length |
| .short 0x1601 # Record kind: LF_FUNC_ID |
| .long 0x0 # ParentScope |
| .long 0x1001 # FunctionType: void () |
| .asciz "f1" # Name |
| .byte 241 |
| # FuncId (0x1003) |
| .short 0xe # Record length |
| .short 0x1601 # Record kind: LF_FUNC_ID |
| .long 0x0 # ParentScope |
| .long 0x1001 # FunctionType: void () |
| .asciz "f2" # Name |
| .byte 241 |
| # FuncId (0x1004) |
| .short 0x12 # Record length |
| .short 0x1601 # Record kind: LF_FUNC_ID |
| .long 0x0 # ParentScope |
| .long 0x1001 # FunctionType: void () |
| .asciz "main" # Name |
| .byte 243 |
| .byte 242 |
| .byte 241 |
| # StringId (0x1005) |
| .short 0x16 # Record length |
| .short 0x1605 # Record kind: LF_STRING_ID |
| .long 0x0 # Id |
| .asciz "C:\\src\\tests" # StringData |
| .byte 243 |
| .byte 242 |
| .byte 241 |
| # StringId (0x1006) |
| .short 0xe # Record length |
| .short 0x1605 # Record kind: LF_STRING_ID |
| .long 0x0 # Id |
| .asciz "<stdin>" # StringData |
| # BuildInfo (0x1007) |
| .short 0x1a # Record length |
| .short 0x1603 # Record kind: LF_BUILDINFO |
| .short 0x5 # NumArgs |
| .long 0x1005 # Argument: C:\src\tests |
| .long 0x0 # Argument |
| .long 0x1006 # Argument: <stdin> |
| .long 0x0 # Argument |
| .long 0x0 # Argument |
| .byte 242 |
| .byte 241 |