mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-22 20:14:43 +02:00
6714758: hotspot: provide an entry point to the BootStrap Class loader[dholmes,acorn]
Adds JVM_FindClassFromBootLoader entry point, for jdk's use Reviewed-by: dholmes, acorn
This commit is contained in:
parent
cb8502a58c
commit
69eb2b72c6
15 changed files with 61 additions and 7 deletions
|
@ -624,6 +624,30 @@ JVM_ENTRY(void, JVM_ResolveClass(JNIEnv* env, jclass cls))
|
|||
if (PrintJVMWarnings) warning("JVM_ResolveClass not implemented");
|
||||
JVM_END
|
||||
|
||||
// Rationale behind JVM_FindClassFromBootLoader
|
||||
// a> JVM_FindClassFromClassLoader was never exported in the export tables.
|
||||
// b> because of (a) java.dll has a direct dependecy on the unexported
|
||||
// private symbol "_JVM_FindClassFromClassLoader@20".
|
||||
// c> the launcher cannot use the private symbol as it dynamically opens
|
||||
// the entry point, so if something changes, the launcher will fail
|
||||
// unexpectedly at runtime, it is safest for the launcher to dlopen a
|
||||
// stable exported interface.
|
||||
// d> re-exporting JVM_FindClassFromClassLoader as public, will cause its
|
||||
// signature to change from _JVM_FindClassFromClassLoader@20 to
|
||||
// JVM_FindClassFromClassLoader and will not be backward compatible
|
||||
// with older JDKs.
|
||||
// Thus a public/stable exported entry point is the right solution,
|
||||
// public here means public in linker semantics, and is exported only
|
||||
// to the JDK, and is not intended to be a public API.
|
||||
|
||||
JVM_ENTRY(jclass, JVM_FindClassFromBootLoader(JNIEnv* env,
|
||||
const char* name,
|
||||
jboolean throwError))
|
||||
JVMWrapper3("JVM_FindClassFromBootLoader %s throw %s", name,
|
||||
throwError ? "error" : "exception");
|
||||
return JVM_FindClassFromClassLoader(env, name, JNI_FALSE,
|
||||
(jobject)NULL, throwError);
|
||||
JVM_END
|
||||
|
||||
JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name,
|
||||
jboolean init, jobject loader,
|
||||
|
|
|
@ -389,6 +389,17 @@ JNIEXPORT jclass JNICALL
|
|||
JVM_FindClassFromClassLoader(JNIEnv *env, const char *name, jboolean init,
|
||||
jobject loader, jboolean throwError);
|
||||
|
||||
/*
|
||||
* Find a class from a boot class loader. Throw ClassNotFoundException
|
||||
* or NoClassDefFoundError depending on the value of the last
|
||||
* argument. This is the same as FindClassFromClassLoader but provided
|
||||
* as a convenience method exported correctly on all platforms for
|
||||
* JSR 277 launcher class loading.
|
||||
*/
|
||||
JNIEXPORT jclass JNICALL
|
||||
JVM_FindClassFromBootLoader(JNIEnv *env, const char *name,
|
||||
jboolean throwError);
|
||||
|
||||
/*
|
||||
* Find a class from a given class.
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue