mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 15:41:46 +00:00
[BOLT] Testcase to repro R_X86_64_REX_GOTPCRELX bug
Add a new testcase that reproduces a bug when BOLTing current trunk LLD bootstrapped with trunk clang. This makes it official that we do not support this transformation but are working on it. When the support is ready, XFAIL should be removed. Reviewed By: maksfb, Amir, yota9 Differential Revision: https://reviews.llvm.org/D125843
This commit is contained in:
parent
1dcda06c97
commit
6cc741bcbf
54
bolt/test/X86/gotpcrelx.s
Normal file
54
bolt/test/X86/gotpcrelx.s
Normal file
@ -0,0 +1,54 @@
|
||||
# This reproduces a bug with misinterpreting the gotpcrelx reloc
|
||||
|
||||
# Here we use llvm-mc -relax-relocations to produce R_X86_64_REX_GOTPCRELX
|
||||
# and ld.lld to consume it and optimize it, transforming a CMP <mem, reg>
|
||||
# into CMP <imm, reg>.
|
||||
# Then we check that BOLT updates correctly the imm operand that references
|
||||
# a function address. Currently XFAIL as we do not support it.
|
||||
|
||||
# REQUIRES: system-linux
|
||||
# XFAIL: *
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-linux \
|
||||
# RUN: -relax-relocations %s -o %t.o
|
||||
# RUN: llvm-strip --strip-unneeded %t.o
|
||||
# RUN: ld.lld %t.o -o %t.exe -q
|
||||
# RUN: llvm-readobj -r %t.exe | FileCheck --check-prefix=READOBJ %s
|
||||
# RUN: llvm-bolt %t.exe -relocs -o %t.out -lite=0
|
||||
# RUN: llvm-objdump -d --no-show-raw-insn --print-imm-hex \
|
||||
# RUN: %t.out | FileCheck --check-prefix=DISASM %s
|
||||
|
||||
# Check that R_X86_64_REX_GOTPCRELX is present in the input binary
|
||||
# READOBJ: 0x[[#%X,]] R_X86_64_REX_GOTPCRELX foo 0x[[#%X,]]
|
||||
|
||||
# DISASM: Disassembly of section .text:
|
||||
# DISASM-EMPTY:
|
||||
# DISASM-NEXT: <_start>:
|
||||
# DISASM-NEXT: leaq 0x[[#%x,ADDR:]], %rax
|
||||
# DISASM-NEXT: cmpq 0x[[#ADDR]], %rax
|
||||
|
||||
.text
|
||||
.globl _start
|
||||
.type _start, %function
|
||||
_start:
|
||||
.cfi_startproc
|
||||
leaq foo, %rax
|
||||
cmpq foo@GOTPCREL(%rip), %rax
|
||||
je b
|
||||
c:
|
||||
mov $1, %rdi
|
||||
callq foo
|
||||
b:
|
||||
xorq %rdi, %rdi
|
||||
callq foo
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size _start, .-_start
|
||||
|
||||
.globl foo
|
||||
.type foo, %function
|
||||
foo:
|
||||
.cfi_startproc
|
||||
ret
|
||||
.cfi_endproc
|
||||
.size foo, .-foo
|
Loading…
Reference in New Issue
Block a user