mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 02:26:05 +00:00

Detect and support fixed PIC indirect jumps of the following form: ``` movslq En(%rip), %r1 leaq PIC_JUMP_TABLE(%rip), %r2 addq %r2, %r1 jmpq *%r1 ``` with PIC_JUMP_TABLE that looks like following: ``` JT: ---------- E1:| L1 - JT | |----------| E2:| L2 - JT | |----------| | | ...... En:| Ln - JT | ---------- ``` The code could be produced by compilers, see https://github.com/llvm/llvm-project/issues/91648. Test Plan: updated jump-table-fixed-ref-pic.test Reviewers: maksfb, ayermolo, dcci, rafaelauler Reviewed By: rafaelauler Pull Request: https://github.com/llvm/llvm-project/pull/91667
14 lines
544 B
Plaintext
14 lines
544 B
Plaintext
## Verify that BOLT detects fixed destination of indirect jump for PIC
|
|
## case.
|
|
|
|
RUN: %clang %cflags -no-pie %S/Inputs/jump-table-fixed-ref-pic.s -Wl,-q -o %t
|
|
RUN: llvm-bolt %t --relocs -o %t.null -print-cfg 2>&1 | FileCheck %s
|
|
|
|
CHECK: BOLT-INFO: fixed PIC indirect branch detected in main {{.*}} the destination value is 0x[[#TGT:]]
|
|
CHECK: Binary Function "main" after building cfg
|
|
|
|
CHECK: movslq ".rodata/1"+8(%rip), %rax
|
|
CHECK-NEXT: leaq ".rodata/1"(%rip), %rdx
|
|
CHECK-NEXT: addq %rdx, %rax
|
|
CHECK-NEXT: jmpq *%rax # UNKNOWN CONTROL FLOW
|