[lld] r280709 - Mark R_GOTREL_FROM_END as a relative expression.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 6 06:57:16 PDT 2016


Author: rafael
Date: Tue Sep  6 08:57:15 2016
New Revision: 280709

URL: http://llvm.org/viewvc/llvm-project?rev=280709&view=rev
Log:
Mark R_GOTREL_FROM_END as a relative expression.

Fixes pr30282.

Added:
    lld/trunk/test/ELF/i386-gotoff-shared.s
Modified:
    lld/trunk/ELF/Relocations.cpp

Modified: lld/trunk/ELF/Relocations.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Relocations.cpp?rev=280709&r1=280708&r2=280709&view=diff
==============================================================================
--- lld/trunk/ELF/Relocations.cpp (original)
+++ lld/trunk/ELF/Relocations.cpp Tue Sep  6 08:57:15 2016
@@ -283,8 +283,9 @@ static bool needsPlt(RelExpr Expr) {
 // True if this expression is of the form Sym - X, where X is a position in the
 // file (PC, or GOT for example).
 static bool isRelExpr(RelExpr Expr) {
-  return Expr == R_PC || Expr == R_GOTREL || Expr == R_PAGE_PC ||
-         Expr == R_RELAX_GOT_PC || Expr == R_THUNK_PC || Expr == R_THUNK_PLT_PC;
+  return Expr == R_PC || Expr == R_GOTREL || Expr == R_GOTREL_FROM_END ||
+         Expr == R_PAGE_PC || Expr == R_RELAX_GOT_PC || Expr == R_THUNK_PC ||
+         Expr == R_THUNK_PLT_PC;
 }
 
 template <class ELFT>

Added: lld/trunk/test/ELF/i386-gotoff-shared.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/i386-gotoff-shared.s?rev=280709&view=auto
==============================================================================
--- lld/trunk/test/ELF/i386-gotoff-shared.s (added)
+++ lld/trunk/test/ELF/i386-gotoff-shared.s Tue Sep  6 08:57:15 2016
@@ -0,0 +1,23 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=i686-pc-linux %s -o %t.o
+// RUN: ld.lld %t.o -o %t.so -shared
+// RUN: llvm-readobj -s %t.so | FileCheck %s
+// RUN: llvm-objdump -d %t.so | FileCheck --check-prefix=DISASM %s
+
+bar:
+        movl    bar at GOTOFF(%ebx), %eax
+        mov     bar at GOT, %eax
+
+// CHECK:      Name: .got
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT:   SHF_ALLOC
+// CHECK-NEXT:   SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x2050
+// CHECK-NEXT: Offset: 0x2050
+// CHECK-NEXT: Size: 4
+
+// 0x1000 - (0x2050 + 4) = -4180
+
+// DISASM:  1000: {{.*}} movl    -4180(%ebx), %eax




More information about the llvm-commits mailing list