[PATCH] D18607: [ELF][MIPS] Revert r264761 and add test case to demonstrate the problem

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 30 15:48:29 PDT 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL264956: [ELF][MIPS] Revert r264761 and add test case to demonstrate the problem (authored by atanasyan).

Changed prior to commit:
  http://reviews.llvm.org/D18607?vs=52076&id=52144#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D18607

Files:
  lld/trunk/ELF/Target.cpp
  lld/trunk/ELF/Writer.cpp
  lld/trunk/test/ELF/mips-lo16-not-relative.s

Index: lld/trunk/test/ELF/mips-lo16-not-relative.s
===================================================================
--- lld/trunk/test/ELF/mips-lo16-not-relative.s
+++ lld/trunk/test/ELF/mips-lo16-not-relative.s
@@ -0,0 +1,23 @@
+# Check that R_MIPS_LO16 relocation is handled as non-relative,
+# and if a target symbol is a DSO data symbol, LLD create a copy
+# relocation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \
+# RUN:         %S/Inputs/mips-dynamic.s -o %t.so.o
+# RUN: ld.lld %t.so.o -shared -o %t.so
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
+# RUN: ld.lld %t.o %t.so -o %t.exe
+# RUN: llvm-readobj -r %t.exe | FileCheck %s
+
+# REQUIRES: mips
+
+# CHECK:      Relocations [
+# CHECK-NEXT:   Section (7) .rel.dyn {
+# CHECK-NEXT:     0x{{[0-9A-F]+}} R_MIPS_COPY data0 0x0
+# CHECK-NEXT:   }
+# CHECK-NEXT: ]
+
+  .text
+  .global __start
+__start:
+  addi   $t0, $t0, %lo(data0)
Index: lld/trunk/ELF/Target.cpp
===================================================================
--- lld/trunk/ELF/Target.cpp
+++ lld/trunk/ELF/Target.cpp
@@ -1844,6 +1844,7 @@
   case R_MIPS_32:
   case R_MIPS_64:
   case R_MIPS_HI16:
+  case R_MIPS_LO16:
   case R_MIPS_TLS_DTPREL_HI16:
   case R_MIPS_TLS_DTPREL_LO16:
   case R_MIPS_TLS_TPREL_HI16:
Index: lld/trunk/ELF/Writer.cpp
===================================================================
--- lld/trunk/ELF/Writer.cpp
+++ lld/trunk/ELF/Writer.cpp
@@ -434,6 +434,15 @@
     }
 
     if (Config->EMachine == EM_MIPS) {
+      if (Type == R_MIPS_LO16)
+        // Ignore R_MIPS_LO16 relocation. If it is a pair for R_MIPS_GOT16 we
+        // already completed all required action (GOT entry allocation) when
+        // handle R_MIPS_GOT16. If it is a pair for R_MIPS_HI16 against
+        // _gp_disp it does not require dynamic relocation. If its a pair for
+        // R_MIPS_HI16 against a regular symbol it does not require dynamic
+        // relocation too because that case is possible for executable file
+        // linking only.
+        continue;
       if (&Body == Config->MipsGpDisp || &Body == Config->MipsLocalGp)
         // MIPS _gp_disp designates offset between start of function and 'gp'
         // pointer into GOT. __gnu_local_gp is equal to the current value of


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18607.52144.patch
Type: text/x-patch
Size: 2288 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160330/51753210/attachment.bin>


More information about the llvm-commits mailing list