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