## Check that jump table detection does not fail on a false ## reference to a jump table. # REQUIRES: system-linux # RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown \ # RUN: %s -o %t.o # RUN: %clang %cflags %t.o -o %t.exe -Wl,-q # RUN: llvm-bolt %t.exe --print-cfg \ # RUN: --print-only=inc_dup -o %t.out | FileCheck %s .file "jump_table.c" .section .rodata .LC0: .string "0" .LC1: .string "1" .LC2: .string "2" .LC3: .string "3" .LC4: .string "4" .LC5: .string "5" .text .globl inc_dup .type inc_dup, @function inc_dup: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 subq $16, %rsp movl %edi, -4(%rbp) movl -4(%rbp), %eax subl $10, %eax cmpl $5, %eax ja .L2 # Control flow confusing for JT detection # CHECK: leaq "JUMP_TABLE{{.*}}"(%rip), %rdx leaq .L4(%rip), %rdx jmp .LJT # CHECK: leaq {{.*}}(%rip), %rdx leaq .LC0(%rip), %rdx jmp .L10 .LJT: movslq (%rdx,%rax,4), %rax addq %rdx, %rax # CHECK: jmpq *%rax # UNKNOWN CONTROL FLOW jmp *%rax .section .rodata .align 4 .align 4 .L4: .long .L3-.L4 .long .L5-.L4 .long .L6-.L4 .long .L7-.L4 .long .L8-.L4 .long .L9-.L4 .text .L3: leaq .LC0(%rip), %rdi call puts@PLT movl $1, %eax jmp .L10 .L5: leaq .LC1(%rip), %rdi call puts@PLT movl $2, %eax jmp .L10 .L6: leaq .LC2(%rip), %rdi call puts@PLT movl $3, %eax jmp .L10 .L7: leaq .LC3(%rip), %rdi call puts@PLT movl $4, %eax jmp .L10 .L8: leaq .LC4(%rip), %rdi call puts@PLT movl $5, %eax jmp .L10 .L9: leaq .LC5(%rip), %rdi call puts@PLT movl $6, %eax jmp .L10 .L2: movl -4(%rbp), %eax addl $1, %eax .L10: leave .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size inc_dup, .-inc_dup .text .globl main .type main, @function main: .LFB1: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 subq $16, %rsp movl %edi, -4(%rbp) movq %rsi, -16(%rbp) movl -4(%rbp), %eax addl $9, %eax movl %eax, %edi call inc_dup@PLT leave .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1: .size main, .-main .ident "GCC: (GNU) 6.3.0" .section .note.GNU-stack,"",@progbits