[PATCH] D74022: [ELF][RISCV] Add R_RISCV_IRELATIVE

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 10 20:27:00 PST 2020


This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rG9f854c048997: [ELF][RISCV] Add R_RISCV_IRELATIVE (authored by MaskRay).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D74022/new/

https://reviews.llvm.org/D74022

Files:
  lld/ELF/Arch/RISCV.cpp
  lld/test/ELF/riscv-ifunc-nonpreemptible.s
  llvm/include/llvm/BinaryFormat/ELFRelocs/RISCV.def


Index: llvm/include/llvm/BinaryFormat/ELFRelocs/RISCV.def
===================================================================
--- llvm/include/llvm/BinaryFormat/ELFRelocs/RISCV.def
+++ llvm/include/llvm/BinaryFormat/ELFRelocs/RISCV.def
@@ -57,3 +57,4 @@
 ELF_RELOC(R_RISCV_SET16,             55)
 ELF_RELOC(R_RISCV_SET32,             56)
 ELF_RELOC(R_RISCV_32_PCREL,          57)
+ELF_RELOC(R_RISCV_IRELATIVE,         58)
Index: lld/test/ELF/riscv-ifunc-nonpreemptible.s
===================================================================
--- /dev/null
+++ lld/test/ELF/riscv-ifunc-nonpreemptible.s
@@ -0,0 +1,58 @@
+# REQUIRES: riscv
+# RUN: llvm-mc -filetype=obj -triple=riscv32 %s -o %t.32.o
+# RUN: ld.lld -pie %t.32.o -o %t.32
+# RUN: llvm-readobj -r %t.32 | FileCheck --check-prefix=RELOC32 %s
+# RUN: llvm-readelf -s %t.32 | FileCheck --check-prefix=SYM32 %s
+# RUN: llvm-objdump -d --no-show-raw-insn %t.32 | FileCheck --check-prefix=DIS32 %s
+
+# RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.64.o
+# RUN: ld.lld -pie %t.64.o -o %t.64
+# RUN: llvm-readobj -r %t.64 | FileCheck --check-prefix=RELOC64 %s
+# RUN: llvm-readelf -s %t.64 | FileCheck --check-prefix=SYM64 %s
+# RUN: llvm-objdump -d --no-show-raw-insn %t.64 | FileCheck --check-prefix=DIS64 %s
+
+# RELOC32:      .rela.dyn {
+# RELOC32-NEXT:   0x3218 R_RISCV_IRELATIVE - 0x117C
+# RELOC32-NEXT: }
+
+# SYM32: 0001190 0 FUNC GLOBAL DEFAULT {{.*}} func
+
+# DIS32:      _start:
+# DIS32-NEXT: 1180: auipc a0, 0
+# DIS32-NEXT:       addi a0, a0, 16
+# DIS32:      Disassembly of section .iplt:
+# DIS32:      func:
+## 32-bit: &.got.plt[func]-. = 0x3218-0x1190 = 4096*2+136
+# DIS32-NEXT: 1190: auipc t3, 2
+# DIS32-NEXT:       lw t3, 136(t3)
+# DIS32-NEXT:       jalr t1, t3
+# DIS32-NEXT:       nop
+
+# RELOC64:      .rela.dyn {
+# RELOC64-NEXT:   0x3370 R_RISCV_IRELATIVE - 0x1260
+# RELOC64-NEXT: }
+
+# SYM64: 000000000001270 0 FUNC GLOBAL DEFAULT {{.*}} func
+
+# DIS64:      _start:
+# DIS64-NEXT: 1264: auipc a0, 0
+# DIS64-NEXT:       addi a0, a0, 12
+# DIS64:      Disassembly of section .iplt:
+# DIS64:      func:
+## 64-bit: &.got.plt[func]-. = 0x3370-0x1270 = 4096*2+256
+# DIS64-NEXT: 1270: auipc t3, 2
+# DIS64-NEXT:       ld t3, 256(t3)
+# DIS64-NEXT:       jalr t1, t3
+# DIS64-NEXT:       nop
+
+.text
+.globl func
+.type func, @gnu_indirect_function
+func:
+  ret
+
+.globl _start
+_start:
+.L:
+  auipc a0, %pcrel_hi(func)
+  addi a0, a0, %pcrel_lo(.L)
Index: lld/ELF/Arch/RISCV.cpp
===================================================================
--- lld/ELF/Arch/RISCV.cpp
+++ lld/ELF/Arch/RISCV.cpp
@@ -77,6 +77,7 @@
   noneRel = R_RISCV_NONE;
   pltRel = R_RISCV_JUMP_SLOT;
   relativeRel = R_RISCV_RELATIVE;
+  iRelativeRel = R_RISCV_IRELATIVE;
   if (config->is64) {
     symbolicRel = R_RISCV_64;
     tlsModuleIndexRel = R_RISCV_TLS_DTPMOD64;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D74022.243727.patch
Type: text/x-patch
Size: 2848 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200211/17797b73/attachment-0001.bin>


More information about the llvm-commits mailing list