diff --git a/src/classpath-openjdk.cpp b/src/classpath-openjdk.cpp index 4ec3c3c423..c19c7a6353 100644 --- a/src/classpath-openjdk.cpp +++ b/src/classpath-openjdk.cpp @@ -2452,10 +2452,19 @@ object makeJconstructor(Thread* t, } #endif // HAVE_JexecutableHasRealParameterData +void resolveBootstrap(Thread* t, Gc::Type type) +{ + if (vm::type(t, type)->vmFlags() & BootstrapFlag) { + resolveSystemClass(t, roots(t)->bootLoader(), vm::type(t, type)->name()); + } +} + object makeJmethod(Thread* t, GcMethod* vmMethod, int index) { PROTECT(t, vmMethod); + resolveBootstrap(t, GcJmethod::Type); + object name = intern(t, t->m->classpath->makeString( @@ -2558,6 +2567,8 @@ object makeJconstructor(Thread* t, GcMethod* vmMethod, int index) { PROTECT(t, vmMethod); + resolveBootstrap(t, GcJconstructor::Type); + unsigned parameterCount; unsigned returnTypeSpec; object parameterTypes = resolveParameterJTypes(t, @@ -2638,6 +2649,8 @@ object makeJfield(Thread* t, GcField* vmField, int index) { PROTECT(t, vmField); + resolveBootstrap(t, GcJfield::Type); + object name = intern(t, t->m->classpath->makeString( diff --git a/test/UnsafeTest.java b/test/UnsafeTest.java index a644641dda..c7f4555773 100644 --- a/test/UnsafeTest.java +++ b/test/UnsafeTest.java @@ -135,6 +135,9 @@ public class UnsafeTest { } public static void main(String[] args) { + System.out.println("method count is " + + Unsafe.class.getDeclaredMethods().length); + Unsafe u = avian.Machine.getUnsafe(); unsafeCatch(u);