1 //===- ARMMachORelocationInfo.cpp -----------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "ARMMCExpr.h" 11 #include "MCTargetDesc/ARMMCTargetDesc.h" 12 #include "llvm-c/Disassembler.h" 13 #include "llvm/MC/MCDisassembler/MCRelocationInfo.h" 14 #include "llvm/MC/MCExpr.h" 15 16 using namespace llvm; 17 18 namespace { 19 20 class ARMMachORelocationInfo : public MCRelocationInfo { 21 public: 22 ARMMachORelocationInfo(MCContext &Ctx) : MCRelocationInfo(Ctx) {} 23 24 const MCExpr *createExprForCAPIVariantKind(const MCExpr *SubExpr, 25 unsigned VariantKind) override { 26 switch(VariantKind) { 27 case LLVMDisassembler_VariantKind_ARM_HI16: 28 return ARMMCExpr::createUpper16(SubExpr, Ctx); 29 case LLVMDisassembler_VariantKind_ARM_LO16: 30 return ARMMCExpr::createLower16(SubExpr, Ctx); 31 default: 32 return MCRelocationInfo::createExprForCAPIVariantKind(SubExpr, 33 VariantKind); 34 } 35 } 36 }; 37 38 } // end anonymous namespace 39 40 /// createARMMachORelocationInfo - Construct an ARM Mach-O RelocationInfo. 41 MCRelocationInfo *llvm::createARMMachORelocationInfo(MCContext &Ctx) { 42 return new ARMMachORelocationInfo(Ctx); 43 } 44