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