Building JikesRVM with either JamVM or CACAO and GNU Classpath currently fails due to a difference in the VMRuntime classes. JikesRVM's version is public, while the Classpath copy is package-private.
gen-interface:
[java] java.lang.ExceptionInInitializerError
[java] at org.jikesrvm.ia32.VM_OutOfLineMachineCode.generateThreadSwitchInstructions(VM_OutOfLineMachineCode.java:342)
[java] at org.jikesrvm.ia32.VM_OutOfLineMachineCode.init(VM_OutOfLineMachineCode.java:55)
[java] at org.jikesrvm.VM.init(VM.java:2216)
[java] at org.jikesrvm.VM.initForTool(VM.java:107)
[java] at org.jikesrvm.VM.initForTool(VM.java:95)
[java] at org.jikesrvm.tools.header_gen.GenerateInterfaceDeclarations.main(GenerateInterfaceDeclarations.java:162)
[java] Caused by: java.lang.IllegalAccessException: class is not accessible
[java] at org.jikesrvm.runtime.VM_Entrypoints.<clinit>(VM_Entrypoints.java:78)
[java] at org.jikesrvm.ia32.VM_OutOfLineMachineCode.generateThreadSwitchInstructions(VM_OutOfLineMachineCode.java:342)
[java] ...5 more
The line in question is:
public static final VM_Field gcLockField = getField(java.lang.VMRuntime.class, "gcLock", int.class);
I don't know if this is new or not, but we could build earlier. Trying to put this line in a separate file to test causes the compile to fail because VMRuntime is private:
javac -cp target/prototype_x86_64-linux/jksvm.jar:target/prototype_x86_64-linux/rvmrt.jar Test.java
Test.java:7: java.lang.VMRuntime is not public in java.lang; cannot be accessed from outside package
System.out.println(getField(java.lang.VMRuntime.class, "gcLock", int.class));
^
1 error
Using the jars as the bootclasspath works but the test still fails.
java org/jikesrvm/runtime/Test
java.lang.IllegalAccessException: class is not accessible
at org.jikesrvm.runtime.Test.main(Test.java:9)
Filed in Classpath as well: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33731