003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/lib/Target/ARM/MCTargetDesc
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
lib
/
Target
/
ARM
/
MCTargetDesc
/
📁
..
📄
ARMAddressingModes.h
(25.43 KB)
📄
ARMAsmBackend.cpp
(48.4 KB)
📄
ARMAsmBackend.h
(3.09 KB)
📄
ARMAsmBackendDarwin.h
(1.35 KB)
📄
ARMAsmBackendELF.h
(1008 B)
📄
ARMAsmBackendWinCOFF.h
(912 B)
📄
ARMBaseInfo.h
(13.92 KB)
📄
ARMELFObjectWriter.cpp
(9.97 KB)
📄
ARMELFStreamer.cpp
(49.31 KB)
📄
ARMFixupKinds.h
(4.07 KB)
📄
ARMInstPrinter.cpp
(57.09 KB)
📄
ARMInstPrinter.h
(16.32 KB)
📄
ARMMCAsmInfo.cpp
(3.33 KB)
📄
ARMMCAsmInfo.h
(1.37 KB)
📄
ARMMCCodeEmitter.cpp
(73.24 KB)
📄
ARMMCExpr.cpp
(1.16 KB)
📄
ARMMCExpr.h
(2.24 KB)
📄
ARMMCTargetDesc.cpp
(13.95 KB)
📄
ARMMCTargetDesc.h
(4.47 KB)
📄
ARMMachORelocationInfo.cpp
(1.45 KB)
📄
ARMMachObjectWriter.cpp
(19.16 KB)
📄
ARMTargetStreamer.cpp
(12.38 KB)
📄
ARMUnwindOpAsm.cpp
(6.86 KB)
📄
ARMUnwindOpAsm.h
(2.45 KB)
📄
ARMWinCOFFObjectWriter.cpp
(3.25 KB)
📄
ARMWinCOFFStreamer.cpp
(1.63 KB)
Editing: ARMWinCOFFObjectWriter.cpp
//===-- ARMWinCOFFObjectWriter.cpp - ARM Windows COFF Object Writer -- C++ -==// // // 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 "MCTargetDesc/ARMFixupKinds.h" #include "llvm/ADT/Twine.h" #include "llvm/BinaryFormat/COFF.h" #include "llvm/MC/MCAsmBackend.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCFixup.h" #include "llvm/MC/MCFixupKindInfo.h" #include "llvm/MC/MCObjectWriter.h" #include "llvm/MC/MCValue.h" #include "llvm/MC/MCWinCOFFObjectWriter.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" #include <cassert> using namespace llvm; namespace { class ARMWinCOFFObjectWriter : public MCWinCOFFObjectTargetWriter { public: ARMWinCOFFObjectWriter(bool Is64Bit) : MCWinCOFFObjectTargetWriter(COFF::IMAGE_FILE_MACHINE_ARMNT) { assert(!Is64Bit && "AArch64 support not yet implemented"); } ~ARMWinCOFFObjectWriter() override = default; unsigned getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsCrossSection, const MCAsmBackend &MAB) const override; bool recordRelocation(const MCFixup &) const override; }; } // end anonymous namespace unsigned ARMWinCOFFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsCrossSection, const MCAsmBackend &MAB) const { assert(getMachine() == COFF::IMAGE_FILE_MACHINE_ARMNT && "AArch64 support not yet implemented"); MCSymbolRefExpr::VariantKind Modifier = Target.isAbsolute() ? MCSymbolRefExpr::VK_None : Target.getSymA()->getKind(); switch (static_cast<unsigned>(Fixup.getKind())) { default: { const MCFixupKindInfo &Info = MAB.getFixupKindInfo(Fixup.getKind()); report_fatal_error(Twine("unsupported relocation type: ") + Info.Name); } case FK_Data_4: switch (Modifier) { case MCSymbolRefExpr::VK_COFF_IMGREL32: return COFF::IMAGE_REL_ARM_ADDR32NB; case MCSymbolRefExpr::VK_SECREL: return COFF::IMAGE_REL_ARM_SECREL; default: return COFF::IMAGE_REL_ARM_ADDR32; } case FK_SecRel_2: return COFF::IMAGE_REL_ARM_SECTION; case FK_SecRel_4: return COFF::IMAGE_REL_ARM_SECREL; case ARM::fixup_t2_condbranch: return COFF::IMAGE_REL_ARM_BRANCH20T; case ARM::fixup_t2_uncondbranch: case ARM::fixup_arm_thumb_bl: return COFF::IMAGE_REL_ARM_BRANCH24T; case ARM::fixup_arm_thumb_blx: return COFF::IMAGE_REL_ARM_BLX23T; case ARM::fixup_t2_movw_lo16: case ARM::fixup_t2_movt_hi16: return COFF::IMAGE_REL_ARM_MOV32T; } } bool ARMWinCOFFObjectWriter::recordRelocation(const MCFixup &Fixup) const { return static_cast<unsigned>(Fixup.getKind()) != ARM::fixup_t2_movt_hi16; } namespace llvm { std::unique_ptr<MCObjectTargetWriter> createARMWinCOFFObjectWriter(bool Is64Bit) { return std::make_unique<ARMWinCOFFObjectWriter>(Is64Bit); } } // end namespace llvm
Upload File
Create Folder