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:
<class name="java.lang.System">
<method name="initializeSystemClass" sig="()V">
<replace-method-call class="java.lang.System" name="loadLibrary" sig="(Ljava.lang.String;)V">
<code>
<pop />
</code>
</replace-method-call>
</method>
</class>
This simply means that all System.loadLibrary() invocations in System.initializeClass() will be replaced with a pop instruction (to discard the string argument).
Changes:
- 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.