003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/lib/Target/AMDGPU/MCTargetDesc
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
lib
/
Target
/
AMDGPU
/
MCTargetDesc
/
📁
..
📄
AMDGPUAsmBackend.cpp
(7.72 KB)
📄
AMDGPUELFObjectWriter.cpp
(3.54 KB)
📄
AMDGPUELFStreamer.cpp
(1.33 KB)
📄
AMDGPUELFStreamer.h
(1.2 KB)
📄
AMDGPUFixupKinds.h
(799 B)
📄
AMDGPUInstPrinter.cpp
(49.86 KB)
📄
AMDGPUInstPrinter.h
(14.58 KB)
📄
AMDGPUMCAsmInfo.cpp
(2.47 KB)
📄
AMDGPUMCAsmInfo.h
(1.27 KB)
📄
AMDGPUMCCodeEmitter.cpp
(641 B)
📄
AMDGPUMCCodeEmitter.h
(2.84 KB)
📄
AMDGPUMCTargetDesc.cpp
(6.28 KB)
📄
AMDGPUMCTargetDesc.h
(2.7 KB)
📄
AMDGPUTargetStreamer.cpp
(27.22 KB)
📄
AMDGPUTargetStreamer.h
(6.45 KB)
📄
R600MCCodeEmitter.cpp
(6.45 KB)
📄
R600MCTargetDesc.cpp
(807 B)
📄
SIMCCodeEmitter.cpp
(16.86 KB)
Editing: AMDGPUELFObjectWriter.cpp
//===- AMDGPUELFObjectWriter.cpp - AMDGPU ELF Writer ----------------------===// // // 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 "AMDGPUFixupKinds.h" #include "AMDGPUMCTargetDesc.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/MCObjectWriter.h" #include "llvm/MC/MCSymbol.h" #include "llvm/MC/MCValue.h" #include "llvm/Support/ErrorHandling.h" using namespace llvm; namespace { class AMDGPUELFObjectWriter : public MCELFObjectTargetWriter { public: AMDGPUELFObjectWriter(bool Is64Bit, uint8_t OSABI, bool HasRelocationAddend, uint8_t ABIVersion); protected: unsigned getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsPCRel) const override; }; } // end anonymous namespace AMDGPUELFObjectWriter::AMDGPUELFObjectWriter(bool Is64Bit, uint8_t OSABI, bool HasRelocationAddend, uint8_t ABIVersion) : MCELFObjectTargetWriter(Is64Bit, OSABI, ELF::EM_AMDGPU, HasRelocationAddend, ABIVersion) {} unsigned AMDGPUELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsPCRel) const { if (const auto *SymA = Target.getSymA()) { // SCRATCH_RSRC_DWORD[01] is a special global variable that represents // the scratch buffer. if (SymA->getSymbol().getName() == "SCRATCH_RSRC_DWORD0" || SymA->getSymbol().getName() == "SCRATCH_RSRC_DWORD1") return ELF::R_AMDGPU_ABS32_LO; } switch (Target.getAccessVariant()) { default: break; case MCSymbolRefExpr::VK_GOTPCREL: return ELF::R_AMDGPU_GOTPCREL; case MCSymbolRefExpr::VK_AMDGPU_GOTPCREL32_LO: return ELF::R_AMDGPU_GOTPCREL32_LO; case MCSymbolRefExpr::VK_AMDGPU_GOTPCREL32_HI: return ELF::R_AMDGPU_GOTPCREL32_HI; case MCSymbolRefExpr::VK_AMDGPU_REL32_LO: return ELF::R_AMDGPU_REL32_LO; case MCSymbolRefExpr::VK_AMDGPU_REL32_HI: return ELF::R_AMDGPU_REL32_HI; case MCSymbolRefExpr::VK_AMDGPU_REL64: return ELF::R_AMDGPU_REL64; } switch (Fixup.getKind()) { default: break; case FK_PCRel_4: return ELF::R_AMDGPU_REL32; case FK_Data_4: case FK_SecRel_4: return ELF::R_AMDGPU_ABS32; case FK_Data_8: return ELF::R_AMDGPU_ABS64; } if (Fixup.getTargetKind() == AMDGPU::fixup_si_sopp_br) { const auto *SymA = Target.getSymA(); assert(SymA); Ctx.reportError(Fixup.getLoc(), Twine("undefined label '") + SymA->getSymbol().getName() + "'"); return ELF::R_AMDGPU_NONE; } llvm_unreachable("unhandled relocation type"); } std::unique_ptr<MCObjectTargetWriter> llvm::createAMDGPUELFObjectWriter(bool Is64Bit, uint8_t OSABI, bool HasRelocationAddend, uint8_t ABIVersion) { return std::make_unique<AMDGPUELFObjectWriter>(Is64Bit, OSABI, HasRelocationAddend, ABIVersion); }
Upload File
Create Folder