162 lines
4.8 KiB
ArmAsm
162 lines
4.8 KiB
ArmAsm
# RUN: llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o %t.o
|
|
# RUN: llvm-pdbutil dump -symbols %t.o | FileCheck %s
|
|
|
|
# We used to have a label flushing bug down below by the "BUG" comments that
|
|
# would cause the S_DEFRANGE_FRAMEPOINTER_REL records to appear missing. In
|
|
# practice, the label would extend past the def range, so it would appear that
|
|
# every local was optimized out or had no def ranges.
|
|
|
|
# CHECK: S_GPROC32_ID {{.*}} `max`
|
|
# CHECK: S_LOCAL [size = {{.*}}] `a`
|
|
# CHECK: S_DEFRANGE_FRAMEPOINTER_REL
|
|
# CHECK: S_LOCAL [size = {{.*}}] `b`
|
|
# CHECK: S_DEFRANGE_FRAMEPOINTER_REL
|
|
|
|
.text
|
|
.def @feat.00;
|
|
.scl 3;
|
|
.type 0;
|
|
.endef
|
|
.globl @feat.00
|
|
.set @feat.00, 0
|
|
.def max;
|
|
.scl 2;
|
|
.type 32;
|
|
.endef
|
|
.globl max # -- Begin function max
|
|
.p2align 4, 0x90
|
|
max: # @max
|
|
.Lfunc_begin0:
|
|
.cv_func_id 0
|
|
.cv_file 1 "C:\\src\\llvm-project\\build\\t.c" "44649E6EBC4FC8880991A1AF1F2D2990" 1
|
|
.cv_loc 0 1 1 0 # t.c:1:0
|
|
.seh_proc max
|
|
# %bb.0: # %entry
|
|
pushq %rax
|
|
.seh_stackalloc 8
|
|
.seh_endprologue
|
|
movl %edx, 4(%rsp)
|
|
movl %ecx, (%rsp)
|
|
.Ltmp0:
|
|
.cv_loc 0 1 2 0 # t.c:2:0
|
|
movl (%rsp), %eax
|
|
cmpl 4(%rsp), %eax
|
|
jle .LBB0_2
|
|
# %bb.1: # %cond.true
|
|
movl (%rsp), %eax
|
|
jmp .LBB0_3
|
|
.LBB0_2: # %cond.false
|
|
movl 4(%rsp), %eax
|
|
.LBB0_3: # %cond.end
|
|
popq %rcx
|
|
retq
|
|
.Ltmp1:
|
|
.Lfunc_end0:
|
|
.seh_handlerdata
|
|
.text
|
|
.seh_endproc
|
|
# -- End function
|
|
.section .debug$S,"dr"
|
|
.p2align 2
|
|
.long 4
|
|
.long 241 # Symbol subsection for max
|
|
.long .Ltmp7-.Ltmp6 # Subsection size
|
|
.Ltmp6:
|
|
.short .Ltmp9-.Ltmp8 # Record length
|
|
.Ltmp8:
|
|
.short 4423 # Record kind: S_GPROC32_ID
|
|
.long 0 # PtrParent
|
|
.long 0 # PtrEnd
|
|
.long 0 # PtrNext
|
|
.long .Lfunc_end0-max # Code size
|
|
.long 0 # Offset after prologue
|
|
.long 0 # Offset before epilogue
|
|
.long 4098 # Function type index
|
|
.secrel32 max # Function section relative address
|
|
.secidx max # Function section index
|
|
.byte 0 # Flags
|
|
.asciz "max" # Function name
|
|
.Ltmp9:
|
|
.short .Ltmp11-.Ltmp10 # Record length
|
|
.Ltmp10:
|
|
.short 4114 # Record kind: S_FRAMEPROC
|
|
.long 8 # 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 81920 # Flags (defines frame register)
|
|
.Ltmp11:
|
|
.short .Ltmp13-.Ltmp12 # Record length
|
|
.Ltmp12:
|
|
.short 4414 # Record kind: S_LOCAL
|
|
.long 18 # TypeIndex
|
|
.short 1 # Flags
|
|
.asciz "a"
|
|
# BUG
|
|
.p2align 2
|
|
.Ltmp13:
|
|
.cv_def_range .Ltmp0 .Ltmp1, frame_ptr_rel, 8
|
|
.short .Ltmp15-.Ltmp14 # Record length
|
|
.Ltmp14:
|
|
.short 4414 # Record kind: S_LOCAL
|
|
.long 18 # TypeIndex
|
|
.short 1 # Flags
|
|
.asciz "b"
|
|
# BUG
|
|
.p2align 2
|
|
.Ltmp15:
|
|
.cv_def_range .Ltmp0 .Ltmp1, frame_ptr_rel, 8
|
|
.short 2 # Record length
|
|
.short 4431 # Record kind: S_PROC_ID_END
|
|
.Ltmp7:
|
|
.p2align 2
|
|
.cv_linetable 0, max, .Lfunc_end0
|
|
.cv_filechecksums # File index to string table offset subsection
|
|
.cv_stringtable # String table
|
|
.long 241
|
|
.long .Ltmp17-.Ltmp16 # Subsection size
|
|
.Ltmp16:
|
|
.Ltmp17:
|
|
.p2align 2
|
|
.section .debug$T,"dr"
|
|
.p2align 2
|
|
.long 4 # Debug section magic
|
|
# ArgList (0x1000) {
|
|
# TypeLeafKind: LF_ARGLIST (0x1201)
|
|
# NumArgs: 2
|
|
# Arguments [
|
|
# ArgType: long (0x12)
|
|
# ArgType: long (0x12)
|
|
# ]
|
|
# }
|
|
.byte 0x0e, 0x00, 0x01, 0x12
|
|
.byte 0x02, 0x00, 0x00, 0x00
|
|
.byte 0x12, 0x00, 0x00, 0x00
|
|
.byte 0x12, 0x00, 0x00, 0x00
|
|
# Procedure (0x1001) {
|
|
# TypeLeafKind: LF_PROCEDURE (0x1008)
|
|
# ReturnType: long (0x12)
|
|
# CallingConvention: NearC (0x0)
|
|
# FunctionOptions [ (0x0)
|
|
# ]
|
|
# NumParameters: 2
|
|
# ArgListType: (long, long) (0x1000)
|
|
# }
|
|
.byte 0x0e, 0x00, 0x08, 0x10
|
|
.byte 0x12, 0x00, 0x00, 0x00
|
|
.byte 0x00, 0x00, 0x02, 0x00
|
|
.byte 0x00, 0x10, 0x00, 0x00
|
|
# FuncId (0x1002) {
|
|
# TypeLeafKind: LF_FUNC_ID (0x1601)
|
|
# ParentScope: 0x0
|
|
# FunctionType: long (long, long) (0x1001)
|
|
# Name: max
|
|
# }
|
|
.byte 0x0e, 0x00, 0x01, 0x16
|
|
.byte 0x00, 0x00, 0x00, 0x00
|
|
.byte 0x01, 0x10, 0x00, 0x00
|
|
.byte 0x6d, 0x61, 0x78, 0x00
|
|
|