## Check that llvm-bolt avoids optimization of functions referenced from ## __rseq_cs section, i.e. containing critical sections and abort handlers used ## by restartable sequences in tcmalloc. # RUN: %clang %cflags %s -o %t -nostdlib -no-pie -Wl,-q # RUN: llvm-bolt %t -o %t.bolt --print-cfg 2>&1 | FileCheck %s # RUN: %clang %cflags %s -o %t.pie -nostdlib -pie -Wl,-q # RUN: llvm-bolt %t.pie -o %t.pie.bolt 2>&1 | FileCheck %s # CHECK: restartable sequence reference detected in _start # CHECK: restartable sequence reference detected in __rseq_abort ## Force relocations against .text .text .reloc 0, R_X86_64_NONE .global _start .type _start, %function _start: pushq %rbp mov %rsp, %rbp .L1: pop %rbp .L2: retq .size _start, .-_start .section __rseq_abort, "ax" ## Signature for rseq abort IP. Unmarked in the symbol table. .byte 0x0f, 0x1f, 0x05 .long 0x42424242 .L3: jmp .L2 .section __rseq_cs, "aw" .balign 32 .quad .L1 .quad .L3