xref: /llvm-project/llvm/test/ExecutionEngine/JITLink/x86-64/ELF_ehframe_basic.s (revision bfb0a518e73623732c6567916d066df817e0cb0c)
18ad75c10SLang Hames# REQUIRES: asserts
28ad75c10SLang Hames# UNSUPPORTED: system-windows
38ad75c10SLang Hames# RUN: llvm-mc -triple=x86_64-unknown-linux -position-independent \
48ad75c10SLang Hames# RUN:     -filetype=obj -o %t %s
5*bfb0a518SLang Hames# RUN: llvm-jitlink -num-threads=0 -debug-only=jitlink -noexec \
6*bfb0a518SLang Hames# RUN:              -abs bar=0x01 -abs _ZTIi=0x02 %t 2>&1 \
7*bfb0a518SLang Hames# RUN:              | FileCheck %s
88ad75c10SLang Hames#
98ad75c10SLang Hames# FIXME: This test should run on windows. Investigate spurious
108ad75c10SLang Hames# 'note: command had no output on stdout or stderr' errors, then re-enable.
118ad75c10SLang Hames#
128ad75c10SLang Hames# Check that a basic .eh-frame section is recognized and parsed. We
138ad75c10SLang Hames# Expect to see two FDEs with corresponding keep-alive edges.
148ad75c10SLang Hames#
158ad75c10SLang Hames# CHECK: Adding keep-alive edge from target at {{.*}} to FDE at
168ad75c10SLang Hames# CHECK: Adding keep-alive edge from target at {{.*}} to FDE at
178ad75c10SLang Hames
188ad75c10SLang Hames	.text
198ad75c10SLang Hames	.file	"exceptions.cpp"
208ad75c10SLang Hames	.globl	foo
218ad75c10SLang Hames	.p2align	4, 0x90
228ad75c10SLang Hames	.type	foo,@function
238ad75c10SLang Hamesfoo:
248ad75c10SLang Hames	.cfi_startproc
258ad75c10SLang Hames
268ad75c10SLang Hames	pushq	%rax
278ad75c10SLang Hames	.cfi_def_cfa_offset 16
288ad75c10SLang Hames	movl	$4, %edi
298ad75c10SLang Hames	callq	__cxa_allocate_exception@PLT
308ad75c10SLang Hames	movl	$1, (%rax)
318ad75c10SLang Hames	movq	_ZTIi@GOTPCREL(%rip), %rsi
328ad75c10SLang Hames	movq	%rax, %rdi
338ad75c10SLang Hames	xorl	%edx, %edx
348ad75c10SLang Hames	callq	__cxa_throw@PLT
358ad75c10SLang Hames.Lfunc_end0:
368ad75c10SLang Hames	.size	foo, .Lfunc_end0-foo
378ad75c10SLang Hames	.cfi_endproc
388ad75c10SLang Hames
398ad75c10SLang Hames	.globl	main
408ad75c10SLang Hames	.p2align	4, 0x90
418ad75c10SLang Hames	.type	main,@function
428ad75c10SLang Hamesmain:
438ad75c10SLang Hames.Lfunc_begin0:
448ad75c10SLang Hames	.cfi_startproc
458ad75c10SLang Hames	.cfi_personality 155, DW.ref.__gxx_personality_v0
468ad75c10SLang Hames	.cfi_lsda 27, .Lexception0
478ad75c10SLang Hames
488ad75c10SLang Hames	pushq	%rbx
498ad75c10SLang Hames	.cfi_def_cfa_offset 16
508ad75c10SLang Hames	.cfi_offset %rbx, -16
518ad75c10SLang Hames	xorl	%ebx, %ebx
528ad75c10SLang Hames.Ltmp0:
538ad75c10SLang Hames	callq	bar@PLT
548ad75c10SLang Hames.Ltmp1:
558ad75c10SLang Hames
568ad75c10SLang Hames	movl	%ebx, %eax
578ad75c10SLang Hames	popq	%rbx
588ad75c10SLang Hames	.cfi_def_cfa_offset 8
598ad75c10SLang Hames	retq
608ad75c10SLang Hames.LBB1_1:
618ad75c10SLang Hames	.cfi_def_cfa_offset 16
628ad75c10SLang Hames.Ltmp2:
638ad75c10SLang Hames	movq	%rax, %rdi
648ad75c10SLang Hames	callq	__cxa_begin_catch@PLT
658ad75c10SLang Hames	callq	__cxa_end_catch@PLT
668ad75c10SLang Hames	movl	$1, %ebx
678ad75c10SLang Hames	movl	%ebx, %eax
688ad75c10SLang Hames	popq	%rbx
698ad75c10SLang Hames	.cfi_def_cfa_offset 8
708ad75c10SLang Hames	retq
718ad75c10SLang Hames.Lfunc_end1:
728ad75c10SLang Hames	.size	main, .Lfunc_end1-main
738ad75c10SLang Hames	.cfi_endproc
748ad75c10SLang Hames	.section	.gcc_except_table,"a",@progbits
758ad75c10SLang Hames	.p2align	2
768ad75c10SLang HamesGCC_except_table1:
778ad75c10SLang Hames.Lexception0:
788ad75c10SLang Hames	.byte	255
798ad75c10SLang Hames	.byte	156
808ad75c10SLang Hames	.uleb128 .Lttbase0-.Lttbaseref0
818ad75c10SLang Hames.Lttbaseref0:
828ad75c10SLang Hames	.byte	1
838ad75c10SLang Hames	.uleb128 .Lcst_end0-.Lcst_begin0
848ad75c10SLang Hames.Lcst_begin0:
858ad75c10SLang Hames	.uleb128 .Ltmp0-.Lfunc_begin0
868ad75c10SLang Hames	.uleb128 .Ltmp1-.Ltmp0
878ad75c10SLang Hames	.uleb128 .Ltmp2-.Lfunc_begin0
888ad75c10SLang Hames	.byte	1
898ad75c10SLang Hames	.uleb128 .Ltmp1-.Lfunc_begin0
908ad75c10SLang Hames	.uleb128 .Lfunc_end1-.Ltmp1
918ad75c10SLang Hames	.byte	0
928ad75c10SLang Hames	.byte	0
938ad75c10SLang Hames.Lcst_end0:
948ad75c10SLang Hames	.byte	1
958ad75c10SLang Hames
968ad75c10SLang Hames	.byte	0
978ad75c10SLang Hames	.p2align	2
988ad75c10SLang Hames
998ad75c10SLang Hames.Ltmp3:
1008ad75c10SLang Hames	.quad	.L_ZTIi.DW.stub-.Ltmp3
1018ad75c10SLang Hames.Lttbase0:
1028ad75c10SLang Hames	.p2align	2
1038ad75c10SLang Hames
1048ad75c10SLang Hames	.data
1058ad75c10SLang Hames	.p2align	3
1068ad75c10SLang Hames.L_ZTIi.DW.stub:
1078ad75c10SLang Hames	.quad	_ZTIi
1088ad75c10SLang Hames	.hidden	DW.ref.__gxx_personality_v0
1098ad75c10SLang Hames	.weak	DW.ref.__gxx_personality_v0
110f972e4d3SFangrui Song	.section	.data.DW.ref.__gxx_personality_v0,"awG",@progbits,DW.ref.__gxx_personality_v0,comdat
1118ad75c10SLang Hames	.p2align	3
1128ad75c10SLang Hames	.type	DW.ref.__gxx_personality_v0,@object
1138ad75c10SLang Hames	.size	DW.ref.__gxx_personality_v0, 8
1148ad75c10SLang HamesDW.ref.__gxx_personality_v0:
1158ad75c10SLang Hames	.quad	__gxx_personality_v0
1168ad75c10SLang Hames	.ident	"clang version 12.0.0 (git@github.com:llvm/llvm-project.git afd483e57d166418e94a65bd9716e7dc4c114eed)"
1178ad75c10SLang Hames	.section	".note.GNU-stack","",@progbits
1188ad75c10SLang Hames	.addrsig
1198ad75c10SLang Hames	.addrsig_sym __gxx_personality_v0
1208ad75c10SLang Hames	.addrsig_sym _ZTIi
121