svn commit: r352009 - projects/clang900-import/contrib/llvm/lib/Target/PowerPC

Dimitry Andric dim at FreeBSD.org
Sat Sep 7 12:23:57 UTC 2019


Author: dim
Date: Sat Sep  7 12:23:57 2019
New Revision: 352009
URL: https://svnweb.freebsd.org/changeset/base/352009

Log:
  Pull in r370426 from upstream llvm trunk (by Fāng-ruì Sòng):
  
    [PPC32] Emit R_PPC_GOT_TPREL16 instead R_PPC_GOT_TPREL16_LO
  
    Unlike ppc64, which has ADDISgotTprelHA+LDgotTprelL pairs, ppc32 just
    uses LDgotTprelL32, so it does not make lots of sense to use _LO
    without a paired _HA.
  
    Emit R_PPC_GOT_TPREL16 instead R_PPC_GOT_TPREL16_LO to match GCC, and
    get better linker relocation check. Note, R_PPC_GOT_TPREL16_{HA,LO}
    don't have good linker support:
  
    (a) lld does not support R_PPC_GOT_TPREL16_{HA,LO}.
    (b) Top of tree ld.bfd does not support R_PPC_GOT_REL16_HA
        Initial-Exec -> Local-Exec relaxation:
  
      // a.o
      addis 3, 3, tsd_tls at got@tprel at ha
      lwz 3, tsd_tls at got@tprel at l(3)
      add 3, 3, tsd_tls at tls
      // b.o
      .section .tdata,"awT"; .globl tsd_tls; tsd_tls:
  
      // ld/ld-new a.o b.o
      internal error, aborting at ../../bfd/elf32-ppc.c:7952 in
      ppc_elf_relocate_section
  
    Reviewed By: adalava
  
    Differential Revision: https://reviews.llvm.org/D66925
  
  This allows use of LLD for linking 32-bit static binaries on
  FreeBSD/powerpc.
  
  Submitted by:	Alfredo Dal'Ava Júnior <alfredo.junior at eldorado.org.br>

Modified:
  projects/clang900-import/contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp

Modified: projects/clang900-import/contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
==============================================================================
--- projects/clang900-import/contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp	Sat Sep  7 12:20:47 2019	(r352008)
+++ projects/clang900-import/contrib/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp	Sat Sep  7 12:23:57 2019	(r352009)
@@ -866,8 +866,10 @@ void PPCAsmPrinter::EmitInstruction(const MachineInstr
     const GlobalValue *GValue = MO.getGlobal();
     MCSymbol *MOSymbol = getSymbol(GValue);
     const MCExpr *Exp =
-      MCSymbolRefExpr::create(MOSymbol, MCSymbolRefExpr::VK_PPC_GOT_TPREL_LO,
-                              OutContext);
+        MCSymbolRefExpr::create(MOSymbol,
+                                isPPC64 ? MCSymbolRefExpr::VK_PPC_GOT_TPREL_LO
+                                        : MCSymbolRefExpr::VK_PPC_GOT_TPREL,
+                                OutContext);
     TmpInst.getOperand(1) = MCOperand::createExpr(Exp);
     EmitToStreamer(*OutStreamer, TmpInst);
     return;


More information about the svn-src-projects mailing list