A new snapshot. I integrated all classes in the java.lang package (but not the sub-packages) and this means I have now resolved most VM/Library initialization issues that I was a bit worried about before embarking on this. I had to include one new hackish (or AOP if you will) feature in map.xml: The ability to replace method invocations with arbitrary CIL code sequences. This was in particular necessary to "comment out" the
loadLibrary("zip") call in
System.initializeSystemClass(). Here's what that looks like in map.xml:
<method name="initializeSystemClass" sig="()V">
<replace-method-call class="java.lang.System" name="loadLibrary" sig="(Ljava.lang.String;)V">
This simply means that all System.loadLibrary() invocations in System.initializeClass() will be replaced with a pop instruction (to discard the string argument).
- OpenJDK: Integrated java.lang package..
- OpenJDK: Integrated java.util.regex package.
- OpenJDK: Integrated java.text.Normalizer and support classes.
- OpenJDK: New StringHelper.java based on OpenJDK's String.java.
- OpenJDK: Implemented using the entry assembly's class loader as system class loader.
- OpenJDK: Replaced zip library loading hack with "replace-method-call" hack.
- OpenJDK: Implemented the hooks to set the system class loader to the entry assembly's class loader if java.class.path and java.ext.dirs properties aren't set.
- OpenJDK: Various fixes.
- Added leave CIL opcode support to remapper.
- Added support for replacing constructor and static initializer method bodies in map.xml.
- Added support for locally (i.e. per method) replacing method calls in map.xml.
- Added optimization to ikvmc for large string literals that are only used to call .toCharArray() on.
Binaries available here: ikvmbin-hybrid-0.35.2720.zip.