[vmkit-commits] [vmkit] r191886 - J3 now supports calling Object.toString() to better debug objects.
Koutheir Attouchi
koutheir at gmail.com
Thu Oct 3 04:01:01 PDT 2013
Author: koutheir
Date: Thu Oct 3 06:01:01 2013
New Revision: 191886
URL: http://llvm.org/viewvc/llvm-project?rev=191886&view=rev
Log:
J3 now supports calling Object.toString() to better debug objects.
Modified:
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h
vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
vmkit/trunk/lib/j3/VMCore/JavaObject.h
vmkit/trunk/lib/j3/VMCore/JavaString.cpp
vmkit/trunk/lib/j3/VMCore/JavaString.h
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Thu Oct 3 06:01:01 2013
@@ -206,6 +206,7 @@ JavaMethod* Classpath::InitArithmeticExc
JavaMethod* Classpath::InitCloneNotSupportedException;
JavaMethod* Classpath::InitObject;
JavaMethod* Classpath::FinalizeObject;
+JavaMethod* Classpath::toString;
JavaMethod* Classpath::IntToString;
JavaMethod* Classpath::SystemArraycopy;
@@ -905,6 +906,9 @@ void Classpath::initialiseClasspath(Jnjv
FinalizeObject = UPCALL_METHOD(loader, "java/lang/Object", "finalize", "()V",
ACC_VIRTUAL);
+
+ toString = UPCALL_METHOD(loader, "java/lang/Object", "toString",
+ "()Ljava/lang/String;", ACC_VIRTUAL);
IntToString = UPCALL_METHOD(loader, "java/lang/Integer", "toString",
"(II)Ljava/lang/String;", ACC_STATIC);
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.h Thu Oct 3 06:01:01 2013
@@ -251,6 +251,7 @@ public:
ISOLATE_STATIC JavaMethod* InitObject;
ISOLATE_STATIC JavaMethod* FinalizeObject;
+ ISOLATE_STATIC JavaMethod* toString;
ISOLATE_STATIC JavaMethod* ErrorWithExcpNoClassDefFoundError;
ISOLATE_STATIC JavaMethod* ErrorWithExcpExceptionInInitializerError;
Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp Thu Oct 3 06:01:01 2013
@@ -197,6 +197,7 @@ JavaMethod* Classpath::InitArithmeticExc
JavaMethod* Classpath::InitCloneNotSupportedException;
JavaMethod* Classpath::InitObject;
JavaMethod* Classpath::FinalizeObject;
+JavaMethod* Classpath::toString;
JavaMethod* Classpath::IntToString;
JavaMethod* Classpath::SystemArraycopy;
@@ -787,6 +788,9 @@ void Classpath::initialiseClasspath(Jnjv
FinalizeObject = UPCALL_METHOD(loader, "java/lang/Object", "finalize", "()V",
ACC_VIRTUAL);
+ toString = UPCALL_METHOD(loader, "java/lang/Object", "toString",
+ "()Ljava/lang/String;", ACC_VIRTUAL);
+
IntToString = UPCALL_METHOD(loader, "java/lang/Integer", "toString",
"(II)Ljava/lang/String;", ACC_STATIC);
Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h Thu Oct 3 06:01:01 2013
@@ -240,6 +240,7 @@ public:
ISOLATE_STATIC JavaMethod* InitObject;
ISOLATE_STATIC JavaMethod* FinalizeObject;
+ ISOLATE_STATIC JavaMethod* toString;
ISOLATE_STATIC JavaMethod* ErrorWithExcpNoClassDefFoundError;
ISOLATE_STATIC JavaMethod* ErrorWithExcpExceptionInInitializerError;
Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Oct 3 06:01:01 2013
@@ -2349,8 +2349,8 @@ void JavaField::setStaticField(JavaObjec
std::ostream& j3::operator << (std::ostream& os, const CommonClass& ccl)
{
- os << *ccl.name;
- return (!ccl.super) ? (os << ';') : (os << ':' << *ccl.super);
+ return os << *ccl.name << ';';
+// return (!ccl.super) ? (os << ';') : (os << ':' << *ccl.super);
}
void CommonClass::dump() const
Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Oct 3 06:01:01 2013
@@ -387,9 +387,11 @@ bool JavaObject::instanceOf(JavaObject*
std::ostream& j3::operator << (std::ostream& os, const JavaObject& obj)
{
JavaObject* javaLoader = NULL;
- const JavaString* threadNameObj = NULL;
+ const JavaString* jstr = NULL;
+ const JavaObjectVMThread* vmthObj = NULL;
llvm_gcroot(javaLoader, 0);
- llvm_gcroot(threadNameObj, 0);
+ llvm_gcroot(jstr, 0);
+ llvm_gcroot(vmthObj, 0);
if (VMClassLoader::isVMClassLoader(&obj)) {
JnjvmClassLoader* loader = ((const VMClassLoader&)obj).getClassLoader();
@@ -416,24 +418,31 @@ std::ostream& j3::operator << (std::ostr
os << &obj << "(class=" << *ccl;
if (ccl == vm->upcalls->newThread) {
- threadNameObj = static_cast<const JavaString*>(
+ jstr = static_cast<const JavaString*>(
vm->upcalls->threadName->getInstanceObjectField(
const_cast<JavaObject*>(&obj)));
- char *threadName = JavaString::strToAsciiz(threadNameObj);
- os << ",name=\"" << threadName << '\"';
- delete [] threadName;
+ os << ",name=" << *jstr;
}
#ifndef OpenJDKPath
else if (ccl == vm->upcalls->newVMThread) {
- const JavaObjectVMThread& vmthObj = (const JavaObjectVMThread&)obj;
- for (int retries = 10; (!vmthObj.vmdata) && (retries >= 0); --retries)
+ vmthObj = static_cast<const JavaObjectVMThread*>(&obj);
+ for (int retries = 10; (!vmthObj->vmdata) && (retries >= 0); --retries)
usleep(100);
- if (const JavaObject* thObj = vmthObj.vmdata->currentThread())
+ if (const JavaObject* thObj = vmthObj->vmdata->currentThread())
os << ",thread=" << *thObj;
}
#endif
+ else if (ccl == vm->upcalls->newClass) {
+ ccl = JavaObjectClass::getClass(
+ const_cast<JavaObjectClass*>(
+ static_cast<const JavaObjectClass*>(&obj)));
+
+ os << ",name=\"" << *ccl->asClass() << '\"';
+ } else if (ccl == vm->upcalls->newString) {
+ os << ',' << static_cast<const JavaString&>(obj);
+ }
os << ')';
}
@@ -450,3 +459,22 @@ void JavaObject::dumpClass() const
{
JavaObject::getClass(this)->dump();
}
+
+void JavaObject::dumpToString() const
+{
+ JavaString* jstr = NULL;
+ llvm_gcroot(jstr, 0);
+
+ if (VMClassLoader::isVMClassLoader(this) || VMStaticInstance::isVMStaticInstance(this))
+ {cerr << "<invalid>" << endl; return;}
+
+ Class* cl = JavaObject::getClass(this)->asClass();
+ if (!cl) {cerr << "<invalid>" << endl; return;}
+
+ Jnjvm* vm = cl->classLoader->getJVM();
+ jstr = static_cast<JavaString*>(
+ vm->upcalls->toString->invokeJavaObjectVirtual(
+ vm, cl, const_cast<JavaObject*>(this)));
+
+ cerr << *jstr << endl;
+}
Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.h?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.h Thu Oct 3 06:01:01 2013
@@ -334,6 +334,7 @@ public:
void dumpClass() const __attribute__((noinline));
void dump() const __attribute__((noinline));
friend std::ostream& operator << (std::ostream&, const JavaObject&);
+ void dumpToString() const __attribute__((noinline));
};
Modified: vmkit/trunk/lib/j3/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaString.cpp?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaString.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaString.cpp Thu Oct 3 06:01:01 2013
@@ -120,4 +120,12 @@ const UTF8* JavaString::javaToInternal(c
return res;
}
+std::ostream& operator << (std::ostream& os, const JavaString& jstr)
+{
+ char *str = JavaString::strToAsciiz(&jstr);
+ os << '\"' << str << '\"';
+ delete [] str;
+ return os;
+}
+
}
Modified: vmkit/trunk/lib/j3/VMCore/JavaString.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaString.h?rev=191886&r1=191885&r2=191886&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaString.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaString.h Thu Oct 3 06:01:01 2013
@@ -62,6 +62,8 @@ class JavaString : public JavaObject {
/// javaToInternal - Replaces all '/' into '.'.
static const UTF8* javaToInternal(const JavaString* self, UTF8Map* map);
+
+ friend std::ostream& operator << (std::ostream&, const JavaString&);
};
} // end namespace j3
More information about the vmkit-commits
mailing list