xref: /llvm-project/bolt/test/X86/split-all-lptrampoline.s (revision 11791ae7b0b05b8bd8d806331ff51da618912cf8)
1## This test checks that trampolines are inserted in split fragments if
2## necessary. There are 4 LSDA ranges with a landing pad to three landing pads.
3## After splitting all blocks, there have to be 4 trampolines in the output.
4
5# RUN: llvm-mc --filetype=obj --triple x86_64-unknown-unknown %s -o %t.o
6# RUN: %clangxx %cxxflags %t.o -o %t.exe -Wl,-q -pie
7# RUN: llvm-bolt %t.exe --split-functions --split-strategy=all --split-eh \
8# RUN:         -o %t.bolt --print-split --print-only=main 2>&1 | FileCheck %s
9
10# CHECK: -------   HOT-COLD SPLIT POINT   -------
11# CHECK: .LFT0
12# CHECK: Landing Pads: .LBB0
13# CHECK: .LBB0
14# CHECK-NEXT: Landing Pad
15# CHECK: -------   HOT-COLD SPLIT POINT   -------
16# CHECK: .Ltmp0
17# CHECK: Landing Pads: .LBB1, .LBB2
18# CHECK: .LBB1
19# CHECK-NEXT: Landing Pad
20# CHECK: .LBB2
21# CHECK-NEXT: Landing Pad
22# CHECK: -------   HOT-COLD SPLIT POINT   -------
23# CHECK: -------   HOT-COLD SPLIT POINT   -------
24# CHECK: -------   HOT-COLD SPLIT POINT   -------
25# CHECK: -------   HOT-COLD SPLIT POINT   -------
26# CHECK: -------   HOT-COLD SPLIT POINT   -------
27# CHECK: .Ltmp3
28# CHECK: Landing Pads: .LBB3
29# CHECK: .LBB3
30# CHECK-NEXT: Landing Pad
31# CHECK: -------   HOT-COLD SPLIT POINT   -------
32# CHECK: -------   HOT-COLD SPLIT POINT   -------
33
34        .text
35        .section        .rodata.str1.1,"aMS",@progbits,1
36.LC0:
37        .string "E"
38.LC1:
39        .string "C"
40        .text
41        .globl  main
42        .type   main, @function
43main:
44.LFB1265:
45        .cfi_startproc
46        .cfi_personality 0x9b,DW.ref.__gxx_personality_v0
47        .cfi_lsda 0x1b,.LLSDA1265
48        pushq   %r12
49        .cfi_def_cfa_offset 16
50        .cfi_offset 12, -16
51        pushq   %rbp
52        .cfi_def_cfa_offset 24
53        .cfi_offset 6, -24
54        pushq   %rbx
55        .cfi_def_cfa_offset 32
56        .cfi_offset 3, -32
57        testb   $3, %dil
58        jne     .L13
59        leaq    .LC1(%rip), %rdi
60.LEHB0:
61        call    puts@PLT
62        # Trampoline to .L9
63.LEHE0:
64        jmp     .L11
65.L13:
66        movl    $16, %edi
67        call    __cxa_allocate_exception@PLT
68        movq    %rax, %rbx
69        leaq    .LC0(%rip), %rsi
70        movq    %rax, %rdi
71.LEHB1:
72        call    _ZNSt13runtime_errorC1EPKc@PLT
73        # Trampoline to .L8
74.LEHE1:
75        movq    _ZNSt13runtime_errorD1Ev@GOTPCREL(%rip), %rdx
76        movq    _ZTISt13runtime_error@GOTPCREL(%rip), %rsi
77        movq    %rbx, %rdi
78.LEHB2:
79        call    __cxa_throw@PLT
80        # Trampoline to .L9
81.LEHE2:
82.L9:
83        movq    %rax, %rdi
84        movq    %rdx, %rax
85        jmp     .L4
86.L8:
87        movq    %rax, %r12
88        movq    %rdx, %rbp
89        movq    %rbx, %rdi
90        call    __cxa_free_exception@PLT
91        movq    %r12, %rdi
92        movq    %rbp, %rax
93.L4:
94        cmpq    $1, %rax
95        je      .L5
96.LEHB3:
97        call    _Unwind_Resume@PLT
98.LEHE3:
99.L5:
100        call    __cxa_begin_catch@PLT
101        movq    %rax, %rdi
102        movq    (%rax), %rax
103        call    *16(%rax)
104        movq    %rax, %rdi
105.LEHB4:
106        call    puts@PLT
107        # Trampoline to .L10
108.LEHE4:
109        call    __cxa_end_catch@PLT
110.L11:
111        movl    $0, %eax
112        popq    %rbx
113        .cfi_remember_state
114        .cfi_def_cfa_offset 24
115        popq    %rbp
116        .cfi_def_cfa_offset 16
117        popq    %r12
118        .cfi_def_cfa_offset 8
119        ret
120.L10:
121        .cfi_restore_state
122        movq    %rax, %rbx
123        call    __cxa_end_catch@PLT
124        movq    %rbx, %rdi
125.LEHB5:
126        call    _Unwind_Resume@PLT
127.LEHE5:
128        .cfi_endproc
129        .globl  __gxx_personality_v0
130        .section        .gcc_except_table,"a",@progbits
131        .align 4
132.LLSDA1265:
133        .byte   0xff
134        .byte   0x9b
135        .uleb128 .LLSDATT1265-.LLSDATTD1265
136.LLSDATTD1265:
137        .byte   0x1
138        .uleb128 .LLSDACSE1265-.LLSDACSB1265
139.LLSDACSB1265:
140        .uleb128 .LEHB0-.LFB1265
141        .uleb128 .LEHE0-.LEHB0
142        .uleb128 .L9-.LFB1265
143        .uleb128 0x1
144        .uleb128 .LEHB1-.LFB1265
145        .uleb128 .LEHE1-.LEHB1
146        .uleb128 .L8-.LFB1265
147        .uleb128 0x3
148        .uleb128 .LEHB2-.LFB1265
149        .uleb128 .LEHE2-.LEHB2
150        .uleb128 .L9-.LFB1265
151        .uleb128 0x1
152        .uleb128 .LEHB3-.LFB1265
153        .uleb128 .LEHE3-.LEHB3
154        .uleb128 0
155        .uleb128 0
156        .uleb128 .LEHB4-.LFB1265
157        .uleb128 .LEHE4-.LEHB4
158        .uleb128 .L10-.LFB1265
159        .uleb128 0
160        .uleb128 .LEHB5-.LFB1265
161        .uleb128 .LEHE5-.LEHB5
162        .uleb128 0
163        .uleb128 0
164.LLSDACSE1265:
165        .byte   0x1
166        .byte   0
167        .byte   0
168        .byte   0x7d
169        .align 4
170        .long   DW.ref._ZTISt13runtime_error-.
171.LLSDATT1265:
172        .text
173        .size   main, .-main
174        .hidden DW.ref._ZTISt13runtime_error
175        .weak   DW.ref._ZTISt13runtime_error
176        .section        .data.rel.local.DW.ref._ZTISt13runtime_error,"awG",@progbits,DW.ref._ZTISt13runtime_error,comdat
177        .align 8
178        .type   DW.ref._ZTISt13runtime_error, @object
179        .size   DW.ref._ZTISt13runtime_error, 8
180DW.ref._ZTISt13runtime_error:
181        .quad   _ZTISt13runtime_error
182        .hidden DW.ref.__gxx_personality_v0
183        .weak   DW.ref.__gxx_personality_v0
184        .section        .data.rel.local.DW.ref.__gxx_personality_v0,"awG",@progbits,DW.ref.__gxx_personality_v0,comdat
185        .align 8
186        .type   DW.ref.__gxx_personality_v0, @object
187        .size   DW.ref.__gxx_personality_v0, 8
188DW.ref.__gxx_personality_v0:
189        .quad   __gxx_personality_v0
190        .ident  "GCC: (Compiler-Explorer-Build-gcc--binutils-2.38) 12.1.0"
191        .section        .note.GNU-stack,"",@progbits
192