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