[lld] r291658 - [ELF] - Explicitly list supported relocations for x86 target.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 11 00:29:52 PST 2017


Author: grimar
Date: Wed Jan 11 02:29:52 2017
New Revision: 291658

URL: http://llvm.org/viewvc/llvm-project?rev=291658&view=rev
Log:
[ELF] - Explicitly list supported relocations for x86 target.

Previously some value was returned by default for relocations by getRelExpr(),
even if relocation actually was not supported.

This is orthogonal alternative to D28094.
Instead of implementing probably useless R_386_PC8/R_386_8 relocations,
this patch uses them in a testcase to demonstrate what happens
when LLD mets unsupported relocations.

Patch passes all testcases and changes logic only for x86.

Differential revision: https://reviews.llvm.org/D28516

Added:
    lld/trunk/test/ELF/Inputs/unknown-reloc.s
    lld/trunk/test/ELF/unknown-reloc.s
Modified:
    lld/trunk/ELF/Target.cpp

Modified: lld/trunk/ELF/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=291658&r1=291657&r2=291658&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Wed Jan 11 02:29:52 2017
@@ -356,7 +356,9 @@ X86TargetInfo::X86TargetInfo() {
 
 RelExpr X86TargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const {
   switch (Type) {
-  default:
+  case R_386_16:
+  case R_386_32:
+  case R_386_TLS_LDO_32:
     return R_ABS;
   case R_386_TLS_GD:
     return R_TLSGD;
@@ -381,6 +383,10 @@ RelExpr X86TargetInfo::getRelExpr(uint32
     return R_TLS;
   case R_386_TLS_LE_32:
     return R_NEG_TLS;
+  default:
+    error("do not know how to handle relocation " + toString(Type) + " (" +
+          Twine(Type) + ")");
+    return R_HINT;
   }
 }
 

Added: lld/trunk/test/ELF/Inputs/unknown-reloc.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/unknown-reloc.s?rev=291658&view=auto
==============================================================================
--- lld/trunk/test/ELF/Inputs/unknown-reloc.s (added)
+++ lld/trunk/test/ELF/Inputs/unknown-reloc.s Wed Jan 11 02:29:52 2017
@@ -0,0 +1,2 @@
+.global und
+und:

Added: lld/trunk/test/ELF/unknown-reloc.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/unknown-reloc.s?rev=291658&view=auto
==============================================================================
--- lld/trunk/test/ELF/unknown-reloc.s (added)
+++ lld/trunk/test/ELF/unknown-reloc.s Wed Jan 11 02:29:52 2017
@@ -0,0 +1,14 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %s -o %t1.o
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux-gnu %S/Inputs/unknown-reloc.s -o %t2.o
+# RUN: not ld.lld %t1.o %t2.o -o %t.out 2>&1 | FileCheck %s
+
+# CHECK: do not know how to handle relocation R_386_PC8 (23)
+# CHECK: do not know how to handle relocation R_386_8 (22)
+
+.text
+.global foo
+foo:
+
+.byte und-foo
+.byte foo




More information about the llvm-commits mailing list