xref: /llvm-project/llvm/test/ExecutionEngine/JITLink/RISCV/ELF_ehframe.s (revision 255870d7b5c474b1ea0b61f165d11930ada2e2ef)
1*4f6757ceSJonas Hahnfeld# REQUIRES: asserts
2*4f6757ceSJonas Hahnfeld
3*4f6757ceSJonas Hahnfeld# RUN: llvm-mc -triple=riscv32-linux-gnu -mattr=+relax -filetype=obj -o %t.32.o %s
4*4f6757ceSJonas Hahnfeld# RUN: llvm-jitlink -noexec -phony-externals -debug-only=jitlink %t.32.o 2>&1 | \
5*4f6757ceSJonas Hahnfeld# RUN:   FileCheck %s
6*4f6757ceSJonas Hahnfeld
7*4f6757ceSJonas Hahnfeld# RUN: llvm-mc -triple=riscv64-linux-gnu -mattr=+relax -filetype=obj -o %t.64.o %s
8*4f6757ceSJonas Hahnfeld# RUN: llvm-jitlink -noexec -phony-externals -debug-only=jitlink %t.64.o 2>&1 | \
9*4f6757ceSJonas Hahnfeld# RUN:   FileCheck %s
10*4f6757ceSJonas Hahnfeld
11*4f6757ceSJonas Hahnfeld# Check that splitting of eh-frame sections works.
12*4f6757ceSJonas Hahnfeld#
13*4f6757ceSJonas Hahnfeld# CHECK: DWARFRecordSectionSplitter: Processing .eh_frame...
14*4f6757ceSJonas Hahnfeld# CHECK:  Processing block at
15*4f6757ceSJonas Hahnfeld# CHECK:    Processing CFI record at
16*4f6757ceSJonas Hahnfeld# CHECK:    Processing CFI record at
17*4f6757ceSJonas Hahnfeld# CHECK: EHFrameEdgeFixer: Processing .eh_frame in "{{.*}}"...
18*4f6757ceSJonas Hahnfeld# CHECK:   Processing block at
19*4f6757ceSJonas Hahnfeld# CHECK:     Record is CIE
20*4f6757ceSJonas Hahnfeld# CHECK:   Processing block at
21*4f6757ceSJonas Hahnfeld# CHECK:     Record is FDE
22*4f6757ceSJonas Hahnfeld# CHECK:       Adding edge at {{.*}} to CIE at: {{.*}}
23*4f6757ceSJonas Hahnfeld# CHECK:       Existing edge at {{.*}} to PC begin at {{.*}}
24*4f6757ceSJonas Hahnfeld# CHECK:       Adding keep-alive edge from target at {{.*}} to FDE at {{.*}}
25*4f6757ceSJonas Hahnfeld# CHECK:   Processing block at
26*4f6757ceSJonas Hahnfeld# CHECK:     Record is FDE
27*4f6757ceSJonas Hahnfeld# CHECK:       Adding edge at {{.*}} to CIE at: {{.*}}
28*4f6757ceSJonas Hahnfeld# CHECK:       Existing edge at {{.*}} to PC begin at {{.*}}
29*4f6757ceSJonas Hahnfeld# CHECK:       Adding keep-alive edge from target at {{.*}} to FDE at {{.*}}
30*4f6757ceSJonas Hahnfeld
31*4f6757ceSJonas Hahnfeld## This is "int main { throw 1; }" compiled for riscv32. We use the 32-bit
32*4f6757ceSJonas Hahnfeld## version because it is also legal for riscv64.
33*4f6757ceSJonas Hahnfeld	.text
34*4f6757ceSJonas Hahnfeld	.globl	main
35*4f6757ceSJonas Hahnfeld	.p2align	1
36*4f6757ceSJonas Hahnfeld	.type	main,@function
37*4f6757ceSJonas Hahnfeldmain:
38*4f6757ceSJonas Hahnfeld	.cfi_startproc
39*4f6757ceSJonas Hahnfeld	addi	sp, sp, -16
40*4f6757ceSJonas Hahnfeld	.cfi_def_cfa_offset 16
41*4f6757ceSJonas Hahnfeld	sw	ra, 12(sp)
42*4f6757ceSJonas Hahnfeld	.cfi_offset ra, -4
43*4f6757ceSJonas Hahnfeld	li	a0, 4
44*4f6757ceSJonas Hahnfeld	call	__cxa_allocate_exception
45*4f6757ceSJonas Hahnfeld	li	a1, 1
46*4f6757ceSJonas Hahnfeld	sw	a1, 0(a0)
47*4f6757ceSJonas Hahnfeld	lga a1, _ZTIi
48*4f6757ceSJonas Hahnfeld	li	a2, 0
49*4f6757ceSJonas Hahnfeld	call	__cxa_throw
50*4f6757ceSJonas Hahnfeld.Lfunc_end0:
51*4f6757ceSJonas Hahnfeld	.size	main, .Lfunc_end0-main
52*4f6757ceSJonas Hahnfeld	.cfi_endproc
53*4f6757ceSJonas Hahnfeld
54*4f6757ceSJonas Hahnfeld	.globl	dup
55*4f6757ceSJonas Hahnfeld	.p2align	1
56*4f6757ceSJonas Hahnfeld	.type	dup,@function
57*4f6757ceSJonas Hahnfelddup:
58*4f6757ceSJonas Hahnfeld	.cfi_startproc
59*4f6757ceSJonas Hahnfeld	addi	sp, sp, -16
60*4f6757ceSJonas Hahnfeld	.cfi_def_cfa_offset 16
61*4f6757ceSJonas Hahnfeld	sw	ra, 12(sp)
62*4f6757ceSJonas Hahnfeld	.cfi_offset ra, -4
63*4f6757ceSJonas Hahnfeld	li	a0, 4
64*4f6757ceSJonas Hahnfeld	call	__cxa_allocate_exception
65*4f6757ceSJonas Hahnfeld	li	a1, 1
66*4f6757ceSJonas Hahnfeld	sw	a1, 0(a0)
67*4f6757ceSJonas Hahnfeld	lga a1, _ZTIi
68*4f6757ceSJonas Hahnfeld	li	a2, 0
69*4f6757ceSJonas Hahnfeld	call	__cxa_throw
70*4f6757ceSJonas Hahnfeld.Lfunc_end1:
71*4f6757ceSJonas Hahnfeld	.size	dup, .Lfunc_end1-dup
72*4f6757ceSJonas Hahnfeld	.cfi_endproc
73