xref: /llvm-project/llvm/test/MC/COFF/cv-string.s (revision e29e30b1397f3e50f3487491f8a77ae08e4e3471)
106d02d03SReid Kleckner# RUN: llvm-mc -triple=i686-windows-msvc %s -filetype=obj -o %t.obj
2*e29e30b1SFangrui Song# RUN: llvm-readobj --codeview %t.obj | FileCheck %s
306d02d03SReid Kleckner
406d02d03SReid Kleckner# The .cv_string directive mainly exists as a convenience for manually writing
506d02d03SReid Kleckner# FPO data in assembler. Test that we can write FPO data using this directive,
606d02d03SReid Kleckner# and that the string comes out in the dumper.
706d02d03SReid Kleckner
806d02d03SReid Kleckner# void g(int);
906d02d03SReid Kleckner# void f(int x) {
1006d02d03SReid Kleckner#   g(x+1);
1106d02d03SReid Kleckner# }
1206d02d03SReid Kleckner
1306d02d03SReid Kleckner# CHECK: FrameFunc [
1406d02d03SReid Kleckner# CHECK-NEXT: abc =
1506d02d03SReid Kleckner# CHECK-NEXT: def =
1606d02d03SReid Kleckner# CHECK-NEXT: ghi =
1706d02d03SReid Kleckner# CHECK-NEXT: ]
1806d02d03SReid Kleckner
1906d02d03SReid Kleckner	.text
2006d02d03SReid Kleckner	.def	 @feat.00;
2106d02d03SReid Kleckner	.scl	3;
2206d02d03SReid Kleckner	.type	0;
2306d02d03SReid Kleckner	.endef
2406d02d03SReid Kleckner	.globl	@feat.00
2506d02d03SReid Kleckner.set @feat.00, 1
2606d02d03SReid Kleckner	.def	 _f;
2706d02d03SReid Kleckner	.scl	2;
2806d02d03SReid Kleckner	.type	32;
2906d02d03SReid Kleckner	.endef
3006d02d03SReid Kleckner	.globl	_f                      # -- Begin function f
3106d02d03SReid Kleckner	.p2align	4, 0x90
3206d02d03SReid Kleckner_f:                                     # @f
3306d02d03SReid KlecknerLfunc_begin0:
3406d02d03SReid Kleckner# %bb.0:                                # %entry
3506d02d03SReid Kleckner	pushl	%ebp
3606d02d03SReid Kleckner	movl	%esp, %ebp
3706d02d03SReid Kleckner	subl	$8, %esp
3806d02d03SReid Kleckner	movl	8(%ebp), %eax
3906d02d03SReid Kleckner	movl	8(%ebp), %ecx
4006d02d03SReid Kleckner	addl	$1, %ecx
4106d02d03SReid Kleckner	movl	%ecx, (%esp)
4206d02d03SReid Kleckner	movl	%eax, -4(%ebp)          # 4-byte Spill
4306d02d03SReid Kleckner	calll	_g
4406d02d03SReid Kleckner	addl	$8, %esp
4506d02d03SReid Kleckner	popl	%ebp
4606d02d03SReid Kleckner	retl
4706d02d03SReid KlecknerLfunc_end0:
4806d02d03SReid Kleckner                                        # -- End function
4906d02d03SReid Kleckner	.section	.debug$S,"dr"
5006d02d03SReid Kleckner	.p2align	2
5106d02d03SReid Kleckner	.long	4                       # Debug section magic
5206d02d03SReid Kleckner
5306d02d03SReid Kleckner	# Open coded frame data
5406d02d03SReid Kleckner	.long	245
5506d02d03SReid Kleckner	.long	Lfoo_fpo_end-Lfoo_fpo_begin           # Subsection size
5606d02d03SReid KlecknerLfoo_fpo_begin:
5706d02d03SReid Kleckner	.long _f
5806d02d03SReid Kleckner	.long 0
5906d02d03SReid Kleckner	.long Lfunc_end0-Lfunc_begin0
6006d02d03SReid Kleckner	.long 24 # LocalSize
6106d02d03SReid Kleckner	.long 0 # ParamSize
6206d02d03SReid Kleckner	.long 0 # MaxStackSize
6306d02d03SReid Kleckner	.cv_string "abc = def = ghi = "
6406d02d03SReid Kleckner	.short 0 # PrologSize
6506d02d03SReid Kleckner	.short 0 # SavedRegSize
6606d02d03SReid Kleckner	.long 0x4 # Flags
6706d02d03SReid KlecknerLfoo_fpo_end:
6806d02d03SReid Kleckner	.p2align	2
6906d02d03SReid Kleckner	.cv_stringtable                 # String table
70