# REQUIRES: system-linux ## Check that BOLT correctly processes jump table that contains function start ## as one of its entries. # RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o # RUN: %clang %cflags %t.o -o %t.exe -no-pie -Wl,-q # RUN: llvm-bolt %t.exe --print-normalized --print-only=foo -o %t.out \ # RUN: 2>&1 | FileCheck %s .text .globl _start .type _start, %function _start: .cfi_startproc call foo ret .cfi_endproc .size _start, .-_start .globl foo .type foo, %function foo: .cfi_startproc .LBB00: movq 0x8(%rdi), %rdi movzbl 0x1(%rdi), %eax .LBB00_br: jmpq *"JUMP_TABLE/foo.0"(,%rax,8) # CHECK: jmpq {{.*}} # JUMPTABLE # CHECK-NEXT: Successors: {{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}} .Ltmp87085: xorl %eax, %eax retq .Ltmp87086: cmpb $0x0, 0x8(%rdi) setne %al retq .Ltmp87088: movb $0x1, %al retq .Ltmp87087: movzbl 0x14(%rdi), %eax andb $0x2, %al shrb %al retq .cfi_endproc .size foo, .-foo # Jump tables .section .rodata "JUMP_TABLE/foo.0": .quad .Ltmp87085 .quad .Ltmp87086 .quad .Ltmp87087 .quad .LBB00 .quad .Ltmp87088 # CHECK: Jump table {{.*}} for function foo # CHECK-NEXT: 0x{{.*}} : # CHECK-NEXT: 0x{{.*}} : # CHECK-NEXT: 0x{{.*}} : # CHECK-NEXT: 0x{{.*}} : # CHECK-NEXT: 0x{{.*}} :