Home | History | Annotate | Download | only in MCTargetDesc
      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