[PATCH] D125843: Testcase to repro R_X86_64_REX_GOTPCRELX bug

Rafael Auler via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 17 17:01:09 PDT 2022


rafauler created this revision.
rafauler added reviewers: maksfb, Amir, yota9, ayermolo.
Herald added a project: All.
rafauler requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

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.

Test Plan: new testcase


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D125843

Files:
  bolt/test/X86/gotpcrelx.s


Index: bolt/test/X86/gotpcrelx.s
===================================================================
--- /dev/null
+++ bolt/test/X86/gotpcrelx.s
@@ -0,0 +1,50 @@
+# 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-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
+
+# 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 at 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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D125843.430210.patch
Type: text/x-patch
Size: 1503 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220518/566470b5/attachment.bin>


More information about the llvm-commits mailing list