Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjfrijters <jfrijters>2011-07-11 11:35:47 +0400
committerjfrijters <jfrijters>2011-07-11 11:35:47 +0400
commite2493b96187d2fa5115f2ddc974cfd85986cd04e (patch)
tree5d871b843bb8864cfca5cbfaf92d3767ee91f64b /openjdk
parent141e584ee62343bbfffa6b75dac9f25a4aaf5452 (diff)
Fixed Thread.isCCLOverridden() bug. If the [g|s]etContextClassLoader() methods were not JITted before isCCLOverridden(), ldftn would return the JIT stub address and the vtable could contain the JITted method address.
Diffstat (limited to 'openjdk')
-rw-r--r--openjdk/java/lang/Thread.java4
-rw-r--r--openjdk/map.xml9
2 files changed, 13 insertions, 0 deletions
diff --git a/openjdk/java/lang/Thread.java b/openjdk/java/lang/Thread.java
index dd34d865..ec4ee73e 100644
--- a/openjdk/java/lang/Thread.java
+++ b/openjdk/java/lang/Thread.java
@@ -133,6 +133,10 @@ import sun.security.util.SecurityConstants;
public
class Thread implements Runnable {
// [IKVM]
+ private static native void prepareCCL();
+ static {
+ prepareCCL();
+ }
final class Cleanup {
private final Thread thread;
diff --git a/openjdk/map.xml b/openjdk/map.xml
index 8604cd4f..e5920387 100644
--- a/openjdk/map.xml
+++ b/openjdk/map.xml
@@ -1436,6 +1436,15 @@
<class name="java.lang.Thread">
<field name="parkLock" sig="Ljava.lang.Object;" modifiers="" />
<field name="parkState" sig="I" modifiers="" />
+ <method name="prepareCCL" sig="()V">
+ <body>
+ <ldtoken class="java.lang.Thread" method="getContextClassLoader" sig="()Ljava.lang.ClassLoader;" />
+ <call class="cli.System.Runtime.CompilerServices.RuntimeHelpers" name="PrepareMethod" sig="(Lcli.System.RuntimeMethodHandle;)V" />
+ <ldtoken class="java.lang.Thread" method="setContextClassLoader" sig="(Ljava.lang.ClassLoader;)V" />
+ <call class="cli.System.Runtime.CompilerServices.RuntimeHelpers" name="PrepareMethod" sig="(Lcli.System.RuntimeMethodHandle;)V" />
+ <ret />
+ </body>
+ </method>
<method name="isCCLOverridden" sig="(Ljava.lang.Thread;)Z">
<body>
<ldftn class="java.lang.Thread" name="getContextClassLoader" sig="()Ljava.lang.ClassLoader;" />