Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Dec 2019 21:20:45 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r356100 - head/contrib/llvm-project/llvm/lib/Target/PowerPC
Message-ID:  <201912262120.xBQLKjSt013860@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Thu Dec 26 21:20:45 2019
New Revision: 356100
URL: https://svnweb.freebsd.org/changeset/base/356100

Log:
  Merge commit d3aeac8e2 from llvm git (by Justin Hibbits)
  
    [PowerPC] Only use PLT annotations if using PIC relocation model
  
    Summary:
    The default static (non-PIC, non-PIE) model for 32-bit powerpc does
    not use @PLT annotations and relocations in GCC.  LLVM shouldn't use
    @PLT annotations either, because it breaks secure-PLT linking with
    (some versions of?) GNU LD.
  
    Update the available-externally.ll test to reflect that default mode
    should be the same as the static relocation, by using the same check
    prefix.
  
    Reviewed by:    sfertile
    Differential Revision: https://reviews.llvm.org/D70570
  
  Reviewed by:	jhibbits
  Differential Revision: https://reviews.freebsd.org/D22913

Modified:
  head/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCISelLowering.cpp

Modified: head/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
==============================================================================
--- head/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCISelLowering.cpp	Thu Dec 26 21:06:34 2019	(r356099)
+++ head/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCISelLowering.cpp	Thu Dec 26 21:20:45 2019	(r356100)
@@ -4952,7 +4952,12 @@ PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValu
   if (auto *G = dyn_cast<GlobalAddressSDNode>(Callee))
     GV = G->getGlobal();
   bool Local = TM.shouldAssumeDSOLocal(*Mod, GV);
-  bool UsePlt = !Local && Subtarget.isTargetELF() && !isPPC64;
+  // The PLT is only used in 32-bit ELF PIC mode.  Attempting to use the PLT in
+  // a static relocation model causes some versions of GNU LD (2.17.50, at
+  // least) to force BSS-PLT, instead of secure-PLT, even if all objects are
+  // built with secure-PLT.
+  bool UsePlt = !Local && Subtarget.isTargetELF() && !isPPC64 &&
+    Subtarget.getTargetMachine().getRelocationModel() == Reloc::PIC_;
 
   // If the callee is a GlobalAddress/ExternalSymbol node (quite common,
   // every direct call is) turn it into a TargetGlobalAddress /



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912262120.xBQLKjSt013860>