forked from OSchip/llvm-project
335 lines
9.8 KiB
ArmAsm
335 lines
9.8 KiB
ArmAsm
|
# 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-pdbutil dump -il %t.pdb | FileCheck %s
|
||
|
|
||
|
# The assembly was hand written to model the following C code. As of this
|
||
|
# writing, clang does not emit extra files for inlinees, so it had to be hand
|
||
|
# written.
|
||
|
|
||
|
# // t1.h:
|
||
|
# ++x;
|
||
|
# #include "t2.h"
|
||
|
# ++x;
|
||
|
|
||
|
# // t2.h:
|
||
|
# ++x;
|
||
|
# __debugbreak();
|
||
|
# ++x;
|
||
|
|
||
|
# // t.c:
|
||
|
# volatile int x;
|
||
|
# static __forceinline void inlinee_1(void) {
|
||
|
# ++x;
|
||
|
# #include "t1.inc"
|
||
|
# ++x;
|
||
|
# }
|
||
|
# int main() {
|
||
|
# ++x;
|
||
|
# inlinee_1();
|
||
|
# ++x;
|
||
|
# return x;
|
||
|
# }
|
||
|
|
||
|
# CHECK: Inlinee Lines
|
||
|
# CHECK: Mod 0000 | `{{.*}}pdb-inlinees-extrafiles.s.tmp.obj`:
|
||
|
# CHECK-NEXT: Inlinee | Line | Source File
|
||
|
# CHECK-NEXT: 0x1000 | 7 | C:\src\llvm-project\build\t.c (MD5: A79D837C976E9F0463A474D74E2EE9E7)
|
||
|
# CHECK-NEXT: C:\src\llvm-project\build\t1.h (MD5: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
|
||
|
# CHECK-NEXT: C:\src\llvm-project\build\t2.h (MD5: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
|
||
|
|
||
|
.text
|
||
|
.def @feat.00;
|
||
|
.scl 3;
|
||
|
.type 0;
|
||
|
.endef
|
||
|
.globl @feat.00
|
||
|
.set @feat.00, 0
|
||
|
.intel_syntax noprefix
|
||
|
.file "t.c"
|
||
|
.def main;
|
||
|
.scl 2;
|
||
|
.type 32;
|
||
|
.endef
|
||
|
.section .text,"xr",one_only,main
|
||
|
.globl main # -- Begin function main
|
||
|
main: # @main
|
||
|
.Lfunc_begin0:
|
||
|
.cv_func_id 0
|
||
|
# %bb.0: # %entry
|
||
|
.cv_file 1 "C:\\src\\llvm-project\\build\\t.c" "A79D837C976E9F0463A474D74E2EE9E7" 1
|
||
|
.cv_file 2 "C:\\src\\llvm-project\\build\\t1.h" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" 1
|
||
|
.cv_file 3 "C:\\src\\llvm-project\\build\\t2.h" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" 1
|
||
|
.cv_loc 0 1 13 0 # t.c:13:0
|
||
|
inc dword ptr [rip + x]
|
||
|
.Ltmp0:
|
||
|
.cv_inline_site_id 1 within 0 inlined_at 1 14 0
|
||
|
.cv_loc 1 1 3 0 # t.c:3:0
|
||
|
inc dword ptr [rip + x]
|
||
|
.Ltmp1:
|
||
|
.cv_loc 1 2 1 0 # t1.h:1:0
|
||
|
inc dword ptr [rip + x]
|
||
|
.cv_loc 1 3 1 0 # t2.h:1:0
|
||
|
inc dword ptr [rip + x]
|
||
|
.cv_loc 1 3 2 0 # t2.h:2:0
|
||
|
int3
|
||
|
.cv_loc 1 3 3 0 # t2.h:3:0
|
||
|
inc dword ptr [rip + x]
|
||
|
.cv_loc 1 2 3 0 # t1.h:3:0
|
||
|
inc dword ptr [rip + x]
|
||
|
.Ltmp2:
|
||
|
.cv_loc 1 1 5 0 # t.c:5:0
|
||
|
inc dword ptr [rip + x]
|
||
|
.Ltmp3:
|
||
|
.cv_loc 0 1 15 0 # t.c:15:0
|
||
|
inc dword ptr [rip + x]
|
||
|
.cv_loc 0 1 16 0 # t.c:16:0
|
||
|
mov eax, dword ptr [rip + x]
|
||
|
ret
|
||
|
.Ltmp4:
|
||
|
.Lfunc_end0:
|
||
|
# -- End function
|
||
|
.comm x,4,2 # @x
|
||
|
.section .debug$S,"dr"
|
||
|
.p2align 2
|
||
|
.long 4 # Debug section magic
|
||
|
.long 241
|
||
|
.long .Ltmp6-.Ltmp5 # Subsection size
|
||
|
.Ltmp5:
|
||
|
.short .Ltmp8-.Ltmp7 # Record length
|
||
|
.Ltmp7:
|
||
|
.short 4412 # Record kind: S_COMPILE3
|
||
|
.long 0 # Flags and language
|
||
|
.short 208 # CPUType
|
||
|
.short 9 # Frontend version
|
||
|
.short 0
|
||
|
.short 0
|
||
|
.short 0
|
||
|
.short 9000 # Backend version
|
||
|
.short 0
|
||
|
.short 0
|
||
|
.short 0
|
||
|
.asciz "clang version 9.0.0 (git@github.com:llvm/llvm-project.git aa762a56caf3ef2b0b41c501e66d3ef32903a2d0)" # Null-terminated compiler version string
|
||
|
.p2align 2
|
||
|
.Ltmp8:
|
||
|
.Ltmp6:
|
||
|
.p2align 2
|
||
|
.long 246 # Inlinee lines subsection
|
||
|
.long .Ltmp10-.Ltmp9 # Subsection size
|
||
|
.Ltmp9:
|
||
|
.long 1 # Inlinee lines signature, extra files
|
||
|
|
||
|
# Inlined function inlinee_1 starts at t.c:7
|
||
|
.long 4098 # Type index of inlined function
|
||
|
.cv_filechecksumoffset 1 # Offset into filechecksum table
|
||
|
.long 7 # Starting line number
|
||
|
.long 2
|
||
|
.cv_filechecksumoffset 2 # Offset into filechecksum table
|
||
|
.cv_filechecksumoffset 3 # Offset into filechecksum table
|
||
|
|
||
|
.Ltmp10:
|
||
|
.p2align 2
|
||
|
.section .debug$S,"dr",associative,main
|
||
|
.p2align 2
|
||
|
.long 4 # Debug section magic
|
||
|
.long 241 # Symbol subsection for main
|
||
|
.long .Ltmp12-.Ltmp11 # Subsection size
|
||
|
.Ltmp11:
|
||
|
.short .Ltmp14-.Ltmp13 # Record length
|
||
|
.Ltmp13:
|
||
|
.short 4423 # Record kind: S_GPROC32_ID
|
||
|
.long 0 # PtrParent
|
||
|
.long 0 # PtrEnd
|
||
|
.long 0 # PtrNext
|
||
|
.long .Lfunc_end0-main # Code size
|
||
|
.long 0 # Offset after prologue
|
||
|
.long 0 # Offset before epilogue
|
||
|
.long 4101 # Function type index
|
||
|
.secrel32 main # Function section relative address
|
||
|
.secidx main # Function section index
|
||
|
.byte 0 # Flags
|
||
|
.asciz "main" # Function name
|
||
|
.p2align 2
|
||
|
.Ltmp14:
|
||
|
.short .Ltmp16-.Ltmp15 # Record length
|
||
|
.Ltmp15:
|
||
|
.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 0 # Flags (defines frame register)
|
||
|
.p2align 2
|
||
|
.Ltmp16:
|
||
|
.short .Ltmp18-.Ltmp17 # Record length
|
||
|
.Ltmp17:
|
||
|
.short 4429 # Record kind: S_INLINESITE
|
||
|
.long 0 # PtrParent
|
||
|
.long 0 # PtrEnd
|
||
|
.long 4098 # Inlinee type index
|
||
|
.cv_inline_linetable 1 1 7 .Lfunc_begin0 .Lfunc_end0
|
||
|
.p2align 2
|
||
|
.Ltmp18:
|
||
|
.short 2 # Record length
|
||
|
.short 4430 # Record kind: S_INLINESITE_END
|
||
|
.short 2 # Record length
|
||
|
.short 4431 # Record kind: S_PROC_ID_END
|
||
|
.Ltmp12:
|
||
|
.p2align 2
|
||
|
.cv_linetable 0, main, .Lfunc_end0
|
||
|
.section .debug$S,"dr"
|
||
|
.long 241 # Symbol subsection for globals
|
||
|
.long .Ltmp22-.Ltmp21 # Subsection size
|
||
|
.Ltmp21:
|
||
|
.short .Ltmp24-.Ltmp23 # Record length
|
||
|
.Ltmp23:
|
||
|
.short 4365 # Record kind: S_GDATA32
|
||
|
.long 4102 # Type
|
||
|
.secrel32 x # DataOffset
|
||
|
.secidx x # Segment
|
||
|
.asciz "x" # Name
|
||
|
.p2align 2
|
||
|
.Ltmp24:
|
||
|
.Ltmp22:
|
||
|
.p2align 2
|
||
|
.cv_filechecksums # File index to string table offset subsection
|
||
|
.cv_stringtable # String table
|
||
|
.long 241
|
||
|
.long .Ltmp26-.Ltmp25 # Subsection size
|
||
|
.Ltmp25:
|
||
|
.short .Ltmp28-.Ltmp27 # Record length
|
||
|
.Ltmp27:
|
||
|
.short 4428 # Record kind: S_BUILDINFO
|
||
|
.long 4105 # LF_BUILDINFO index
|
||
|
.p2align 2
|
||
|
.Ltmp28:
|
||
|
.Ltmp26:
|
||
|
.p2align 2
|
||
|
.section .debug$T,"dr"
|
||
|
.p2align 2
|
||
|
.long 4 # Debug section magic
|
||
|
# ArgList (0x1000) {
|
||
|
# TypeLeafKind: LF_ARGLIST (0x1201)
|
||
|
# NumArgs: 0
|
||
|
# Arguments [
|
||
|
# ]
|
||
|
# }
|
||
|
.byte 0x06, 0x00, 0x01, 0x12
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
# Procedure (0x1001) {
|
||
|
# TypeLeafKind: LF_PROCEDURE (0x1008)
|
||
|
# ReturnType: void (0x3)
|
||
|
# CallingConvention: NearC (0x0)
|
||
|
# FunctionOptions [ (0x0)
|
||
|
# ]
|
||
|
# NumParameters: 0
|
||
|
# ArgListType: () (0x1000)
|
||
|
# }
|
||
|
.byte 0x0e, 0x00, 0x08, 0x10
|
||
|
.byte 0x03, 0x00, 0x00, 0x00
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x00, 0x10, 0x00, 0x00
|
||
|
# FuncId (0x1002) {
|
||
|
# TypeLeafKind: LF_FUNC_ID (0x1601)
|
||
|
# ParentScope: 0x0
|
||
|
# FunctionType: void () (0x1001)
|
||
|
# Name: inlinee_1
|
||
|
# }
|
||
|
.byte 0x16, 0x00, 0x01, 0x16
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x01, 0x10, 0x00, 0x00
|
||
|
.byte 0x69, 0x6e, 0x6c, 0x69
|
||
|
.byte 0x6e, 0x65, 0x65, 0x5f
|
||
|
.byte 0x31, 0x00, 0xf2, 0xf1
|
||
|
# FuncId (0x1003) {
|
||
|
# TypeLeafKind: LF_FUNC_ID (0x1601)
|
||
|
# ParentScope: 0x0
|
||
|
# FunctionType: void () (0x1001)
|
||
|
# Name: inlinee_2
|
||
|
# }
|
||
|
.byte 0x16, 0x00, 0x01, 0x16
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x01, 0x10, 0x00, 0x00
|
||
|
.byte 0x69, 0x6e, 0x6c, 0x69
|
||
|
.byte 0x6e, 0x65, 0x65, 0x5f
|
||
|
.byte 0x32, 0x00, 0xf2, 0xf1
|
||
|
# Procedure (0x1004) {
|
||
|
# TypeLeafKind: LF_PROCEDURE (0x1008)
|
||
|
# ReturnType: int (0x74)
|
||
|
# CallingConvention: NearC (0x0)
|
||
|
# FunctionOptions [ (0x0)
|
||
|
# ]
|
||
|
# NumParameters: 0
|
||
|
# ArgListType: () (0x1000)
|
||
|
# }
|
||
|
.byte 0x0e, 0x00, 0x08, 0x10
|
||
|
.byte 0x74, 0x00, 0x00, 0x00
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x00, 0x10, 0x00, 0x00
|
||
|
# FuncId (0x1005) {
|
||
|
# TypeLeafKind: LF_FUNC_ID (0x1601)
|
||
|
# ParentScope: 0x0
|
||
|
# FunctionType: int () (0x1004)
|
||
|
# Name: main
|
||
|
# }
|
||
|
.byte 0x12, 0x00, 0x01, 0x16
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x04, 0x10, 0x00, 0x00
|
||
|
.byte 0x6d, 0x61, 0x69, 0x6e
|
||
|
.byte 0x00, 0xf3, 0xf2, 0xf1
|
||
|
# Modifier (0x1006) {
|
||
|
# TypeLeafKind: LF_MODIFIER (0x1001)
|
||
|
# ModifiedType: int (0x74)
|
||
|
# Modifiers [ (0x2)
|
||
|
# Volatile (0x2)
|
||
|
# ]
|
||
|
# }
|
||
|
.byte 0x0a, 0x00, 0x01, 0x10
|
||
|
.byte 0x74, 0x00, 0x00, 0x00
|
||
|
.byte 0x02, 0x00, 0xf2, 0xf1
|
||
|
# StringId (0x1007) {
|
||
|
# TypeLeafKind: LF_STRING_ID (0x1605)
|
||
|
# Id: 0x0
|
||
|
# StringData: C:\src\llvm-project\build
|
||
|
# }
|
||
|
.byte 0x22, 0x00, 0x05, 0x16
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x43, 0x3a, 0x5c, 0x73
|
||
|
.byte 0x72, 0x63, 0x5c, 0x6c
|
||
|
.byte 0x6c, 0x76, 0x6d, 0x2d
|
||
|
.byte 0x70, 0x72, 0x6f, 0x6a
|
||
|
.byte 0x65, 0x63, 0x74, 0x5c
|
||
|
.byte 0x62, 0x75, 0x69, 0x6c
|
||
|
.byte 0x64, 0x00, 0xf2, 0xf1
|
||
|
# StringId (0x1008) {
|
||
|
# TypeLeafKind: LF_STRING_ID (0x1605)
|
||
|
# Id: 0x0
|
||
|
# StringData: t.c
|
||
|
# }
|
||
|
.byte 0x0a, 0x00, 0x05, 0x16
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x74, 0x2e, 0x63, 0x00
|
||
|
# BuildInfo (0x1009) {
|
||
|
# TypeLeafKind: LF_BUILDINFO (0x1603)
|
||
|
# NumArgs: 5
|
||
|
# Arguments [
|
||
|
# ArgType: C:\src\llvm-project\build (0x1007)
|
||
|
# ArgType: 0x0
|
||
|
# ArgType: t.c (0x1008)
|
||
|
# ArgType: 0x0
|
||
|
# ArgType: 0x0
|
||
|
# ]
|
||
|
# }
|
||
|
.byte 0x1a, 0x00, 0x03, 0x16
|
||
|
.byte 0x05, 0x00, 0x07, 0x10
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x00, 0x00, 0x08, 0x10
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x00, 0x00, 0x00, 0x00
|
||
|
.byte 0x00, 0x00, 0xf2, 0xf1
|
||
|
|
||
|
.addrsig
|
||
|
.addrsig_sym x
|