ARMJITInfo.h revision 148b6a419fbb20e2224a1b92c499d51513b9bc27
1//===- ARMJITInfo.h - ARM implementation of the JIT interface --*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the Raul Herbster (raulherbster [at] gmail [dot] 6// com) and is distributed under the University of Illinois Open Source License. 7// See LICENSE.TXT for details. 8// 9//===----------------------------------------------------------------------===// 10// 11// This file contains the declaration of the ARMJITInfo class. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef ARMJITINFO_H 16#define ARMJITINFO_H 17 18#include "llvm/Target/TargetJITInfo.h" 19 20namespace llvm { 21 class ARMTargetMachine; 22 23 class ARMJITInfo : public TargetJITInfo { 24 ARMTargetMachine &TM; 25 public: 26 ARMJITInfo(ARMTargetMachine &tm) : TM(tm) {useGOT = 0;} 27 28 /// replaceMachineCodeForFunction - Make it so that calling the function 29 /// whose machine code is at OLD turns into a call to NEW, perhaps by 30 /// overwriting OLD with a branch to NEW. This is used for self-modifying 31 /// code. 32 /// 33 virtual void replaceMachineCodeForFunction(void *Old, void *New); 34 35 /// emitFunctionStub - Use the specified MachineCodeEmitter object to emit a 36 /// small native function that simply calls the function at the specified 37 /// address. 38 virtual void *emitFunctionStub(void *Fn, MachineCodeEmitter &MCE); 39 40 /// getLazyResolverFunction - Expose the lazy resolver to the JIT. 41 virtual LazyResolverFn getLazyResolverFunction(JITCompilerFn); 42 43 /// relocate - Before the JIT can run a block of code that has been emitted, 44 /// it must rewrite the code to contain the actual addresses of any 45 /// referenced global symbols. 46 virtual void relocate(void *Function, MachineRelocation *MR, 47 unsigned NumRelocs, unsigned char* GOTBase); 48 }; 49} 50 51#endif 52