[
http://jira.codehaus.org/browse/RVM-831?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=180880#action_180880 ]
Byeong Lee edited comment on RVM-831 at 6/18/09 11:02 PM:
----------------------------------------------------------
The r15712 does not yet complete the GetStaticFieldID, and here is an updated testcase.
{noformat}
m$svn diff testing/tests/jni/src/TestJNIGetFieldID.java
Index: testing/tests/jni/src/TestJNIGetFieldID.java
===================================================================
--- testing/tests/jni/src/TestJNIGetFieldID.java (revision 15712)
+++ testing/tests/jni/src/TestJNIGetFieldID.java (working copy)
@@ -74,6 +74,18 @@
allTestPass = false;
}
+ try {
+ if (getStaticFinalF(I.class) == 1) {
+ if (verbose) System.out.println("static_I.f: pass");
+ } else {
+ if (verbose) System.out.println("static_I.f: fail");
+ allTestPass = false;
+ }
+ } catch(Throwable e) {
+ if (verbose) System.out.println("static_f: fail");
+ allTestPass = false;
+ }
+
if (allTestPass) {
System.out.println("PASS: TestJNIGetFieldID");
} else {
{noformat}
Here is a failure in Jikes RVM, and successes in Hotspot and J9:
{noformat}
$rvm -showversion -Djava.library.path=./target/tests/byeong/prototype/jni -classpath ./target/tests/byeong/prototype/jni/classes TestJNIGetFieldID
production Jikes RVM 3.1.0+svn (r15711M)
instance_a: pass
static_s: pass
static_f: pass
static_f: fail
FAIL: TestJNIGetFieldID
$java -showversion -Djava.library.path=./target/tests/byeong/prototype/jni -classpath ./target/tests/byeong/prototype/jni/classes TestJNIGetFieldID
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Server VM (build 11.3-b02, mixed mode)
instance_a: pass
static_s: pass
static_f: pass
static_I.f: pass
PASS: TestJNIGetFieldID
$java -showversion -Djava.library.path=./target/tests/byeong/prototype/jni -classpath ./target/tests/byeong/prototype/jni/classes TestJNIGetFieldID
java version "1.6.0"
Java(TM) SE Runtime Environment (build pxi3260sr4-20090219_01(SR4))
IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Linux x86-32 jvmxi3260-20090215_29883 (JIT enabled, AOT enabled)
J9VM - 20090215_029883_lHdSMr
JIT - r9_20090213_2028
GC - 20090213_AA)
JCL - 20090218_01
instance_a: pass
static_s: pass
static_f: pass
static_I.f: pass
PASS: TestJNIGetFieldID
{noformat}
Here is a proposed patch and the result:
{noformat}
$svn diff rvm/src/org/jikesrvm/jni/JNIFunctions.java
Index: rvm/src/org/jikesrvm/jni/JNIFunctions.java
===================================================================
--- rvm/src/org/jikesrvm/jni/JNIFunctions.java (revision 15712)
+++ rvm/src/org/jikesrvm/jni/JNIFunctions.java (working copy)
@@ -3447,12 +3447,13 @@
}
}
}
- // Now search all implemented interfaces (includes inherited interfaces)
- for (RVMClass curClass : rvmType.asClass().getAllImplementedInterfaces()) {
- for (RVMField field : curClass.getStaticFields()) {
- if (field.getName() == fieldName && field.getDescriptor() == descriptor) {
+ }
+
+ // Now search all implemented interfaces (includes inherited interfaces)
+ for (RVMClass curClass : rvmType.asClass().getAllImplementedInterfaces()) {
+ for (RVMField field : curClass.getStaticFields()) {
+ if (field.getName() == fieldName && field.getDescriptor() == descriptor) {
return field.getId();
- }
}
}
}
$rvm -showversion -Djava.library.path=./target/tests/byeong/prototype/jni -classpath ./target/tests/byeong/prototype/jni/classes TestJNIGetFieldID
prototype Jikes RVM 3.1.0+svn (r15712M)
instance_a: pass
static_s: pass
static_f: pass
static_I.f: pass
PASS: TestJNIGetFieldID
{noformat}
The RVM r15711rejects an interface class, which the JNI specification allows:
". The field may be defined in the class or interface referred to by clazz or in one of its superclass or superinterfaces. "
[
http://java.sun.com/docs/books/jni/html/functions.html#65115]
> Incomplete implementation of GetFieldID and GetStaticFieldID
> ------------------------------------------------------------
>
> Key: RVM-831
> URL:
http://jira.codehaus.org/browse/RVM-831> Project: RVM
> Issue Type: Bug
> Components: Runtime: JNI
> Affects Versions: 3.1.0
> Environment: IA32, and Ubuntu
> Reporter: Byeong Lee
> Assignee: David Grove
> Fix For: 3.1.1
>
> Attachments: JNIGetFieldID.patch, TestJNIGetFieldID.c, TestJNIGetFieldID.java
>
>
> Both GetFieldID and GetStaticFieldID does not correctly run the test case which I attach.
> Jikes RVM produced wrong results, which are different from what Hotspot 1.6.0_13 and J9 1.6(SR4) showed:
> $rvm TestJNIGetFieldID
> instance_a: fail
> static_s: fail
> static_f: fail
> $java -showversion TestJNIGetFieldID
> java version "1.6.0_13"
> Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
> Java HotSpot(TM) Server VM (build 11.3-b02, mixed mode)
> instance_a: pass
> static_s: pass
> static_f: pass
> $java -showversion TestJNIGetFieldID
> java version "1.6.0"
> Java(TM) SE Runtime Environment (build pxi3260sr4-20090219_01(SR4))
> IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Linux x86-32 jvmxi3260-20090215_29883 (JIT enabled, AOT enabled)
> J9VM - 20090215_029883_lHdSMr
> JIT - r9_20090213_2028
> GC - 20090213_AA)
> JCL - 20090218_01
> instance_a: pass
> static_s: pass
> static_f: pass
> GetFieldID could not handle a hidden instance field, and GetStaticFieldID could not find
> a static field in super classes or interfaces. I attach my patch.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects_______________________________________________
Jikesrvm-issues mailing list
Jikesrvm-issues@...
https://lists.sourceforge.net/lists/listinfo/jikesrvm-issues