[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