Abstract the Routine class. Bug swiftshader:10 Change-Id: I29b1de8c1adb67449a380c307d12e2aea21f32cc Reviewed-on: https://swiftshader-review.googlesource.com/7251 Tested-by: Nicolas Capens <capn@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/.gitignore b/.gitignore index 093d1ed..86187e9 100644 --- a/.gitignore +++ b/.gitignore
@@ -1,25 +1,28 @@ -# Ignored folders # -/lib/ -/obj/ -/bin/ - -# Ignored files # -*.obj -*.lib -*.log -*.tlog -*.exe -*.ilk -*.pdb -*.sbr -*.bsc -*.dll -*.res -*.idb -*.sdf -*.suo -*.o -*.depend -*.layout -*.opensdf -*.aps +# Ignored folders # +/lib/ +/obj/ +/bin/ +.vs + +# Ignored files # +*.obj +*.lib +*.log +*.tlog +*.exe +*.ilk +*.pdb +*.sbr +*.bsc +*.dll +*.res +*.idb +*.sdf +*.suo +*.o +*.depend +*.layout +*.opensdf +*.aps +*.opendb +*.db
diff --git a/CMakeLists.txt b/CMakeLists.txt index c147ac9..5000bc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -605,8 +605,10 @@ ${SOURCE_DIR}/Reactor/Nucleus.hpp ${SOURCE_DIR}/Reactor/Routine.cpp ${SOURCE_DIR}/Reactor/Routine.hpp - ${SOURCE_DIR}/Reactor/RoutineManager.cpp - ${SOURCE_DIR}/Reactor/RoutineManager.hpp + ${SOURCE_DIR}/Reactor/LLVMRoutine.cpp + ${SOURCE_DIR}/Reactor/LLVMRoutine.hpp + ${SOURCE_DIR}/Reactor/LLVMRoutineManager.cpp + ${SOURCE_DIR}/Reactor/LLVMRoutineManager.hpp ) file(GLOB_RECURSE EGL_LIST
diff --git a/src/Android.mk b/src/Android.mk index d3efe38..9fffda3 100644 --- a/src/Android.mk +++ b/src/Android.mk
@@ -38,7 +38,8 @@ COMMON_SRC_FILES += \ Reactor/Nucleus.cpp \ Reactor/Routine.cpp \ - Reactor/RoutineManager.cpp + Reactor/LLVMRoutine.cpp \ + Reactor/LLVMRoutineManager.cpp COMMON_SRC_FILES += \ Renderer/Blitter.cpp \
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.cbp b/src/OpenGL/libGLES_CM/libGLES_CM.cbp index e5028ba..1123a3e 100644 --- a/src/OpenGL/libGLES_CM/libGLES_CM.cbp +++ b/src/OpenGL/libGLES_CM/libGLES_CM.cbp
@@ -178,8 +178,10 @@ <Unit filename="../../Reactor/Reactor.hpp" /> <Unit filename="../../Reactor/Routine.cpp" /> <Unit filename="../../Reactor/Routine.hpp" /> - <Unit filename="../../Reactor/RoutineManager.cpp" /> - <Unit filename="../../Reactor/RoutineManager.hpp" /> + <Unit filename="../../Reactor/LLVMRoutine.cpp" /> + <Unit filename="../../Reactor/LLVMRoutine.hpp" /> + <Unit filename="../../Reactor/LLVMRoutineManager.cpp" /> + <Unit filename="../../Reactor/LLVMRoutineManager.hpp" /> <Unit filename="../../Reactor/x86.hpp" /> <Unit filename="../../Renderer/Blitter.cpp" /> <Unit filename="../../Renderer/Blitter.hpp" />
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cbp b/src/OpenGL/libGLESv2/libGLESv2.cbp index abd8fe8..7cc601f 100644 --- a/src/OpenGL/libGLESv2/libGLESv2.cbp +++ b/src/OpenGL/libGLESv2/libGLESv2.cbp
@@ -177,8 +177,10 @@ <Unit filename="../../Reactor/Reactor.hpp" /> <Unit filename="../../Reactor/Routine.cpp" /> <Unit filename="../../Reactor/Routine.hpp" /> - <Unit filename="../../Reactor/RoutineManager.cpp" /> - <Unit filename="../../Reactor/RoutineManager.hpp" /> + <Unit filename="../../Reactor/LLVMRoutine.cpp" /> + <Unit filename="../../Reactor/LLVMRoutine.hpp" /> + <Unit filename="../../Reactor/LLVMRoutineManager.cpp" /> + <Unit filename="../../Reactor/LLVMRoutineManager.hpp" /> <Unit filename="../../Reactor/x86.hpp" /> <Unit filename="../../Renderer/Blitter.cpp" /> <Unit filename="../../Renderer/Blitter.hpp" />
diff --git a/src/Reactor/BUILD.gn b/src/Reactor/BUILD.gn index 0e3e8f4..ee04cbf 100644 --- a/src/Reactor/BUILD.gn +++ b/src/Reactor/BUILD.gn
@@ -43,7 +43,8 @@ sources = [ "Nucleus.cpp", "Routine.cpp", - "RoutineManager.cpp", + "LLVMRoutine.cpp", + "LLVMRoutineManager.cpp", ] if (is_win) {
diff --git a/src/Reactor/LLVMRoutine.cpp b/src/Reactor/LLVMRoutine.cpp new file mode 100644 index 0000000..df12337 --- /dev/null +++ b/src/Reactor/LLVMRoutine.cpp
@@ -0,0 +1,46 @@ +// Copyright 2016 The SwiftShader Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "LLVMRoutine.hpp" + +#include "../Common/Memory.hpp" +#include "../Common/Thread.hpp" +#include "../Common/Types.hpp" + +namespace sw +{ + LLVMRoutine::LLVMRoutine(int bufferSize) : bufferSize(bufferSize) + { + void *memory = allocateExecutable(bufferSize); + + buffer = memory; + entry = memory; + functionSize = bufferSize; // Updated by LLVMRoutineManager::endFunctionBody + } + + LLVMRoutine::~LLVMRoutine() + { + deallocateExecutable(buffer, bufferSize); + } + + const void *LLVMRoutine::getEntry() + { + return entry; + } + + int LLVMRoutine::getCodeSize() + { + return functionSize - static_cast<int>((uintptr_t)entry - (uintptr_t)buffer); + } +}
diff --git a/src/Reactor/LLVMRoutine.hpp b/src/Reactor/LLVMRoutine.hpp new file mode 100644 index 0000000..264990f --- /dev/null +++ b/src/Reactor/LLVMRoutine.hpp
@@ -0,0 +1,53 @@ +// Copyright 2016 The SwiftShader Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef sw_LLVMRoutine_hpp +#define sw_LLVMRoutine_hpp + +#include "Routine.hpp" + +namespace sw +{ + class LLVMRoutineManager; + + class LLVMRoutine : public Routine + { + friend class LLVMRoutineManager; + + public: + LLVMRoutine(int bufferSize); + //LLVMRoutine(void *memory, int bufferSize, int offset); + + virtual ~LLVMRoutine(); + + //void setFunctionSize(int functionSize); + + //const void *getBuffer(); + const void *getEntry(); + //int getBufferSize(); + //int getFunctionSize(); // Includes constants before the entry point + int getCodeSize(); // Executable code only + //bool isDynamic(); + + private: + void *buffer; + const void *entry; + int bufferSize; + int functionSize; + + //const bool dynamic; // Generated or precompiled + }; +} + +#endif // sw_LLVMRoutine_hpp
diff --git a/src/Reactor/LLVMRoutineManager.cpp b/src/Reactor/LLVMRoutineManager.cpp new file mode 100644 index 0000000..99a8e9d --- /dev/null +++ b/src/Reactor/LLVMRoutineManager.cpp
@@ -0,0 +1,148 @@ +// Copyright 2016 The SwiftShader Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "LLVMRoutineManager.hpp" + +#include "LLVMRoutine.hpp" +#include "llvm/Function.h" +#include "../Common/Memory.hpp" +#include "../Common/Thread.hpp" +#include "../Common/Debug.hpp" + +namespace sw +{ + using namespace llvm; + + volatile int LLVMRoutineManager::averageInstructionSize = 4; + + LLVMRoutineManager::LLVMRoutineManager() + { + routine = nullptr; + } + + LLVMRoutineManager::~LLVMRoutineManager() + { + delete routine; + } + + void LLVMRoutineManager::AllocateGOT() + { + UNIMPLEMENTED(); + } + + uint8_t *LLVMRoutineManager::allocateStub(const GlobalValue *function, unsigned stubSize, unsigned alignment) + { + UNIMPLEMENTED(); + return nullptr; + } + + uint8_t *LLVMRoutineManager::startFunctionBody(const llvm::Function *function, uintptr_t &actualSize) + { + if(actualSize == 0) // Estimate size + { + size_t instructionCount = 0; + for(llvm::Function::const_iterator basicBlock = function->begin(); basicBlock != function->end(); basicBlock++) + { + instructionCount += basicBlock->size(); + } + + actualSize = instructionCount * averageInstructionSize; + } + else // Estimate was too low + { + sw::atomicIncrement(&averageInstructionSize); + } + + // Round up to the next page size + size_t pageSize = memoryPageSize(); + actualSize = (actualSize + pageSize - 1) & ~(pageSize - 1); + + delete routine; + routine = new LLVMRoutine(static_cast<int>(actualSize)); + + return (uint8_t*)routine->buffer; + } + + void LLVMRoutineManager::endFunctionBody(const llvm::Function *function, uint8_t *functionStart, uint8_t *functionEnd) + { + routine->functionSize = static_cast<int>(static_cast<ptrdiff_t>(functionEnd - functionStart)); + } + + uint8_t *LLVMRoutineManager::startExceptionTable(const llvm::Function* F, uintptr_t &ActualSize) + { + UNIMPLEMENTED(); + return nullptr; + } + + void LLVMRoutineManager::endExceptionTable(const llvm::Function *F, uint8_t *TableStart, uint8_t *TableEnd, uint8_t* FrameRegister) + { + UNIMPLEMENTED(); + } + + uint8_t *LLVMRoutineManager::getGOTBase() const + { + ASSERT(!HasGOT); + return nullptr; + } + + uint8_t *LLVMRoutineManager::allocateSpace(intptr_t Size, unsigned Alignment) + { + UNIMPLEMENTED(); + return nullptr; + } + + uint8_t *LLVMRoutineManager::allocateGlobal(uintptr_t Size, unsigned Alignment) + { + UNIMPLEMENTED(); + return nullptr; + } + + void LLVMRoutineManager::deallocateFunctionBody(void *Body) + { + delete routine; + routine = nullptr; + } + + void LLVMRoutineManager::deallocateExceptionTable(void *ET) + { + if(ET) + { + UNIMPLEMENTED(); + } + } + + void LLVMRoutineManager::setMemoryWritable() + { + } + + void LLVMRoutineManager::setMemoryExecutable() + { + markExecutable(routine->buffer, routine->bufferSize); + } + + void LLVMRoutineManager::setPoisonMemory(bool poison) + { + UNIMPLEMENTED(); + } + + LLVMRoutine *LLVMRoutineManager::acquireRoutine(void *entry) + { + routine->entry = entry; + + LLVMRoutine *result = routine; + routine = nullptr; + + return result; + } +}
diff --git a/src/Reactor/RoutineManager.hpp b/src/Reactor/LLVMRoutineManager.hpp similarity index 85% rename from src/Reactor/RoutineManager.hpp rename to src/Reactor/LLVMRoutineManager.hpp index fb85fe4..b235923 100644 --- a/src/Reactor/RoutineManager.hpp +++ b/src/Reactor/LLVMRoutineManager.hpp
@@ -12,22 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef sw_RoutineManager_hpp -#define sw_RoutineManager_hpp +#ifndef sw_LLVMRoutineManager_hpp +#define sw_LLVMRoutineManager_hpp #include "llvm/GlobalValue.h" #include "llvm/ExecutionEngine/JITMemoryManager.h" namespace sw { - class Routine; + class LLVMRoutine; - class RoutineManager : public llvm::JITMemoryManager + class LLVMRoutineManager : public llvm::JITMemoryManager { public: - RoutineManager(); + LLVMRoutineManager(); - virtual ~RoutineManager(); + virtual ~LLVMRoutineManager(); virtual void AllocateGOT(); @@ -45,13 +45,13 @@ virtual void setMemoryExecutable(); virtual void setPoisonMemory(bool poison); - Routine *acquireRoutine(void *entry); + LLVMRoutine *acquireRoutine(void *entry); private: - Routine *routine; + LLVMRoutine *routine; static volatile int averageInstructionSize; }; } -#endif // sw_RoutineManager_hpp +#endif // sw_LLVMRoutineManager_hpp
diff --git a/src/Reactor/Nucleus.cpp b/src/Reactor/Nucleus.cpp index 2b5baaf..67dd392 100644 --- a/src/Reactor/Nucleus.cpp +++ b/src/Reactor/Nucleus.cpp
@@ -29,8 +29,8 @@ #include "llvm/Support/TargetSelect.h" #include "../lib/ExecutionEngine/JIT/JIT.h" -#include "Routine.hpp" -#include "RoutineManager.hpp" +#include "LLVMRoutine.hpp" +#include "LLVMRoutineManager.hpp" #include "x86.hpp" #include "CPUID.hpp" #include "Thread.hpp" @@ -60,7 +60,7 @@ namespace { - sw::RoutineManager *routineManager = nullptr; + sw::LLVMRoutineManager *routineManager = nullptr; llvm::ExecutionEngine *executionEngine = nullptr; llvm::IRBuilder<> *builder = nullptr; llvm::LLVMContext *context = nullptr; @@ -118,7 +118,7 @@ } ::module = new Module("", *::context); - ::routineManager = new RoutineManager(); + ::routineManager = new LLVMRoutineManager(); #if defined(__x86_64__) const char *architecture = "x86-64"; @@ -205,7 +205,7 @@ } void *entry = ::executionEngine->getPointerToFunction(::function); - Routine *routine = ::routineManager->acquireRoutine(entry); + LLVMRoutine *routine = ::routineManager->acquireRoutine(entry); if(CodeAnalystLogJITCode) {
diff --git a/src/Reactor/Nucleus.hpp b/src/Reactor/Nucleus.hpp index 0c53ca0..27f833f 100644 --- a/src/Reactor/Nucleus.hpp +++ b/src/Reactor/Nucleus.hpp
@@ -34,6 +34,7 @@ class Value; class Constant; class BasicBlock; + class Routine; enum Optimization { @@ -53,10 +54,6 @@ extern Optimization optimization[10]; - class Routine; - class RoutineManager; - class Builder; - class Nucleus { public:
diff --git a/src/Reactor/Reactor.vcxproj b/src/Reactor/Reactor.vcxproj index f9e24b6..0e15e93 100644 --- a/src/Reactor/Reactor.vcxproj +++ b/src/Reactor/Reactor.vcxproj
@@ -266,15 +266,17 @@ </ProjectReference> </ItemDefinitionGroup> <ItemGroup> + <ClCompile Include="LLVMRoutine.cpp" /> + <ClCompile Include="LLVMRoutineManager.cpp" /> <ClCompile Include="Nucleus.cpp" /> <ClCompile Include="Routine.cpp" /> - <ClCompile Include="RoutineManager.cpp" /> </ItemGroup> <ItemGroup> + <ClInclude Include="LLVMRoutine.hpp" /> + <ClInclude Include="LLVMRoutineManager.hpp" /> <ClInclude Include="Nucleus.hpp" /> <ClInclude Include="Reactor.hpp" /> <ClInclude Include="Routine.hpp" /> - <ClInclude Include="RoutineManager.hpp" /> <ClInclude Include="x86.hpp" /> </ItemGroup> <ItemGroup>
diff --git a/src/Reactor/Reactor.vcxproj.filters b/src/Reactor/Reactor.vcxproj.filters index 2a86f26..27a7fde 100644 --- a/src/Reactor/Reactor.vcxproj.filters +++ b/src/Reactor/Reactor.vcxproj.filters
@@ -18,10 +18,13 @@ <ClCompile Include="Nucleus.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="RoutineManager.cpp"> + <ClCompile Include="Routine.cpp"> <Filter>Source Files</Filter> </ClCompile> - <ClCompile Include="Routine.cpp"> + <ClCompile Include="LLVMRoutineManager.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="LLVMRoutine.cpp"> <Filter>Source Files</Filter> </ClCompile> </ItemGroup> @@ -35,10 +38,13 @@ <ClInclude Include="x86.hpp"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="RoutineManager.hpp"> + <ClInclude Include="Routine.hpp"> <Filter>Header Files</Filter> </ClInclude> - <ClInclude Include="Routine.hpp"> + <ClInclude Include="LLVMRoutineManager.hpp"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="LLVMRoutine.hpp"> <Filter>Header Files</Filter> </ClInclude> </ItemGroup>
diff --git a/src/Reactor/Routine.cpp b/src/Reactor/Routine.cpp index 340b21d..df82ab8 100644 --- a/src/Reactor/Routine.cpp +++ b/src/Reactor/Routine.cpp
@@ -14,74 +14,17 @@ #include "Routine.hpp" -#include "../Common/Memory.hpp" #include "../Common/Thread.hpp" -#include "../Common/Types.hpp" + +#include <cassert> namespace sw { - Routine::Routine(int bufferSize) : bufferSize(bufferSize), dynamic(true) + Routine::Routine() { - void *memory = allocateExecutable(bufferSize); - - buffer = memory; - entry = memory; - functionSize = bufferSize; // Updated by RoutineManager::endFunctionBody - bindCount = 0; } - Routine::Routine(void *memory, int bufferSize, int offset) : bufferSize(bufferSize), functionSize(bufferSize), dynamic(false) - { - buffer = (unsigned char*)memory - offset; - entry = memory; - - bindCount = 0; - } - - Routine::~Routine() - { - if(dynamic) - { - deallocateExecutable(buffer, bufferSize); - } - } - - void Routine::setFunctionSize(int functionSize) - { - this->functionSize = functionSize; - } - - const void *Routine::getBuffer() - { - return buffer; - } - - const void *Routine::getEntry() - { - return entry; - } - - int Routine::getBufferSize() - { - return bufferSize; - } - - int Routine::getFunctionSize() - { - return functionSize; - } - - int Routine::getCodeSize() - { - return functionSize - static_cast<int>((uintptr_t)entry - (uintptr_t)buffer); - } - - bool Routine::isDynamic() - { - return dynamic; - } - void Routine::bind() { atomicIncrement(&bindCount); @@ -96,4 +39,9 @@ delete this; } } + + Routine::~Routine() + { + assert(bindCount == 0); + } }
diff --git a/src/Reactor/Routine.hpp b/src/Reactor/Routine.hpp index 6252a7a..b3ad7f5 100644 --- a/src/Reactor/Routine.hpp +++ b/src/Reactor/Routine.hpp
@@ -17,38 +17,21 @@ namespace sw { - class RoutineManager; - class Routine { - friend class RoutineManager; - public: - Routine(int bufferSize); - Routine(void *memory, int bufferSize, int offset); + Routine(); - ~Routine(); + virtual ~Routine(); - void setFunctionSize(int functionSize); + virtual const void *getEntry() = 0; - const void *getBuffer(); - const void *getEntry(); - int getBufferSize(); - int getFunctionSize(); // Includes constants before the entry point - int getCodeSize(); // Executable code only - bool isDynamic(); - + // Reference counting void bind(); void unbind(); private: - void *buffer; - const void *entry; - int bufferSize; - int functionSize; - volatile int bindCount; - const bool dynamic; // Generated or precompiled }; }
diff --git a/src/Reactor/RoutineManager.cpp b/src/Reactor/RoutineManager.cpp deleted file mode 100644 index 928bec4..0000000 --- a/src/Reactor/RoutineManager.cpp +++ /dev/null
@@ -1,148 +0,0 @@ -// Copyright 2016 The SwiftShader Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "RoutineManager.hpp" - -#include "Routine.hpp" -#include "llvm/Function.h" -#include "../Common/Memory.hpp" -#include "../Common/Thread.hpp" -#include "../Common/Debug.hpp" - -namespace sw -{ - using namespace llvm; - - volatile int RoutineManager::averageInstructionSize = 4; - - RoutineManager::RoutineManager() - { - routine = 0; - } - - RoutineManager::~RoutineManager() - { - delete routine; - } - - void RoutineManager::AllocateGOT() - { - UNIMPLEMENTED(); - } - - uint8_t *RoutineManager::allocateStub(const GlobalValue *function, unsigned stubSize, unsigned alignment) - { - UNIMPLEMENTED(); - return 0; - } - - uint8_t *RoutineManager::startFunctionBody(const llvm::Function *function, uintptr_t &actualSize) - { - if(actualSize == 0) // Estimate size - { - size_t instructionCount = 0; - for(llvm::Function::const_iterator basicBlock = function->begin(); basicBlock != function->end(); basicBlock++) - { - instructionCount += basicBlock->size(); - } - - actualSize = instructionCount * averageInstructionSize; - } - else // Estimate was too low - { - sw::atomicIncrement(&averageInstructionSize); - } - - // Round up to the next page size - size_t pageSize = memoryPageSize(); - actualSize = (actualSize + pageSize - 1) & ~(pageSize - 1); - - delete routine; - routine = new Routine(static_cast<int>(actualSize)); - - return (uint8_t*)routine->getBuffer(); - } - - void RoutineManager::endFunctionBody(const llvm::Function *function, uint8_t *functionStart, uint8_t *functionEnd) - { - routine->setFunctionSize(static_cast<int>(static_cast<ptrdiff_t>(functionEnd - functionStart))); - } - - uint8_t *RoutineManager::startExceptionTable(const llvm::Function* F, uintptr_t &ActualSize) - { - UNIMPLEMENTED(); - return 0; - } - - void RoutineManager::endExceptionTable(const llvm::Function *F, uint8_t *TableStart, uint8_t *TableEnd, uint8_t* FrameRegister) - { - UNIMPLEMENTED(); - } - - uint8_t *RoutineManager::getGOTBase() const - { - ASSERT(!HasGOT); - return 0; - } - - uint8_t *RoutineManager::allocateSpace(intptr_t Size, unsigned Alignment) - { - UNIMPLEMENTED(); - return 0; - } - - uint8_t *RoutineManager::allocateGlobal(uintptr_t Size, unsigned Alignment) - { - UNIMPLEMENTED(); - return 0; - } - - void RoutineManager::deallocateFunctionBody(void *Body) - { - delete routine; - routine = 0; - } - - void RoutineManager::deallocateExceptionTable(void *ET) - { - if(ET) - { - UNIMPLEMENTED(); - } - } - - void RoutineManager::setMemoryWritable() - { - } - - void RoutineManager::setMemoryExecutable() - { - markExecutable(routine->buffer, routine->bufferSize); - } - - void RoutineManager::setPoisonMemory(bool poison) - { - UNIMPLEMENTED(); - } - - Routine *RoutineManager::acquireRoutine(void *entry) - { - routine->entry = entry; - - Routine *result = routine; - routine = 0; - - return result; - } -}