192 lines · plain
1## This test checks that trampolines are inserted in split fragments if2## 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.o6# RUN: %clangxx %cxxflags %t.o -o %t.exe -Wl,-q -pie7# 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 %s9 10# CHECK: ------- HOT-COLD SPLIT POINT -------11# CHECK: .LFT012# CHECK: Landing Pads: .LBB013# CHECK: .LBB014# CHECK-NEXT: Landing Pad15# CHECK: ------- HOT-COLD SPLIT POINT -------16# CHECK: .Ltmp017# CHECK: Landing Pads: .LBB1, .LBB218# CHECK: .LBB119# CHECK-NEXT: Landing Pad20# CHECK: .LBB221# CHECK-NEXT: Landing Pad22# 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: .Ltmp328# CHECK: Landing Pads: .LBB329# CHECK: .LBB330# CHECK-NEXT: Landing Pad31# CHECK: ------- HOT-COLD SPLIT POINT -------32# CHECK: ------- HOT-COLD SPLIT POINT -------33 34 .text35 .section .rodata.str1.1,"aMS",@progbits,136.LC0:37 .string "E"38.LC1:39 .string "C"40 .text41 .globl main42 .type main, @function43main:44.LFB1265:45 .cfi_startproc46 .cfi_personality 0x9b,DW.ref.__gxx_personality_v047 .cfi_lsda 0x1b,.LLSDA126548 pushq %r1249 .cfi_def_cfa_offset 1650 .cfi_offset 12, -1651 pushq %rbp52 .cfi_def_cfa_offset 2453 .cfi_offset 6, -2454 pushq %rbx55 .cfi_def_cfa_offset 3256 .cfi_offset 3, -3257 testb $3, %dil58 jne .L1359 leaq .LC1(%rip), %rdi60.LEHB0:61 call puts@PLT62 # Trampoline to .L963.LEHE0:64 jmp .L1165.L13:66 movl $16, %edi67 call __cxa_allocate_exception@PLT68 movq %rax, %rbx69 leaq .LC0(%rip), %rsi70 movq %rax, %rdi71.LEHB1:72 call _ZNSt13runtime_errorC1EPKc@PLT73 # Trampoline to .L874.LEHE1:75 movq _ZNSt13runtime_errorD1Ev@GOTPCREL(%rip), %rdx76 movq _ZTISt13runtime_error@GOTPCREL(%rip), %rsi77 movq %rbx, %rdi78.LEHB2:79 call __cxa_throw@PLT80 # Trampoline to .L981.LEHE2:82.L9:83 movq %rax, %rdi84 movq %rdx, %rax85 jmp .L486.L8:87 movq %rax, %r1288 movq %rdx, %rbp89 movq %rbx, %rdi90 call __cxa_free_exception@PLT91 movq %r12, %rdi92 movq %rbp, %rax93.L4:94 cmpq $1, %rax95 je .L596.LEHB3:97 call _Unwind_Resume@PLT98.LEHE3:99.L5:100 call __cxa_begin_catch@PLT101 movq %rax, %rdi102 movq (%rax), %rax103 call *16(%rax)104 movq %rax, %rdi105.LEHB4:106 call puts@PLT107 # Trampoline to .L10108.LEHE4:109 call __cxa_end_catch@PLT110.L11:111 movl $0, %eax112 popq %rbx113 .cfi_remember_state114 .cfi_def_cfa_offset 24115 popq %rbp116 .cfi_def_cfa_offset 16117 popq %r12118 .cfi_def_cfa_offset 8119 ret120.L10:121 .cfi_restore_state122 movq %rax, %rbx123 call __cxa_end_catch@PLT124 movq %rbx, %rdi125.LEHB5:126 call _Unwind_Resume@PLT127.LEHE5:128 .cfi_endproc129 .globl __gxx_personality_v0130 .section .gcc_except_table,"a",@progbits131 .align 4132.LLSDA1265:133 .byte 0xff134 .byte 0x9b135 .uleb128 .LLSDATT1265-.LLSDATTD1265136.LLSDATTD1265:137 .byte 0x1138 .uleb128 .LLSDACSE1265-.LLSDACSB1265139.LLSDACSB1265:140 .uleb128 .LEHB0-.LFB1265141 .uleb128 .LEHE0-.LEHB0142 .uleb128 .L9-.LFB1265143 .uleb128 0x1144 .uleb128 .LEHB1-.LFB1265145 .uleb128 .LEHE1-.LEHB1146 .uleb128 .L8-.LFB1265147 .uleb128 0x3148 .uleb128 .LEHB2-.LFB1265149 .uleb128 .LEHE2-.LEHB2150 .uleb128 .L9-.LFB1265151 .uleb128 0x1152 .uleb128 .LEHB3-.LFB1265153 .uleb128 .LEHE3-.LEHB3154 .uleb128 0155 .uleb128 0156 .uleb128 .LEHB4-.LFB1265157 .uleb128 .LEHE4-.LEHB4158 .uleb128 .L10-.LFB1265159 .uleb128 0160 .uleb128 .LEHB5-.LFB1265161 .uleb128 .LEHE5-.LEHB5162 .uleb128 0163 .uleb128 0164.LLSDACSE1265:165 .byte 0x1166 .byte 0167 .byte 0168 .byte 0x7d169 .align 4170 .long DW.ref._ZTISt13runtime_error-.171.LLSDATT1265:172 .text173 .size main, .-main174 .hidden DW.ref._ZTISt13runtime_error175 .weak DW.ref._ZTISt13runtime_error176 .section .data.rel.local.DW.ref._ZTISt13runtime_error,"awG",@progbits,DW.ref._ZTISt13runtime_error,comdat177 .align 8178 .type DW.ref._ZTISt13runtime_error, @object179 .size DW.ref._ZTISt13runtime_error, 8180DW.ref._ZTISt13runtime_error:181 .quad _ZTISt13runtime_error182 .hidden DW.ref.__gxx_personality_v0183 .weak DW.ref.__gxx_personality_v0184 .section .data.rel.local.DW.ref.__gxx_personality_v0,"awG",@progbits,DW.ref.__gxx_personality_v0,comdat185 .align 8186 .type DW.ref.__gxx_personality_v0, @object187 .size DW.ref.__gxx_personality_v0, 8188DW.ref.__gxx_personality_v0:189 .quad __gxx_personality_v0190 .ident "GCC: (Compiler-Explorer-Build-gcc--binutils-2.38) 12.1.0"191 .section .note.GNU-stack,"",@progbits192