[vmkit-commits] [vmkit] r196271 - route getSymbolAddress to the appropriate symbol, resolution is not yet implemented

Gael Thomas gael.thomas at lip6.fr
Tue Dec 3 04:34:42 PST 2013


Author: gthomas
Date: Tue Dec  3 06:34:41 2013
New Revision: 196271

URL: http://llvm.org/viewvc/llvm-project?rev=196271&view=rev
Log:
route getSymbolAddress to the appropriate symbol, resolution is not yet implemented

Added:
    vmkit/branches/mcjit/lib/j3/vm/j3symbol.cc
Modified:
    vmkit/branches/mcjit/include/j3/j3classloader.h
    vmkit/branches/mcjit/include/j3/j3codegen.h
    vmkit/branches/mcjit/include/j3/j3symbol.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=196271&r1=196270&r2=196271&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3classloader.h (original)
+++ vmkit/branches/mcjit/include/j3/j3classloader.h Tue Dec  3 06:34:41 2013
@@ -4,6 +4,8 @@
 #include <map>
 #include <vector>
 
+#include "llvm/ExecutionEngine/SectionMemoryManager.h"
+
 #include "vmkit/allocator.h"
 #include "vmkit/names.h"
 
@@ -31,7 +33,7 @@ namespace j3 {
 	class J3Class;
 	class J3Symbol;
 
-	class J3ClassLoader {
+	class J3ClassLoader : public llvm::SectionMemoryManager {
 		struct J3MethodLess : public std::binary_function<wchar_t*,wchar_t*,bool> {
 			bool operator()(const J3Method* lhs, const J3Method* rhs) const;
 		};
@@ -63,6 +65,9 @@ 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;
 
@@ -71,7 +76,6 @@ namespace j3 {
 		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);
 

Modified: vmkit/branches/mcjit/include/j3/j3codegen.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3codegen.h?rev=196271&r1=196270&r2=196271&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3codegen.h (original)
+++ vmkit/branches/mcjit/include/j3/j3codegen.h Tue Dec  3 06:34:41 2013
@@ -96,73 +96,73 @@ namespace j3 {
 
 		bool                  isWide;
 
-		uint32_t          wideReadU1();
-		uint32_t          wideReadS1();
+		uint32_t           wideReadU1();
+		uint32_t           wideReadS1();
 
-		llvm::Value*      nullCheck(llvm::Value* obj);
+		llvm::Value*       nullCheck(llvm::Value* obj);
 
-		bool              onEndPoint();
-		llvm::BasicBlock* forwardBranch(const char* id, uint32_t pc, bool doAlloc, bool doPush);
-		void              condBr(llvm::Value* op);
+		bool               onEndPoint();
+		llvm::BasicBlock*  forwardBranch(const char* id, uint32_t pc, bool doAlloc, bool doPush);
+		void               condBr(llvm::Value* op);
 
-		llvm::Value*      flatten(llvm::Value* v, J3Type* type);
-		llvm::Value*      unflatten(llvm::Value* v, J3Type* type);
+		llvm::Value*       flatten(llvm::Value* v, J3Type* type);
+		llvm::Value*       unflatten(llvm::Value* v, J3Type* type);
 
-		llvm::Value*      handleToObject(llvm::Value* obj);
-		llvm::Value*      javaClass(J3ObjectType* type);
-		llvm::Value*      staticInstance(J3Class* cl);
-		llvm::Value*      vt(J3Type* cl);
-		llvm::Value*      vt(llvm::Value* obj);
-		void              initialiseJ3Type(J3Type* cl);
+		llvm::Value*       handleToObject(llvm::Value* obj);
+		llvm::Value*       javaClass(J3ObjectType* type);
+		llvm::Value*       staticInstance(J3Class* cl);
+		llvm::Value*       vt(J3Type* cl);
+		llvm::Value*       vt(llvm::Value* obj);
+		void               initialiseJ3Type(J3Type* cl);
 
-		llvm::Value*      isAssignableTo(llvm::Value* obj, J3Type* type);
-		void              instanceof(llvm::Value* obj, J3Type* type);
-		void              checkCast(llvm::Value* obj, J3Type* type);
+		llvm::Value*       isAssignableTo(llvm::Value* obj, J3Type* type);
+		void               instanceof(llvm::Value* obj, J3Type* type);
+		void               checkCast(llvm::Value* obj, J3Type* type);
 
-		void              floatToInteger(J3Type* from, J3Type* to);
-		void              compareFP(bool isL);
-		void              compareLong();
+		void               floatToInteger(J3Type* from, J3Type* to);
+		void               compareFP(bool isL);
+		void               compareLong();
 
-		void              get(llvm::Value* obj, J3Field* field);
-		void              getField(uint32_t idx);
-		void              getStatic(uint32_t idx);
+		void               get(llvm::Value* obj, J3Field* field);
+		void               getField(uint32_t idx);
+		void               getStatic(uint32_t idx);
 
-		void              put(llvm::Value* obj, llvm::Value* val, J3Field* field);
-		void              putField(uint32_t idx);
-		void              putStatic(uint32_t idx);
+		void               put(llvm::Value* obj, llvm::Value* val, J3Field* field);
+		void               putField(uint32_t idx);
+		void               putStatic(uint32_t idx);
 
-		void              invoke(J3Method* method, llvm::Value* func);
-		void              invokeVirtual(uint32_t idx);
-		void              invokeStatic(uint32_t idx);
-		void              invokeSpecial(uint32_t idx);
+		void               invoke(J3Method* method, llvm::Value* func);
+		void               invokeVirtual(uint32_t idx);
+		void               invokeStatic(uint32_t idx);
+		void               invokeSpecial(uint32_t idx);
 
-		llvm::Value*      arrayContent(J3Type* cType, llvm::Value* array, llvm::Value* idx);
+		llvm::Value*       arrayContent(J3Type* cType, llvm::Value* array, llvm::Value* idx);
 
-		void              arrayBoundCheck(llvm::Value* obj, llvm::Value* idx);
-		llvm::Value*      arrayLength(llvm::Value* obj);
-		llvm::Value*      arrayLengthPtr(llvm::Value* obj);
-		void              arrayStore(J3Type* cType);
-		void              arrayLoad(J3Type* cType);
+		void               arrayBoundCheck(llvm::Value* obj, llvm::Value* idx);
+		llvm::Value*       arrayLength(llvm::Value* obj);
+		llvm::Value*       arrayLengthPtr(llvm::Value* obj);
+		void               arrayStore(J3Type* cType);
+		void               arrayLoad(J3Type* cType);
 
-		void              newArray(uint8_t atype);
-		void              newArray(J3ArrayClass* type);
-		void              newObject(J3Class* cl);
+		void               newArray(uint8_t atype);
+		void               newArray(J3ArrayClass* type);
+		void               newObject(J3Class* cl);
 
-		void              ldc(uint32_t idx);
+		void               ldc(uint32_t idx);
 
-		void              translate();
+		void               translate();
 
-		void              initExceptionNode(J3ExceptionNode** pnode, uint32_t pc, J3ExceptionNode* node);
-		void              addToExceptionNode(J3ExceptionNode* node, J3ExceptionEntry* entry);
-		void              closeExceptionNode(J3ExceptionNode* node);
+		void               initExceptionNode(J3ExceptionNode** pnode, uint32_t pc, J3ExceptionNode* node);
+		void               addToExceptionNode(J3ExceptionNode* node, J3ExceptionEntry* entry);
+		void               closeExceptionNode(J3ExceptionNode* node);
 
-		void              generateJava();
-		void              generateNative();
+		void               generateJava();
+		void               generateNative();
 
-		llvm::Value*      buildString(const char* msg);
+		llvm::Value*       buildString(const char* msg);
 
-		static void       echoDebugEnter(uint32_t isLeave, const char* msg, ...);
-		static void       echoDebugExecute(uint32_t level, const char* msg, ...);
+		static void        echoDebugEnter(uint32_t isLeave, const char* msg, ...);
+		static void        echoDebugExecute(uint32_t level, const char* msg, ...);
 
 		llvm::Function*    funcJ3MethodIndex;
 		llvm::Function*    funcJ3TypeVT;

Modified: vmkit/branches/mcjit/include/j3/j3symbol.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3symbol.h?rev=196271&r1=196270&r2=196271&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3symbol.h (original)
+++ vmkit/branches/mcjit/include/j3/j3symbol.h Tue Dec  3 06:34:41 2013
@@ -6,9 +6,7 @@
 namespace j3 {
 	class J3Symbol : public vmkit::PermanentObject {
 	public:
-		virtual int isMethodPointer() { return 0; }
-		virtual int isMethodDescriptor() { return 0; }
-		virtual int isTypeDescriptor() { return 0; }
+		uint64_t getSymbolAddress();
 	};
 };
 

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=196271&r1=196270&r2=196271&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3classloader.cc Tue Dec  3 06:34:41 2013
@@ -69,11 +69,11 @@ void J3ClassLoader::addSymbol(const char
 	pthread_mutex_unlock(&_mutexSymbolTable);
 }
 
-J3Symbol* J3ClassLoader::getSymbol(const char* id) {
+uint64_t J3ClassLoader::getSymbolAddress(const std::string &Name) {
 	pthread_mutex_lock(&_mutexSymbolTable);
-	J3Symbol* res = _symbolTable[id];
+	J3Symbol* res = _symbolTable[Name.c_str()];
 	pthread_mutex_unlock(&_mutexSymbolTable);
-	return res;
+	return res->getSymbolAddress();
 }
 
 void* J3ClassLoader::lookupNativeFunctionPointer(J3Method* method, const char* symbol) {

Added: vmkit/branches/mcjit/lib/j3/vm/j3symbol.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3symbol.cc?rev=196271&view=auto
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3symbol.cc (added)
+++ vmkit/branches/mcjit/lib/j3/vm/j3symbol.cc Tue Dec  3 06:34:41 2013
@@ -0,0 +1,9 @@
+#include "j3/j3symbol.h"
+#include "j3/j3thread.h"
+#include "j3/j3.h"
+
+using namespace j3;
+
+uint64_t J3Symbol::getSymbolAddress() {
+	J3Thread::get()->vm()->internalError(L"implement me: getSymbolAddress");
+}





More information about the vmkit-commits mailing list