summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 15:06:44 +0000
commitb64793999546ed8adebaeebd9d8345d18db8927d (patch)
tree4357c27b561d73b0e089727c6ed659f2ceff5f47 /gnu/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
parentAdd support for UTF-8 DISPLAY-HINTs with octet length. For now only (diff)
downloadwireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.tar.xz
wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.zip
Remove LLVM 8.0.1 files.
Diffstat (limited to 'gnu/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp')
-rw-r--r--gnu/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp260
1 files changed, 0 insertions, 260 deletions
diff --git a/gnu/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/gnu/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
deleted file mode 100644
index b8ba7584911..00000000000
--- a/gnu/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-//===-- ARMELFObjectWriter.cpp - ARM ELF Writer ---------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "MCTargetDesc/ARMFixupKinds.h"
-#include "MCTargetDesc/ARMMCTargetDesc.h"
-#include "llvm/BinaryFormat/ELF.h"
-#include "llvm/MC/MCContext.h"
-#include "llvm/MC/MCELFObjectWriter.h"
-#include "llvm/MC/MCExpr.h"
-#include "llvm/MC/MCFixup.h"
-#include "llvm/MC/MCObjectFileInfo.h"
-#include "llvm/MC/MCObjectWriter.h"
-#include "llvm/MC/MCValue.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/raw_ostream.h"
-#include <cstdint>
-
-using namespace llvm;
-
-namespace {
-
- class ARMELFObjectWriter : public MCELFObjectTargetWriter {
- enum { DefaultEABIVersion = 0x05000000U };
-
- unsigned GetRelocTypeInner(const MCValue &Target, const MCFixup &Fixup,
- bool IsPCRel, MCContext &Ctx) const;
-
- public:
- ARMELFObjectWriter(uint8_t OSABI);
-
- ~ARMELFObjectWriter() override = default;
-
- unsigned getRelocType(MCContext &Ctx, const MCValue &Target,
- const MCFixup &Fixup, bool IsPCRel) const override;
-
- bool needsRelocateWithSymbol(const MCSymbol &Sym,
- unsigned Type) const override;
-
- void addTargetSectionFlags(MCContext &Ctx, MCSectionELF &Sec) override;
- };
-
-} // end anonymous namespace
-
-ARMELFObjectWriter::ARMELFObjectWriter(uint8_t OSABI)
- : MCELFObjectTargetWriter(/*Is64Bit*/ false, OSABI,
- ELF::EM_ARM,
- /*HasRelocationAddend*/ false) {}
-
-bool ARMELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
- unsigned Type) const {
- // FIXME: This is extremely conservative. This really needs to use a
- // whitelist with a clear explanation for why each realocation needs to
- // point to the symbol, not to the section.
- switch (Type) {
- default:
- return true;
-
- case ELF::R_ARM_PREL31:
- case ELF::R_ARM_ABS32:
- return false;
- }
-}
-
-// Need to examine the Fixup when determining whether to
-// emit the relocation as an explicit symbol or as a section relative
-// offset
-unsigned ARMELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
- const MCFixup &Fixup,
- bool IsPCRel) const {
- return GetRelocTypeInner(Target, Fixup, IsPCRel, Ctx);
-}
-
-unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
- const MCFixup &Fixup,
- bool IsPCRel,
- MCContext &Ctx) const {
- MCSymbolRefExpr::VariantKind Modifier = Target.getAccessVariant();
-
- if (IsPCRel) {
- switch ((unsigned)Fixup.getKind()) {
- default:
- Ctx.reportFatalError(Fixup.getLoc(), "unsupported relocation on symbol");
- return ELF::R_ARM_NONE;
- case FK_Data_4:
- switch (Modifier) {
- default:
- llvm_unreachable("Unsupported Modifier");
- case MCSymbolRefExpr::VK_None:
- return ELF::R_ARM_REL32;
- case MCSymbolRefExpr::VK_GOTTPOFF:
- return ELF::R_ARM_TLS_IE32;
- case MCSymbolRefExpr::VK_ARM_GOT_PREL:
- return ELF::R_ARM_GOT_PREL;
- case MCSymbolRefExpr::VK_ARM_PREL31:
- return ELF::R_ARM_PREL31;
- }
- case ARM::fixup_arm_blx:
- case ARM::fixup_arm_uncondbl:
- switch (Modifier) {
- case MCSymbolRefExpr::VK_PLT:
- return ELF::R_ARM_CALL;
- case MCSymbolRefExpr::VK_TLSCALL:
- return ELF::R_ARM_TLS_CALL;
- default:
- return ELF::R_ARM_CALL;
- }
- case ARM::fixup_arm_condbl:
- case ARM::fixup_arm_condbranch:
- case ARM::fixup_arm_uncondbranch:
- return ELF::R_ARM_JUMP24;
- case ARM::fixup_t2_condbranch:
- return ELF::R_ARM_THM_JUMP19;
- case ARM::fixup_t2_uncondbranch:
- return ELF::R_ARM_THM_JUMP24;
- case ARM::fixup_arm_movt_hi16:
- return ELF::R_ARM_MOVT_PREL;
- case ARM::fixup_arm_movw_lo16:
- return ELF::R_ARM_MOVW_PREL_NC;
- case ARM::fixup_t2_movt_hi16:
- return ELF::R_ARM_THM_MOVT_PREL;
- case ARM::fixup_t2_movw_lo16:
- return ELF::R_ARM_THM_MOVW_PREL_NC;
- case ARM::fixup_arm_thumb_br:
- return ELF::R_ARM_THM_JUMP11;
- case ARM::fixup_arm_thumb_bcc:
- return ELF::R_ARM_THM_JUMP8;
- case ARM::fixup_arm_thumb_bl:
- case ARM::fixup_arm_thumb_blx:
- switch (Modifier) {
- case MCSymbolRefExpr::VK_TLSCALL:
- return ELF::R_ARM_THM_TLS_CALL;
- default:
- return ELF::R_ARM_THM_CALL;
- }
- }
- }
- switch ((unsigned)Fixup.getKind()) {
- default:
- Ctx.reportFatalError(Fixup.getLoc(), "unsupported relocation on symbol");
- return ELF::R_ARM_NONE;
- case FK_Data_1:
- switch (Modifier) {
- default:
- llvm_unreachable("unsupported Modifier");
- case MCSymbolRefExpr::VK_None:
- return ELF::R_ARM_ABS8;
- }
- case FK_Data_2:
- switch (Modifier) {
- default:
- llvm_unreachable("unsupported modifier");
- case MCSymbolRefExpr::VK_None:
- return ELF::R_ARM_ABS16;
- }
- case FK_Data_4:
- switch (Modifier) {
- default:
- llvm_unreachable("Unsupported Modifier");
- case MCSymbolRefExpr::VK_ARM_NONE:
- return ELF::R_ARM_NONE;
- case MCSymbolRefExpr::VK_GOT:
- return ELF::R_ARM_GOT_BREL;
- case MCSymbolRefExpr::VK_TLSGD:
- return ELF::R_ARM_TLS_GD32;
- case MCSymbolRefExpr::VK_TPOFF:
- return ELF::R_ARM_TLS_LE32;
- case MCSymbolRefExpr::VK_GOTTPOFF:
- return ELF::R_ARM_TLS_IE32;
- case MCSymbolRefExpr::VK_None:
- return ELF::R_ARM_ABS32;
- case MCSymbolRefExpr::VK_GOTOFF:
- return ELF::R_ARM_GOTOFF32;
- case MCSymbolRefExpr::VK_ARM_GOT_PREL:
- return ELF::R_ARM_GOT_PREL;
- case MCSymbolRefExpr::VK_ARM_TARGET1:
- return ELF::R_ARM_TARGET1;
- case MCSymbolRefExpr::VK_ARM_TARGET2:
- return ELF::R_ARM_TARGET2;
- case MCSymbolRefExpr::VK_ARM_PREL31:
- return ELF::R_ARM_PREL31;
- case MCSymbolRefExpr::VK_ARM_SBREL:
- return ELF::R_ARM_SBREL32;
- case MCSymbolRefExpr::VK_ARM_TLSLDO:
- return ELF::R_ARM_TLS_LDO32;
- case MCSymbolRefExpr::VK_TLSCALL:
- return ELF::R_ARM_TLS_CALL;
- case MCSymbolRefExpr::VK_TLSDESC:
- return ELF::R_ARM_TLS_GOTDESC;
- case MCSymbolRefExpr::VK_TLSLDM:
- return ELF::R_ARM_TLS_LDM32;
- case MCSymbolRefExpr::VK_ARM_TLSDESCSEQ:
- return ELF::R_ARM_TLS_DESCSEQ;
- }
- case ARM::fixup_arm_condbranch:
- case ARM::fixup_arm_uncondbranch:
- return ELF::R_ARM_JUMP24;
- case ARM::fixup_arm_movt_hi16:
- switch (Modifier) {
- default:
- llvm_unreachable("Unsupported Modifier");
- case MCSymbolRefExpr::VK_None:
- return ELF::R_ARM_MOVT_ABS;
- case MCSymbolRefExpr::VK_ARM_SBREL:
- return ELF::R_ARM_MOVT_BREL;
- }
- case ARM::fixup_arm_movw_lo16:
- switch (Modifier) {
- default:
- llvm_unreachable("Unsupported Modifier");
- case MCSymbolRefExpr::VK_None:
- return ELF::R_ARM_MOVW_ABS_NC;
- case MCSymbolRefExpr::VK_ARM_SBREL:
- return ELF::R_ARM_MOVW_BREL_NC;
- }
- case ARM::fixup_t2_movt_hi16:
- switch (Modifier) {
- default:
- llvm_unreachable("Unsupported Modifier");
- case MCSymbolRefExpr::VK_None:
- return ELF::R_ARM_THM_MOVT_ABS;
- case MCSymbolRefExpr::VK_ARM_SBREL:
- return ELF::R_ARM_THM_MOVT_BREL;
- }
- case ARM::fixup_t2_movw_lo16:
- switch (Modifier) {
- default:
- llvm_unreachable("Unsupported Modifier");
- case MCSymbolRefExpr::VK_None:
- return ELF::R_ARM_THM_MOVW_ABS_NC;
- case MCSymbolRefExpr::VK_ARM_SBREL:
- return ELF::R_ARM_THM_MOVW_BREL_NC;
- }
- }
-}
-
-void ARMELFObjectWriter::addTargetSectionFlags(MCContext &Ctx,
- MCSectionELF &Sec) {
- // The mix of execute-only and non-execute-only at link time is
- // non-execute-only. To avoid the empty implicitly created .text
- // section from making the whole .text section non-execute-only, we
- // mark it execute-only if it is empty and there is at least one
- // execute-only section in the object.
- MCSectionELF *TextSection =
- static_cast<MCSectionELF *>(Ctx.getObjectFileInfo()->getTextSection());
- if (Sec.getKind().isExecuteOnly() && !TextSection->hasInstructions() &&
- !TextSection->hasData()) {
- TextSection->setFlags(TextSection->getFlags() | ELF::SHF_ARM_PURECODE);
- }
-}
-
-std::unique_ptr<MCObjectTargetWriter>
-llvm::createARMELFObjectWriter(uint8_t OSABI) {
- return llvm::make_unique<ARMELFObjectWriter>(OSABI);
-}