[vmkit-commits] [vmkit] r197339 - use my CompilationUnit
Gael Thomas
gael.thomas at lip6.fr
Sun Dec 15 03:27:15 PST 2013
Author: gthomas
Date: Sun Dec 15 05:27:14 2013
New Revision: 197339
URL: http://llvm.org/viewvc/llvm-project?rev=197339&view=rev
Log:
use my CompilationUnit
Modified:
vmkit/branches/mcjit/include/j3/j3classloader.h
vmkit/branches/mcjit/include/vmkit/compiler.h
vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
Modified: vmkit/branches/mcjit/include/j3/j3classloader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3classloader.h?rev=197339&r1=197338&r2=197339&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3classloader.h (original)
+++ vmkit/branches/mcjit/include/j3/j3classloader.h Sun Dec 15 05:27:14 2013
@@ -4,10 +4,9 @@
#include <map>
#include <vector>
-#include "llvm/ExecutionEngine/SectionMemoryManager.h"
-
#include "vmkit/allocator.h"
#include "vmkit/names.h"
+#include "vmkit/compiler.h"
#include "j3/j3object.h"
@@ -28,7 +27,7 @@ namespace j3 {
class J3;
class J3Class;
- class J3ClassLoader : public llvm::SectionMemoryManager {
+ class J3ClassLoader : public vmkit::CompilationUnit {
struct J3MethodLess : public std::binary_function<wchar_t*,wchar_t*,bool> {
bool operator()(const J3Method* lhs, const J3Method* rhs) const;
};
@@ -36,18 +35,11 @@ namespace j3 {
typedef std::map<J3Method*, J3Method*, J3MethodLess,
vmkit::StdAllocator<std::pair<J3Method*, J3Method*> > > MethodRefMap;
- typedef std::map<const char*, vmkit::Symbol*, vmkit::Util::char_less_t,
- vmkit::StdAllocator<std::pair<const char*, vmkit::Symbol*> > > SymbolMap;
-
static J3MethodLess j3MethodLess;
- SymbolMap _symbolTable;
- pthread_mutex_t _mutexSymbolTable;
-
J3ObjectHandle* _javaClassLoader;
J3FixedPoint _fixedPoint;
pthread_mutex_t _mutex; /* a lock */
- vmkit::BumpAllocator* _allocator; /* the local allocator */
J3* _vm; /* my vm */
vmkit::NameMap<J3Class*>::map classes; /* classes managed by this class loader */
vmkit::NameMap<J3Type*>::map types; /* shortcut to find types */
@@ -60,23 +52,12 @@ namespace j3 {
void wrongType(J3Class* from, const vmkit::Name* type);
J3Type* getTypeInternal(J3Class* from, const vmkit::Name* type, uint32_t start, uint32_t* end);
-
- uint64_t getSymbolAddress(const std::string &Name);
-
protected:
std::vector<void*, vmkit::StdAllocator<void*> > nativeLibraries;
public:
- void* operator new(size_t n, vmkit::BumpAllocator* allocator);
J3ClassLoader(J3* vm, J3ObjectHandle* javaClassLoader, vmkit::BumpAllocator* allocator);
- llvm::ExecutionEngine* ee() { return _ee; }
- llvm::ExecutionEngine* oldee() { return _oldee; }
-
- void addSymbol(const char* id, vmkit::Symbol* symbol);
-
- static void destroy(J3ClassLoader* loader);
-
J3FixedPoint* fixedPoint() { return &_fixedPoint; }
J3ObjectHandle* javaClassLoader() { return _javaClassLoader; }
@@ -84,7 +65,6 @@ namespace j3 {
void lock() { pthread_mutex_lock(&_mutex); }
void unlock() { pthread_mutex_unlock(&_mutex); }
- vmkit::BumpAllocator* allocator() { return _allocator; }
J3* vm() const { return _vm; };
J3Method* method(uint16_t access, J3Class* cl,
@@ -116,7 +96,6 @@ namespace j3 {
const char* cmangled(const char* demangled) { return _cmangled[demangled]; }
- void makeLLVMFunctions_j3();
void registerCMangling(const char* mangled, const char* demangled);
};
}
Modified: vmkit/branches/mcjit/include/vmkit/compiler.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/compiler.h?rev=197339&r1=197338&r2=197339&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/compiler.h (original)
+++ vmkit/branches/mcjit/include/vmkit/compiler.h Sun Dec 15 05:27:14 2013
@@ -47,7 +47,9 @@ namespace vmkit {
llvm::ExecutionEngine* _ee;
llvm::ExecutionEngine* _oldee;
+ protected:
void operator delete(void* self);
+
public:
void* operator new(size_t n, BumpAllocator* allocator);
Modified: vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc?rev=197339&r1=197338&r2=197339&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Sun Dec 15 05:27:14 2013
@@ -20,83 +20,22 @@ using namespace j3;
J3ClassLoader::J3MethodLess J3ClassLoader::j3MethodLess;
-void J3ClassLoader::destroy(J3ClassLoader* loader) {
- vmkit::BumpAllocator::destroy(loader->allocator());
-}
-
-void* J3ClassLoader::operator new(size_t n, vmkit::BumpAllocator* allocator) {
- return allocator->allocate(n);
-}
-
J3ClassLoader::J3ClassLoader(J3* v, J3ObjectHandle* javaClassLoader, vmkit::BumpAllocator* allocator)
- : _symbolTable(vmkit::Util::char_less, allocator),
+ : CompilationUnit(allocator, "class-loader"),
_fixedPoint(allocator),
classes(vmkit::Name::less, allocator),
types(vmkit::Name::less, allocator),
methodTypes(vmkit::Name::less, allocator),
methods(j3MethodLess, allocator),
nativeLibraries(allocator) {
- _allocator = allocator;
-
_javaClassLoader = javaClassLoader;
// pthread_mutexattr_t attr;
// pthread_mutexattr_init(&attr);
// pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&_mutex, 0);//&attr);
- pthread_mutex_init(&_mutexSymbolTable, 0);
_vm = v;
-
- std::string err;
- _ee = llvm::EngineBuilder(new llvm::Module("class-loader", vm()->llvmContext()))
- .setUseMCJIT(1)
- .setMCJITMemoryManager(this)
- .setErrorStr(&err)
- .create();
-
- if (!ee())
- vm()->internalError(L"Error while creating execution engine: %s\n", err.c_str());
-
- ee()->RegisterJITEventListener(vm());
-
- _oldee = llvm::EngineBuilder(new llvm::Module("old ee", vm()->llvmContext()))
- .setErrorStr(&err)
- .create();
-
- if (!oldee())
- vm()->internalError(L"Error while creating execution engine: %s\n", err.c_str());
-
- oldee()->DisableLazyCompilation(0);
-}
-
-void J3ClassLoader::addSymbol(const char* id, vmkit::Symbol* symbol) {
- pthread_mutex_lock(&_mutexSymbolTable);
- _symbolTable[id] = symbol;
- pthread_mutex_unlock(&_mutexSymbolTable);
-}
-
-uint64_t J3ClassLoader::getSymbolAddress(const std::string &Name) {
- pthread_mutex_lock(&_mutexSymbolTable);
- const char* id = Name.c_str() + 1;
-
- std::map<const char*, vmkit::Symbol*>::iterator it = _symbolTable.find(id);
- vmkit::Symbol* res;
-
- if(it == _symbolTable.end()) {
- uint8_t* addr = (uint8_t*)dlsym(RTLD_SELF, id);
- if(!addr)
- vm()->internalError(L"unable to resolve native symbol: %s", id);
- res = new(allocator()) vmkit::NativeSymbol(addr);
- size_t len = strlen(id);
- char* buf = (char*)allocator()->allocate(len+1);
- memcpy(buf, id, len+1);
- _symbolTable[buf] = res;
- } else
- res = it->second;
-
- pthread_mutex_unlock(&_mutexSymbolTable);
- return (uint64_t)(uintptr_t)res->getSymbolAddress();
}
void* J3ClassLoader::lookupNativeFunctionPointer(J3Method* method, const char* symbol) {
More information about the vmkit-commits
mailing list