1b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach//===-- MCJITMemoryManager.h - Definition for the Memory Manager ---C++ -*-===//
2b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach//
3b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach//                     The LLVM Compiler Infrastructure
4b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach//
5b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach// This file is distributed under the University of Illinois Open Source
6b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach// License. See LICENSE.TXT for details.
7b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach//
8b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach//===----------------------------------------------------------------------===//
9b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach
10b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach#ifndef LLVM_LIB_EXECUTIONENGINE_MCJITMEMORYMANAGER_H
11b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach#define LLVM_LIB_EXECUTIONENGINE_MCJITMEMORYMANAGER_H
12b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach
13b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach#include "llvm/Module.h"
14b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach#include "llvm/ExecutionEngine/JITMemoryManager.h"
15b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach#include "llvm/ExecutionEngine/RuntimeDyld.h"
16b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach#include <assert.h>
17b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach
18b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbachnamespace llvm {
19b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach
20b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach// The MCJIT memory manager is a layer between the standard JITMemoryManager
21b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach// and the RuntimeDyld interface that maps objects, by name, onto their
22b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach// matching LLVM IR counterparts in the module(s) being compiled.
23b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbachclass MCJITMemoryManager : public RTDyldMemoryManager {
242d24e2a396a1d211baaeedf32148a3b657240170David Blaikie  virtual void anchor();
2595a9d937728ca9cf2bf44f86ff1184df318b3bd7Benjamin Kramer  OwningPtr<JITMemoryManager> JMM;
26b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach
27b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbachpublic:
2895a9d937728ca9cf2bf44f86ff1184df318b3bd7Benjamin Kramer  MCJITMemoryManager(JITMemoryManager *jmm) :
2995a9d937728ca9cf2bf44f86ff1184df318b3bd7Benjamin Kramer    JMM(jmm?jmm:JITMemoryManager::CreateDefaultMemManager()) {}
30b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach
3161425c0a7f4e3608a85f7bbf254cd052a15b7446Jim Grosbach  uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment,
3261425c0a7f4e3608a85f7bbf254cd052a15b7446Jim Grosbach                               unsigned SectionID) {
33068c65b22d50c265b51886062b2b9c1cb696d67dDanil Malyshev    return JMM->allocateDataSection(Size, Alignment, SectionID);
3461425c0a7f4e3608a85f7bbf254cd052a15b7446Jim Grosbach  }
3561425c0a7f4e3608a85f7bbf254cd052a15b7446Jim Grosbach
3661425c0a7f4e3608a85f7bbf254cd052a15b7446Jim Grosbach  uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment,
3761425c0a7f4e3608a85f7bbf254cd052a15b7446Jim Grosbach                               unsigned SectionID) {
38068c65b22d50c265b51886062b2b9c1cb696d67dDanil Malyshev    return JMM->allocateCodeSection(Size, Alignment, SectionID);
3961425c0a7f4e3608a85f7bbf254cd052a15b7446Jim Grosbach  }
4061425c0a7f4e3608a85f7bbf254cd052a15b7446Jim Grosbach
4130b9e322e159df8eaabb5b194cec6e11ba99c261Danil Malyshev  virtual void *getPointerToNamedFunction(const std::string &Name,
4230b9e322e159df8eaabb5b194cec6e11ba99c261Danil Malyshev                                          bool AbortOnFailure = true) {
4330b9e322e159df8eaabb5b194cec6e11ba99c261Danil Malyshev    return JMM->getPointerToNamedFunction(Name, AbortOnFailure);
4430b9e322e159df8eaabb5b194cec6e11ba99c261Danil Malyshev  }
4530b9e322e159df8eaabb5b194cec6e11ba99c261Danil Malyshev
46b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach};
47b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach
48b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach} // End llvm namespace
49b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach
50b572830a52faad2fffc7119de53aa96c18d9bf07Jim Grosbach#endif
51