Re: [Jamvm-general] Jenkins does not start on ARM+OpenJDK+JamVM
Brought to you by:
rlougher
From: Robert L. <rob...@gm...> - 2011-08-17 11:02:35
|
Hi Xerxes, On 17 August 2011 08:32, Xerxes Rånby <xe...@za...> wrote: > Hi JamVM team! > > Forwarding a bug from ubuntu: > https://bugs.launchpad.net/ubuntu/+source/jenkins-xstream/+bug/827463 > Jenkins fails to start becaused the OpenJDK bindings have missing > implementation for java.lang.Class.getEnclosingClass(). > No, it's implemented. Reflection support is somewhat more complicated in OpenJDK than GNU Classpath, as responsibility is split between the VM and the classlib (in GNU Classpath it's the VMs responsibility). java.lang.Class.getEnclosingClass() eventually maps down to JVM_GetEnclosingMethodInfo(), which returns a 3 element array (enclosing class, method name and method type). There must be a bug somewhere. I'll try and look at it tonight. Rob. > I noticed that the gnuclasspath bindings have support. > (oneiric)xranby@ac100:~/icedtea6-jamvm/jamvm/jamvm/src/classlib$ grep > getEnclosing -r * > gnuclasspath/reflect.c:Class *getEnclosingClass(Class *class) { > gnuclasspath/reflect.c:MethodBlock *getEnclosingMethod(Class *class) { > gnuclasspath/reflect.c: Class *enclosing_class = > getEnclosingClass(class); > gnuclasspath/reflect.c:Object *getEnclosingMethodObject(Class *class) { > gnuclasspath/reflect.c: MethodBlock *mb = getEnclosingMethod(class); > gnuclasspath/reflect.c:Object *getEnclosingConstructorObject(Class *class) { > gnuclasspath/reflect.c: MethodBlock *mb = getEnclosingMethod(class); > gnuclasspath/natives.c:uintptr_t *getEnclosingClass0(Class *class, > MethodBlock *mb, > gnuclasspath/natives.c: *ostack++ = (uintptr_t) getEnclosingClass(clazz); > gnuclasspath/natives.c:uintptr_t *getEnclosingMethod0(Class *class, > MethodBlock *mb, > gnuclasspath/natives.c: *ostack++ = (uintptr_t) > getEnclosingMethodObject(clazz); > gnuclasspath/natives.c:uintptr_t *getEnclosingConstructor(Class *class, > MethodBlock *mb, > gnuclasspath/natives.c: *ostack++ = (uintptr_t) > getEnclosingConstructorObject(clazz); > gnuclasspath/natives.c: {"getEnclosingClass", NULL, > getEnclosingClass0}, > gnuclasspath/natives.c: {"getEnclosingMethod", NULL, > getEnclosingMethod0}, > gnuclasspath/natives.c: {"getEnclosingConstructor", NULL, > getEnclosingConstructor}, > gnuclasspath/lib/java/lang/VMClass.java: Class enclosingClass = > getEnclosingClass(klass); > gnuclasspath/lib/java/lang/VMClass.java: static native Class > getEnclosingClass(Class klass); > gnuclasspath/lib/java/lang/VMClass.java: static native Constructor > getEnclosingConstructor(Class klass); > gnuclasspath/lib/java/lang/VMClass.java: static native Method > getEnclosingMethod(Class klass); > > Cheers > Xerxes > |