diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-12-20 19:53:05 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-12-20 19:53:05 +0000 |
| commit | 0b57cec536236d46e3dba9bd041533462f33dbb7 (patch) | |
| tree | 56229dbdbbf76d18580f72f789003db17246c8d9 /contrib/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp | |
| parent | 718ef55ec7785aae63f98f8ca05dc07ed399c16d (diff) | |
Notes
Diffstat (limited to 'contrib/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp')
| -rw-r--r-- | contrib/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/contrib/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp b/contrib/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp deleted file mode 100644 index e237fab1b267..000000000000 --- a/contrib/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp +++ /dev/null @@ -1,58 +0,0 @@ -//===-- PPCTargetObjectFile.cpp - PPC Object Info -------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "PPCTargetObjectFile.h" -#include "llvm/IR/Mangler.h" -#include "llvm/MC/MCContext.h" -#include "llvm/MC/MCExpr.h" -#include "llvm/MC/MCSectionELF.h" - -using namespace llvm; - -void -PPC64LinuxTargetObjectFile:: -Initialize(MCContext &Ctx, const TargetMachine &TM) { - TargetLoweringObjectFileELF::Initialize(Ctx, TM); - InitializeELF(TM.Options.UseInitArray); -} - -MCSection *PPC64LinuxTargetObjectFile::SelectSectionForGlobal( - const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const { - // Here override ReadOnlySection to DataRelROSection for PPC64 SVR4 ABI - // when we have a constant that contains global relocations. This is - // necessary because of this ABI's handling of pointers to functions in - // a shared library. The address of a function is actually the address - // of a function descriptor, which resides in the .opd section. Generated - // code uses the descriptor directly rather than going via the GOT as some - // other ABIs do, which means that initialized function pointers must - // reference the descriptor. The linker must convert copy relocs of - // pointers to functions in shared libraries into dynamic relocations, - // because of an ordering problem with initialization of copy relocs and - // PLT entries. The dynamic relocation will be initialized by the dynamic - // linker, so we must use DataRelROSection instead of ReadOnlySection. - // For more information, see the description of ELIMINATE_COPY_RELOCS in - // GNU ld. - if (Kind.isReadOnly()) { - const auto *GVar = dyn_cast<GlobalVariable>(GO); - - if (GVar && GVar->isConstant() && GVar->getInitializer()->needsRelocation()) - Kind = SectionKind::getReadOnlyWithRel(); - } - - return TargetLoweringObjectFileELF::SelectSectionForGlobal(GO, Kind, TM); -} - -const MCExpr *PPC64LinuxTargetObjectFile:: -getDebugThreadLocalSymbol(const MCSymbol *Sym) const { - const MCExpr *Expr = - MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_DTPREL, getContext()); - return MCBinaryExpr::createAdd(Expr, - MCConstantExpr::create(0x8000, getContext()), - getContext()); -} - |
