2018-09-08 05:30:52 +08:00
|
|
|
# RUN: llvm-mc -triple=i686-windows-msvc %s -filetype=obj -o %t.obj
|
2019-05-01 13:27:20 +08:00
|
|
|
# RUN: llvm-readobj --codeview %t.obj | FileCheck %s
|
2018-09-08 05:30:52 +08:00
|
|
|
|
|
|
|
# The .cv_string directive mainly exists as a convenience for manually writing
|
|
|
|
# FPO data in assembler. Test that we can write FPO data using this directive,
|
|
|
|
# and that the string comes out in the dumper.
|
|
|
|
|
|
|
|
# void g(int);
|
|
|
|
# void f(int x) {
|
|
|
|
# g(x+1);
|
|
|
|
# }
|
|
|
|
|
|
|
|
# CHECK: FrameFunc [
|
|
|
|
# CHECK-NEXT: abc =
|
|
|
|
# CHECK-NEXT: def =
|
|
|
|
# CHECK-NEXT: ghi =
|
|
|
|
# CHECK-NEXT: ]
|
|
|
|
|
|
|
|
.text
|
|
|
|
.def @feat.00;
|
|
|
|
.scl 3;
|
|
|
|
.type 0;
|
|
|
|
.endef
|
|
|
|
.globl @feat.00
|
|
|
|
.set @feat.00, 1
|
|
|
|
.def _f;
|
|
|
|
.scl 2;
|
|
|
|
.type 32;
|
|
|
|
.endef
|
|
|
|
.globl _f # -- Begin function f
|
|
|
|
.p2align 4, 0x90
|
|
|
|
_f: # @f
|
|
|
|
Lfunc_begin0:
|
|
|
|
# %bb.0: # %entry
|
|
|
|
pushl %ebp
|
|
|
|
movl %esp, %ebp
|
|
|
|
subl $8, %esp
|
|
|
|
movl 8(%ebp), %eax
|
|
|
|
movl 8(%ebp), %ecx
|
|
|
|
addl $1, %ecx
|
|
|
|
movl %ecx, (%esp)
|
|
|
|
movl %eax, -4(%ebp) # 4-byte Spill
|
|
|
|
calll _g
|
|
|
|
addl $8, %esp
|
|
|
|
popl %ebp
|
|
|
|
retl
|
|
|
|
Lfunc_end0:
|
|
|
|
# -- End function
|
|
|
|
.section .debug$S,"dr"
|
|
|
|
.p2align 2
|
|
|
|
.long 4 # Debug section magic
|
|
|
|
|
|
|
|
# Open coded frame data
|
|
|
|
.long 245
|
|
|
|
.long Lfoo_fpo_end-Lfoo_fpo_begin # Subsection size
|
|
|
|
Lfoo_fpo_begin:
|
|
|
|
.long _f
|
|
|
|
.long 0
|
|
|
|
.long Lfunc_end0-Lfunc_begin0
|
|
|
|
.long 24 # LocalSize
|
|
|
|
.long 0 # ParamSize
|
|
|
|
.long 0 # MaxStackSize
|
|
|
|
.cv_string "abc = def = ghi = "
|
|
|
|
.short 0 # PrologSize
|
|
|
|
.short 0 # SavedRegSize
|
|
|
|
.long 0x4 # Flags
|
|
|
|
Lfoo_fpo_end:
|
|
|
|
.p2align 2
|
|
|
|
.cv_stringtable # String table
|