[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