//===- Target/TargetJITInfo.h - Target Information for JIT ------*- C++ -*-===//
-//
+//
// The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
+//
//===----------------------------------------------------------------------===//
//
// This file exposes an abstract interface used by the Just-In-Time code
#define LLVM_TARGET_TARGETJITINFO_H
#include <cassert>
+#include <vector>
namespace llvm {
class Function;
class FunctionPassManager;
+ class MachineBasicBlock;
class MachineCodeEmitter;
class MachineRelocation;
class TargetJITInfo {
public:
virtual ~TargetJITInfo() {}
-
- /// addPassesToJITCompile - Add passes to the specified pass manager to
- /// implement a fast code generator for this target.
- ///
- virtual void addPassesToJITCompile(FunctionPassManager &PM) = 0;
-
+
/// replaceMachineCodeForFunction - Make it so that calling the function
/// whose machine code is at OLD turns into a call to NEW, perhaps by
/// overwriting OLD with a branch to NEW. This is used for self-modifying
/// code.
///
virtual void replaceMachineCodeForFunction(void *Old, void *New) = 0;
-
+
/// emitFunctionStub - Use the specified MachineCodeEmitter object to emit a
/// small native function that simply calls the function at the specified
/// address. Return the address of the resultant function.
/// it must rewrite the code to contain the actual addresses of any
/// referenced global symbols.
virtual void relocate(void *Function, MachineRelocation *MR,
- unsigned NumRelocs) {
+ unsigned NumRelocs, unsigned char* GOTBase) {
assert(NumRelocs == 0 && "This target does not have relocations!");
}
+
+ /// needsGOT - Allows a target to specify that it would like the
+ // JIT to manage a GOT for it.
+ bool needsGOT() const { return useGOT; }
+
+ protected:
+ bool useGOT;
};
} // End llvm namespace