[vmkit-commits] [vmkit] r62220 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaObject.cpp JnjvmModule.cpp JnjvmModule.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Jan 14 05:24:04 PST 2009


Author: geoffray
Date: Wed Jan 14 07:24:02 2009
New Revision: 62220

URL: http://llvm.org/viewvc/llvm-project?rev=62220&view=rev
Log:
Add the print function in statically compiled virtual tables.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp?rev=62220&r1=62219&r2=62220&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Wed Jan 14 07:24:02 2009
@@ -75,12 +75,18 @@
   return res;
 }
 
-void JavaObject::print(mvm::PrintBuffer* buf) const {
+extern "C" void printJavaObject(const JavaObject* obj, mvm::PrintBuffer* buf) {
   buf->write("JavaObject<");
-  CommonClass::printClassName(classOf->getName(), buf);
+  CommonClass::printClassName(obj->classOf->getName(), buf);
+  fprintf(stderr, "%p\n", ((void**)obj->getVirtualTable())[9]);
   buf->write(">");
 }
 
+void JavaObject::print(mvm::PrintBuffer* buf) const {
+  printJavaObject(this, buf);
+}
+
+
 void JavaObject::waitIntern(struct timeval* info, bool timed) {
 
   if (owner()) {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=62220&r1=62219&r2=62220&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Wed Jan 14 07:24:02 2009
@@ -37,6 +37,7 @@
 llvm::Constant* JnjvmModule::PrimitiveArrayVT;
 llvm::Constant* JnjvmModule::ReferenceArrayVT;
 llvm::Function* JnjvmModule::StaticInitializer;
+llvm::Function* JnjvmModule::ObjectPrinter;
 llvm::Function* JnjvmModule::NativeLoader;
 
 extern void* JavaArrayVT[];
@@ -1264,14 +1265,20 @@
   Function* Finalizer = LMI->getMethod();
   Elemts.push_back(Finalizer ? 
       ConstantExpr::getCast(Instruction::BitCast, Finalizer, PTy) : N);
-  Elemts.push_back(N);  // Delete
+  
+  // Delete
+  Elemts.push_back(N);
   
   // Tracer
   Function* Tracer = makeTracer(classDef, false);
   Elemts.push_back(Tracer ? 
       ConstantExpr::getCast(Instruction::BitCast, Tracer, PTy) : N);
-  Elemts.push_back(N);  // Printer
-  Elemts.push_back(N);  // Hashcode
+  
+  // Printer
+  Elemts.push_back(ConstantExpr::getBitCast(ObjectPrinter, PTy));
+  
+  // Hashcode
+  Elemts.push_back(N);  
 
   for (uint32 i = VT_NB_FUNCS; i < size; ++i) {
     JavaMethod* meth = ((JavaMethod**)VT)[i];
@@ -2035,6 +2042,11 @@
   
     NativeLoader = Function::Create(FTy, GlobalValue::ExternalLinkage,
                                     "vmjcNativeLoader", this);
+    
+    llvmArgs.clear();
+    FTy = FunctionType::get(Type::VoidTy, llvmArgs, false);
+    ObjectPrinter = Function::Create(FTy, GlobalValue::ExternalLinkage,
+                                     "printJavaObject", this);
 
   } else {
     PrimitiveArrayVT = ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty,

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=62220&r1=62219&r2=62220&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Wed Jan 14 07:24:02 2009
@@ -239,6 +239,7 @@
   static llvm::Constant* ReferenceArrayVT;
   
   static llvm::Function* StaticInitializer;
+  static llvm::Function* ObjectPrinter;
   
 public:
   





More information about the vmkit-commits mailing list