blob: e886a1941223ee5adfff88490d6f85b7c30895f5 [file] [log] [blame]
Chris Lattner836f6752002-12-24 00:01:22 +00001//===-- VM.h - Definitions for Virtual Machine ------------------*- C++ -*-===//
2//
3// This file defines the top-level Virtual Machine data structure.
4//
5//===----------------------------------------------------------------------===//
6
7#ifndef VM_H
8#define VM_H
9
10#include "../ExecutionEngine.h"
11#include "llvm/PassManager.h"
12#include <map>
13
14class Function;
15class GlobalValue;
16class Constant;
17class TargetMachine;
18class MachineCodeEmitter;
19
20class VM : public ExecutionEngine {
21 TargetMachine &TM; // The current target we are compiling to
Brian Gaekec227c1f2003-08-13 18:16:50 +000022 FunctionPassManager PM; // Passes to compile a function
Chris Lattner836f6752002-12-24 00:01:22 +000023 MachineCodeEmitter *MCE; // MCE object
24
Chris Lattner836f6752002-12-24 00:01:22 +000025public:
26 VM(Module *M, TargetMachine *tm);
27 ~VM();
28
29 /// run - Start execution with the specified function and arguments.
30 ///
31 virtual int run(const std::string &FnName,
John Criswell69582b32003-08-21 21:12:30 +000032 const std::vector<std::string> &Args,
33 const char ** envp);
Chris Lattner836f6752002-12-24 00:01:22 +000034
Chris Lattner0d448c02003-01-13 01:00:48 +000035 /// getPointerToNamedFunction - This method returns the address of the
36 /// specified function by using the dlsym function call. As such it is only
37 /// useful for resolving library symbols, not code generated symbols.
38 ///
39 void *getPointerToNamedFunction(const std::string &Name);
40
Chris Lattnerc309a762003-05-08 21:34:11 +000041 // CompilationCallback - Invoked the first time that a call site is found,
42 // which causes lazy compilation of the target function.
43 //
44 static void CompilationCallback();
Chris Lattner22080f92003-05-14 13:53:40 +000045
46 /// runAtExitHandlers - Before exiting the program, at_exit functions must be
47 /// called. This method calls them.
48 ///
49 static void runAtExitHandlers();
50
Chris Lattnerbba1b6d2003-06-01 23:24:36 +000051 /// getPointerToFunction - This returns the address of the specified function,
52 /// compiling it if necessary.
Brian Gaekec227c1f2003-08-13 18:16:50 +000053 void *getPointerToFunction(Function *F);
Chris Lattnerbba1b6d2003-06-01 23:24:36 +000054
Chris Lattner836f6752002-12-24 00:01:22 +000055private:
Misha Brukman906f5fa2003-06-02 03:23:16 +000056 static MachineCodeEmitter *createEmitter(VM &V);
Chris Lattner836f6752002-12-24 00:01:22 +000057 void setupPassManager();
Chris Lattner836f6752002-12-24 00:01:22 +000058};
59
60#endif