[lld] r271798 - Fix implicit plt creation on aarch64.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 4 12:11:14 PDT 2016


Author: rafael
Date: Sat Jun  4 14:11:14 2016
New Revision: 271798

URL: http://llvm.org/viewvc/llvm-project?rev=271798&view=rev
Log:
Fix implicit plt creation on aarch64.

We were not handling page relative relocations.

Added:
    lld/trunk/test/ELF/Inputs/aarch64-copy2.s
    lld/trunk/test/ELF/aarch64-copy2.s
Modified:
    lld/trunk/ELF/InputSection.cpp
    lld/trunk/ELF/Relocations.cpp
    lld/trunk/ELF/Relocations.h

Modified: lld/trunk/ELF/InputSection.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.cpp?rev=271798&r1=271797&r2=271798&view=diff
==============================================================================
--- lld/trunk/ELF/InputSection.cpp (original)
+++ lld/trunk/ELF/InputSection.cpp Sat Jun  4 14:11:14 2016
@@ -263,6 +263,7 @@ getSymVA(uint32_t Type, typename ELFT::u
   case R_PC:
   case R_RELAX_GOT_PC:
     return Body.getVA<ELFT>(A) - P;
+  case R_PLT_PAGE_PC:
   case R_PAGE_PC:
     return getAArch64Page(Body.getVA<ELFT>(A)) - getAArch64Page(P);
   }

Modified: lld/trunk/ELF/Relocations.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Relocations.cpp?rev=271798&r1=271797&r2=271798&view=diff
==============================================================================
--- lld/trunk/ELF/Relocations.cpp (original)
+++ lld/trunk/ELF/Relocations.cpp Sat Jun  4 14:11:14 2016
@@ -251,7 +251,8 @@ template <class ELFT> static bool isAbso
 }
 
 static bool needsPlt(RelExpr Expr) {
-  return Expr == R_PLT_PC || Expr == R_PPC_PLT_OPD || Expr == R_PLT;
+  return Expr == R_PLT_PC || Expr == R_PPC_PLT_OPD || Expr == R_PLT ||
+         Expr == R_PLT_PAGE_PC;
 }
 
 // True if this expression is of the form Sym - X, where X is a position in the
@@ -311,6 +312,8 @@ static RelExpr toPlt(RelExpr Expr) {
     return R_PPC_PLT_OPD;
   if (Expr == R_PC)
     return R_PLT_PC;
+  if (Expr == R_PAGE_PC)
+    return R_PLT_PAGE_PC;
   if (Expr == R_ABS)
     return R_PLT;
   return Expr;

Modified: lld/trunk/ELF/Relocations.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Relocations.h?rev=271798&r1=271797&r2=271798&view=diff
==============================================================================
--- lld/trunk/ELF/Relocations.h (original)
+++ lld/trunk/ELF/Relocations.h Sat Jun  4 14:11:14 2016
@@ -35,6 +35,7 @@ enum RelExpr {
   R_PC,
   R_PLT,
   R_PLT_PC,
+  R_PLT_PAGE_PC,
   R_PPC_OPD,
   R_PPC_PLT_OPD,
   R_PPC_TOC,

Added: lld/trunk/test/ELF/Inputs/aarch64-copy2.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/aarch64-copy2.s?rev=271798&view=auto
==============================================================================
--- lld/trunk/test/ELF/Inputs/aarch64-copy2.s (added)
+++ lld/trunk/test/ELF/Inputs/aarch64-copy2.s Sat Jun  4 14:11:14 2016
@@ -0,0 +1,5 @@
+        .global foo
+        .type foo, @function
+foo:
+        .global bar
+bar:

Added: lld/trunk/test/ELF/aarch64-copy2.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/aarch64-copy2.s?rev=271798&view=auto
==============================================================================
--- lld/trunk/test/ELF/aarch64-copy2.s (added)
+++ lld/trunk/test/ELF/aarch64-copy2.s Sat Jun  4 14:11:14 2016
@@ -0,0 +1,26 @@
+// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=aarch64-pc-linux
+// RUN: llvm-mc %p/Inputs/aarch64-copy2.s -o %t2.o -filetype=obj -triple=aarch64-pc-linux
+// RUN: ld.lld %t2.o -o %t2.so -shared
+// RUN: ld.lld %t.o %t2.so -o %t
+// RUN: llvm-readobj -t %t | FileCheck %s
+
+        .global _start
+_start:
+        adrp    x8, foo
+        bl bar
+
+// CHECK:      Name: bar
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined
+
+// CHECK:      Name: foo
+// CHECK-NEXT: Value: 0x11030
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Global
+// CHECK-NEXT: Type: Function
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: Undefined




More information about the llvm-commits mailing list