| //===- ARMMachORelocationInfo.cpp -----------------------------------------===// |
| // |
| // 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 "ARMMCExpr.h" |
| #include "MCTargetDesc/ARMMCTargetDesc.h" |
| #include "llvm-c/Disassembler.h" |
| #include "llvm/MC/MCDisassembler/MCRelocationInfo.h" |
| #include "llvm/MC/MCExpr.h" |
| |
| using namespace llvm; |
| |
| namespace { |
| |
| class ARMMachORelocationInfo : public MCRelocationInfo { |
| public: |
| ARMMachORelocationInfo(MCContext &Ctx) : MCRelocationInfo(Ctx) {} |
| |
| const MCExpr *createExprForCAPIVariantKind(const MCExpr *SubExpr, |
| unsigned VariantKind) override { |
| switch(VariantKind) { |
| case LLVMDisassembler_VariantKind_ARM_HI16: |
| return ARMMCExpr::createUpper16(SubExpr, Ctx); |
| case LLVMDisassembler_VariantKind_ARM_LO16: |
| return ARMMCExpr::createLower16(SubExpr, Ctx); |
| default: |
| return MCRelocationInfo::createExprForCAPIVariantKind(SubExpr, |
| VariantKind); |
| } |
| } |
| }; |
| |
| } // end anonymous namespace |
| |
| /// createARMMachORelocationInfo - Construct an ARM Mach-O RelocationInfo. |
| MCRelocationInfo *llvm::createARMMachORelocationInfo(MCContext &Ctx) { |
| return new ARMMachORelocationInfo(Ctx); |
| } |