Uploaded image for project: 'JikesRVM'
  1. JikesRVM
  2. RVM-294

JikesRVM fails to build using a Classpath VM

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Medium
    • Resolution: Won't Fix
    • Affects Version/s: None
    • Fix Version/s: None
    • Labels:
      None
    • Environment:

      ia32-linux

      Description

      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)

        Gliffy Diagrams

          Attachments

            Activity

            dgrove David Grove created issue -
            Hide
            gnu_andrew Andrew John Hughes added a comment -
            Show
            gnu_andrew Andrew John Hughes added a comment - Filed in Classpath as well: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33731
            Hide
            gnu_andrew Andrew John Hughes added a comment -

            Using the string version of getField means this now fails with a non-existant "java.lang.VMRuntime" Error.

            Show
            gnu_andrew Andrew John Hughes added a comment - Using the string version of getField means this now fails with a non-existant "java.lang.VMRuntime" Error.
            Hide
            ianrogers Ian Rogers added a comment -

            That's odd.. does the string need to be formatted as "Ljava/lang/VMRuntime;" ?

            Show
            ianrogers Ian Rogers added a comment - That's odd.. does the string need to be formatted as "Ljava/lang/VMRuntime;" ?
            Hide
            gnu_andrew Andrew John Hughes added a comment -

            Thanks Ian. You were right, the string does need to use the type name. However, this works only up until it hangs building the bootimage:

            build-bootimage-writer:
            [mkdir] Created dir: /home/gandalf/projects/java/classpath/jikesrvm.jamvm/target/prototype_x86_64-linux/bootimage-writer
            [javac] Compiling 7 source files to /home/gandalf/projects/java/classpath/jikesrvm.jamvm/target/prototype_x86_64-linux/bootimage-writer

            gen-primordial-list:

            build-bootimage:
            [echo] Building bootimage. Output redirected to : /home/gandalf/projects/java/classpath/jikesrvm.jamvm/target/prototype_x86_64-linux/BootImageWriterOutput.txt
            [echo] MMTk properties = /home/gandalf/projects/java/classpath/jikesrvm.jamvm/build/mmtk/default.properties

            Show
            gnu_andrew Andrew John Hughes added a comment - Thanks Ian. You were right, the string does need to use the type name. However, this works only up until it hangs building the bootimage: build-bootimage-writer: [mkdir] Created dir: /home/gandalf/projects/java/classpath/jikesrvm.jamvm/target/prototype_x86_64-linux/bootimage-writer [javac] Compiling 7 source files to /home/gandalf/projects/java/classpath/jikesrvm.jamvm/target/prototype_x86_64-linux/bootimage-writer gen-primordial-list: build-bootimage: [echo] Building bootimage. Output redirected to : /home/gandalf/projects/java/classpath/jikesrvm.jamvm/target/prototype_x86_64-linux/BootImageWriterOutput.txt [echo] MMTk properties = /home/gandalf/projects/java/classpath/jikesrvm.jamvm/build/mmtk/default.properties
            Hide
            ianrogers Ian Rogers added a comment -

            That's odd, wonder if boot image writing is stressing parts of the VMs not stressed before. In particular the recent change to make the Intel assembler typed means we're hitting a lot of enumeration code now. There are some verbosity flags for the boot image writer. Some can be configured using ant (iirc - you'll need to look at the build.xml to work out what they are) and some others can be configured by toggling them in the boot image writer code itself. The output is off course all redirected into the target/prototype_x86_64-linux/BootImageWriterOutput.txt file so you'll need to look there to see where boot image writing got up to before it crashed. Is there any output in that file currently? Redirecting output the way we do tends to mask seeing errors Thanks for looking into this.

            Show
            ianrogers Ian Rogers added a comment - That's odd, wonder if boot image writing is stressing parts of the VMs not stressed before. In particular the recent change to make the Intel assembler typed means we're hitting a lot of enumeration code now. There are some verbosity flags for the boot image writer. Some can be configured using ant (iirc - you'll need to look at the build.xml to work out what they are) and some others can be configured by toggling them in the boot image writer code itself. The output is off course all redirected into the target/prototype_x86_64-linux/BootImageWriterOutput.txt file so you'll need to look there to see where boot image writing got up to before it crashed. Is there any output in that file currently? Redirecting output the way we do tends to mask seeing errors Thanks for looking into this.
            Hide
            gnu_andrew Andrew John Hughes added a comment -

            I think this is the stalling thread, seems to never wake up:

            [java] "pool-1-thread-1" 0xccba90 priority: 5 tid: 0x42804960 id: 6 state: RUNNABLE (6)
            [java] at java.lang.VMThread.sleep(Native method)
            [java] at java.lang.Thread.sleep(Thread.java:902)
            [java] at java.lang.Thread.sleep(Thread.java:866)
            [java] at org.jikesrvm.classloader.VM_Array.instantiate(VM_Array.java:481)
            [java] at org.jikesrvm.tools.bootImageWriter.BootImageWorker.run(BootImageWorker.java:44)
            [java] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:679)
            [java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:704)
            [java] at java.lang.Thread.run(Thread.java:743)

            Show
            gnu_andrew Andrew John Hughes added a comment - I think this is the stalling thread, seems to never wake up: [java] "pool-1-thread-1" 0xccba90 priority: 5 tid: 0x42804960 id: 6 state: RUNNABLE (6) [java] at java.lang.VMThread.sleep(Native method) [java] at java.lang.Thread.sleep(Thread.java:902) [java] at java.lang.Thread.sleep(Thread.java:866) [java] at org.jikesrvm.classloader.VM_Array.instantiate(VM_Array.java:481) [java] at org.jikesrvm.tools.bootImageWriter.BootImageWorker.run(BootImageWorker.java:44) [java] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:679) [java] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:704) [java] at java.lang.Thread.run(Thread.java:743)
            Hide
            gnu_andrew Andrew John Hughes added a comment -

            Log ends with:

            BootImageWriter: instantiating
            BootImageWriter: compiling with 1 threads

            Show
            gnu_andrew Andrew John Hughes added a comment - Log ends with: BootImageWriter: instantiating BootImageWriter: compiling with 1 threads
            Hide
            ianrogers Ian Rogers added a comment -

            Hi Andrew, the sleep is there to stop a race when building multithreaded iirc. Previously we used to die during booting if a class was being instantiated in parallel to an array trying to be instantiated of that class. It looks like this may be a case where the class is never getting instantiated, in which case it'd be interesting to know what class we were struggling upon. We probably need some extra debug to understand this. Sorry for not having looked into the problem deeply.

            Show
            ianrogers Ian Rogers added a comment - Hi Andrew, the sleep is there to stop a race when building multithreaded iirc. Previously we used to die during booting if a class was being instantiated in parallel to an array trying to be instantiated of that class. It looks like this may be a case where the class is never getting instantiated, in which case it'd be interesting to know what class we were struggling upon. We probably need some extra debug to understand this. Sorry for not having looked into the problem deeply.
            Hide
            ianrogers Ian Rogers added a comment -

            The gcLock, original cause of this bug, is now held in a different class (java.lang.VMCommonClassLibrarySupport.GCLock) and may have resolved this issue. Andrew could you test?

            Show
            ianrogers Ian Rogers added a comment - The gcLock, original cause of this bug, is now held in a different class (java.lang.VMCommonClassLibrarySupport.GCLock) and may have resolved this issue. Andrew could you test?
            Hide
            gnu_andrew Andrew John Hughes added a comment -

            Moving to 3.0.1 as I don't have time to try and replicate this right now.

            Building with a Classpath VM needs a simulated JDK layout:

            bin/java
            bin/javah
            bin/apt
            jre/lib/rt.jar
            lib/tools.jar

            Note the need for apt, which means tools.jar must be from Sun's langtools and not Classpath. You can then use this layout for JAVA_HOME.

            Show
            gnu_andrew Andrew John Hughes added a comment - Moving to 3.0.1 as I don't have time to try and replicate this right now. Building with a Classpath VM needs a simulated JDK layout: bin/java bin/javah bin/apt jre/lib/rt.jar lib/tools.jar Note the need for apt, which means tools.jar must be from Sun's langtools and not Classpath. You can then use this layout for JAVA_HOME.
            Hide
            dgrove David Grove added a comment -

            Initial triage for 3.0.1 release; suggesting postponing to 3.0.2; move back to 3.0.1 if you disagree.

            Show
            dgrove David Grove added a comment - Initial triage for 3.0.1 release; suggesting postponing to 3.0.2; move back to 3.0.1 if you disagree.
            Hide
            dgrove David Grove added a comment -

            Defer to 3.1.1

            Show
            dgrove David Grove added a comment - Defer to 3.1.1
            Hide
            dgrove David Grove added a comment -

            bulk defer open issues to 3.1.2

            Show
            dgrove David Grove added a comment - bulk defer open issues to 3.1.2
            Hide
            dgrove David Grove added a comment -

            A lot has changed since 2007. Issue made obsolete by OpenJDK.

            Show
            dgrove David Grove added a comment - A lot has changed since 2007. Issue made obsolete by OpenJDK.
            Hide
            dgrove David Grove added a comment -

            bulk close of all resolved issues in preparation for 3.1.3 release.

            Show
            dgrove David Grove added a comment - bulk close of all resolved issues in preparation for 3.1.3 release.
            dgrove David Grove made changes -
            Field Original Value New Value
            Workflow jira [ 17493 ] X10 Workflow [ 18818 ]
            dgrove David Grove made changes -
            Attachment Test.java [ 11073 ]
            dgrove David Grove made changes -
            Priority Major [ 6 ] Medium [ 3 ]

              People

              • Assignee:
                gnu_andrew Andrew John Hughes
                Reporter:
                gnu_andrew Andrew John Hughes
              • Votes:
                0 Vote for this issue
                Watchers:
                0 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: