X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fllvm-jit.cpp;h=868097e617085fc86c9dfb0007a9666922bce742;hb=ad2d093d06f684e8bc956e42b1741122aea90b05;hp=6a7c49c0629f85bca6005c0976241ffd6cb06830;hpb=195367f9595ab8eb4f643b3434c12f41e4ba0f0f;p=mono.git diff --git a/mono/mini/llvm-jit.cpp b/mono/mini/llvm-jit.cpp index 6a7c49c0629..868097e6170 100644 --- a/mono/mini/llvm-jit.cpp +++ b/mono/mini/llvm-jit.cpp @@ -4,7 +4,7 @@ // (C) 2009-2011 Novell, Inc. // Copyright 2011-2015 Xamarin, Inc (http://www.xamarin.com) // - +// Licensed under the MIT license. See LICENSE file in the project root for full license information. // // Mono's internal header files are not C++ clean, so avoid including them if // possible @@ -27,12 +27,14 @@ #include #include #include +#include #include #include "llvm/ExecutionEngine/Orc/CompileUtils.h" #include "llvm/ExecutionEngine/Orc/IRCompileLayer.h" #include "llvm/ExecutionEngine/Orc/LambdaResolver.h" #include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h" -#include "llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h" + +#include extern "C" { #include @@ -64,6 +66,58 @@ void bzero (void *to, size_t count) { memset (to, 0, count); } #endif +static AllocCodeMemoryCb *alloc_code_mem_cb; + +class MonoJitMemoryManager : public RTDyldMemoryManager +{ +public: + ~MonoJitMemoryManager() override; + + uint8_t *allocateDataSection(uintptr_t Size, + unsigned Alignment, + unsigned SectionID, + StringRef SectionName, + bool IsReadOnly) override; + + uint8_t *allocateCodeSection(uintptr_t Size, + unsigned Alignment, + unsigned SectionID, + StringRef SectionName) override; + + bool finalizeMemory(std::string *ErrMsg = nullptr) override; +}; + +MonoJitMemoryManager::~MonoJitMemoryManager() +{ +} + +uint8_t * +MonoJitMemoryManager::allocateDataSection(uintptr_t Size, + unsigned Alignment, + unsigned SectionID, + StringRef SectionName, + bool IsReadOnly) { + uint8_t *res = (uint8_t*)malloc (Size); + assert (res); + memset (res, 0, Size); + return res; +} + +uint8_t * +MonoJitMemoryManager::allocateCodeSection(uintptr_t Size, + unsigned Alignment, + unsigned SectionID, + StringRef SectionName) +{ + return alloc_code_mem_cb (NULL, Size); +} + +bool +MonoJitMemoryManager::finalizeMemory(std::string *ErrMsg) +{ + return false; +} + class MonoLLVMJIT { public: /* We use our own trampoline infrastructure instead of the Orc one */ @@ -105,7 +159,7 @@ public: } ); return CompileLayer.addModuleSet(singletonSet(M), - make_unique(), + make_unique(), std::move(Resolver)); } @@ -166,6 +220,8 @@ static MonoLLVMJIT *jit; MonoEERef mono_llvm_create_ee (LLVMModuleProviderRef MP, AllocCodeMemoryCb *alloc_cb, FunctionEmittedCb *emitted_cb, ExceptionTableCb *exception_cb, DlSymCb *dlsym_cb, LLVMExecutionEngineRef *ee) { + alloc_code_mem_cb = alloc_cb; + InitializeNativeTarget (); InitializeNativeTargetAsmPrinter(); @@ -760,6 +816,13 @@ mono_llvm_optimize_method (MonoEERef eeref, LLVMValueRef method) g_assert_not_reached (); } +gpointer +mono_llvm_compile_method (MonoEERef mono_ee, LLVMValueRef method, int nvars, LLVMValueRef *callee_vars, gpointer *callee_addrs, gpointer *eh_frame) +{ + g_assert_not_reached (); + return NULL; +} + void mono_llvm_dispose_ee (MonoEERef *eeref) {