[vmkit-commits] [vmkit] r195658 - add a symbol table in class loader and populates it
Gael Thomas
gael.thomas at lip6.fr
Mon Nov 25 08:49:33 PST 2013
Author: gthomas
Date: Mon Nov 25 10:49:32 2013
New Revision: 195658
URL: http://llvm.org/viewvc/llvm-project?rev=195658&view=rev
Log:
add a symbol table in class loader and populates it
Modified:
vmkit/branches/mcjit/include/j3/j3classloader.h
vmkit/branches/mcjit/lib/j3/vm/j3class.cc
vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
Modified: vmkit/branches/mcjit/include/j3/j3classloader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3classloader.h?rev=195658&r1=195657&r2=195658&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3classloader.h (original)
+++ vmkit/branches/mcjit/include/j3/j3classloader.h Mon Nov 25 10:49:32 2013
@@ -30,7 +30,7 @@ namespace j3 {
class J3Type;
class J3;
class J3Class;
-
+ class J3Symbol;
class J3ClassLoader {
struct J3MethodLess : public std::binary_function<wchar_t*,wchar_t*,bool> {
@@ -40,8 +40,14 @@ namespace j3 {
typedef std::map<J3Method*, J3Method*, J3MethodLess,
vmkit::StdAllocator<std::pair<J3Method*, J3Method*> > > MethodRefMap;
+ typedef std::map<const char*, J3Symbol*, vmkit::Util::char_less_t,
+ vmkit::StdAllocator<std::pair<const char*, J3Symbol*> > > SymbolMap;
+
static J3MethodLess j3MethodLess;
+ SymbolMap _symbolTable;
+ pthread_mutex_t _mutexSymbolTable;
+
J3ObjectHandle* _javaClassLoader;
J3FixedPoint _fixedPoint;
llvm::FunctionPassManager* _pm;
@@ -65,6 +71,9 @@ namespace j3 {
void* operator new(size_t n, vmkit::BumpAllocator* allocator);
J3ClassLoader(J3* vm, J3ObjectHandle* javaClassLoader, vmkit::BumpAllocator* allocator);
+ void addSymbol(const char* id, J3Symbol* symbol);
+ J3Symbol* getSymbol(const char* id);
+
static void destroy(J3ClassLoader* loader);
llvm::DIBuilder* dbgBuilder() const { return _dbgBuilder; }
Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=195658&r1=195657&r2=195658&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Mon Nov 25 10:49:32 2013
@@ -742,6 +742,8 @@ void J3Class::createLLVMTypes() {
_nativeName[0] = 'L';
memcpy(_nativeName + 1, mangler.cStr()+7, mangler.length());
+
+ loader()->addSymbol(_nativeName, this);
}
llvm::Type* J3Class::staticLLVMType() {
@@ -859,6 +861,8 @@ llvm::Type* J3ArrayClass::llvmType() {
_llvmType = llvm::PointerType::getUnqual(llvm::StructType::create(loader()->module()->getContext(),
body,
_nativeName));
+
+ loader()->addSymbol(_nativeName, this);
}
return _llvmType;
}
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=195658&r1=195657&r2=195658&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Mon Nov 25 10:49:32 2013
@@ -37,7 +37,8 @@ void* J3ClassLoader::operator new(size_t
}
J3ClassLoader::J3ClassLoader(J3* v, J3ObjectHandle* javaClassLoader, vmkit::BumpAllocator* allocator)
- : _fixedPoint(allocator),
+ : _symbolTable(vmkit::Util::char_less, allocator),
+ _fixedPoint(allocator),
classes(vmkit::Name::less, allocator),
types(vmkit::Name::less, allocator),
methodTypes(vmkit::Name::less, allocator),
@@ -51,6 +52,7 @@ J3ClassLoader::J3ClassLoader(J3* v, J3Ob
// pthread_mutexattr_init(&attr);
// pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&_mutex, 0);//&attr);
+ pthread_mutex_init(&_mutexSymbolTable, 0);
_vm = v;
@@ -61,6 +63,19 @@ J3ClassLoader::J3ClassLoader(J3* v, J3Ob
vm()->ee()->addModule(module());
}
+void J3ClassLoader::addSymbol(const char* id, J3Symbol* symbol) {
+ pthread_mutex_lock(&_mutexSymbolTable);
+ _symbolTable[id] = symbol;
+ pthread_mutex_unlock(&_mutexSymbolTable);
+}
+
+J3Symbol* J3ClassLoader::getSymbol(const char* id) {
+ pthread_mutex_lock(&_mutexSymbolTable);
+ J3Symbol* res = _symbolTable[id];
+ pthread_mutex_unlock(&_mutexSymbolTable);
+ return res;
+}
+
void* J3ClassLoader::lookupNativeFunctionPointer(J3Method* method, const char* symbol) {
for(std::vector<void*>::size_type i=0; i!=nativeLibraries.size(); i++) {
void* fnPtr = dlsym(nativeLibraries[i], symbol);
Modified: vmkit/branches/mcjit/lib/j3/vm/j3method.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3method.cc?rev=195658&r1=195657&r2=195658&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Mon Nov 25 10:49:32 2013
@@ -323,6 +323,9 @@ void J3Method::buildLLVMNames(J3Class* f
memcpy(_llvmAllNames, "method_descriptor_", 18);
memcpy(_llvmAllNames+18, mangler.cStr(), mangler.length());
_llvmAllNames[_llvmAllNamesLength] = 0;
+
+ cl()->loader()->addSymbol(_llvmAllNames, this);
+ cl()->loader()->addSymbol(_llvmAllNames+18, &_selfCode);
}
size_t J3Method::llvmFunctionNameLength(J3Class* from) {
More information about the vmkit-commits
mailing list