43 lines · cpp
1//===- ARMMachORelocationInfo.cpp -----------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "ARMMCAsmInfo.h"10#include "MCTargetDesc/ARMMCTargetDesc.h"11#include "llvm-c/Disassembler.h"12#include "llvm/MC/MCDisassembler/MCRelocationInfo.h"13#include "llvm/MC/MCExpr.h"14 15using namespace llvm;16 17namespace {18 19class ARMMachORelocationInfo : public MCRelocationInfo {20public:21 ARMMachORelocationInfo(MCContext &Ctx) : MCRelocationInfo(Ctx) {}22 23 const MCExpr *createExprForCAPIVariantKind(const MCExpr *SubExpr,24 unsigned VariantKind) override {25 switch(VariantKind) {26 case LLVMDisassembler_VariantKind_ARM_HI16:27 return ARM::createUpper16(SubExpr, Ctx);28 case LLVMDisassembler_VariantKind_ARM_LO16:29 return ARM::createLower16(SubExpr, Ctx);30 default:31 return MCRelocationInfo::createExprForCAPIVariantKind(SubExpr,32 VariantKind);33 }34 }35};36 37} // end anonymous namespace38 39/// createARMMachORelocationInfo - Construct an ARM Mach-O RelocationInfo.40MCRelocationInfo *llvm::createARMMachORelocationInfo(MCContext &Ctx) {41 return new ARMMachORelocationInfo(Ctx);42}43