< prev index next >

src/share/vm/prims/whitebox.cpp

Print this page




1672     ThreadToNativeFromVM ttnfv(thread);
1673     return doubleBox(thread, env, result);
1674   }
1675   return NULL;
1676 WB_END
1677 
1678 WB_ENTRY(jobject, WB_GetMethodStringOption(JNIEnv* env, jobject wb, jobject method, jstring name))
1679   ccstr ccstrResult;
1680   if (GetMethodOption <ccstr> (thread, env, method, name, &ccstrResult)) {
1681     // can't be in VM when we call JNI
1682     ThreadToNativeFromVM ttnfv(thread);
1683     jstring result = env->NewStringUTF(ccstrResult);
1684     CHECK_JNI_EXCEPTION_(env, NULL);
1685     return result;
1686   }
1687   return NULL;
1688 WB_END
1689 
1690 WB_ENTRY(jboolean, WB_IsShared(JNIEnv* env, jobject wb, jobject obj))
1691   oop obj_oop = JNIHandles::resolve(obj);
1692   return MetaspaceShared::is_in_shared_space((void*)obj_oop);
1693 WB_END
1694 
1695 WB_ENTRY(jboolean, WB_IsSharedClass(JNIEnv* env, jobject wb, jclass clazz))
1696   return (jboolean)MetaspaceShared::is_in_shared_space(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
1697 WB_END
1698 
1699 WB_ENTRY(jboolean, WB_AreSharedStringsIgnored(JNIEnv* env))
1700   return StringTable::shared_string_ignored();












1701 WB_END
1702 
1703 //Some convenience methods to deal with objects from java
1704 int WhiteBox::offset_for_field(const char* field_name, oop object,
1705     Symbol* signature_symbol) {
1706   assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
1707   Thread* THREAD = Thread::current();
1708 
1709   //Get the class of our object
1710   Klass* arg_klass = object->klass();
1711   //Turn it into an instance-klass
1712   InstanceKlass* ik = InstanceKlass::cast(arg_klass);
1713 
1714   //Create symbols to look for in the class
1715   TempNewSymbol name_symbol = SymbolTable::lookup(field_name, (int) strlen(field_name),
1716       THREAD);
1717 
1718   //To be filled in with an offset of the field we're looking for
1719   fieldDescriptor fd;
1720 


1976   {CC"encodeConstantPoolIndyIndex0",
1977       CC"(I)I",                      (void*)&WB_ConstantPoolEncodeIndyIndex},
1978   {CC"getMethodBooleanOption",
1979       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Boolean;",
1980                                                       (void*)&WB_GetMethodBooleaneOption},
1981   {CC"getMethodIntxOption",
1982       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
1983                                                       (void*)&WB_GetMethodIntxOption},
1984   {CC"getMethodUintxOption",
1985       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
1986                                                       (void*)&WB_GetMethodUintxOption},
1987   {CC"getMethodDoubleOption",
1988       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Double;",
1989                                                       (void*)&WB_GetMethodDoubleOption},
1990   {CC"getMethodStringOption",
1991       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/String;",
1992                                                       (void*)&WB_GetMethodStringOption},
1993   {CC"isShared",           CC"(Ljava/lang/Object;)Z", (void*)&WB_IsShared },
1994   {CC"isSharedClass",      CC"(Ljava/lang/Class;)Z",  (void*)&WB_IsSharedClass },
1995   {CC"areSharedStringsIgnored",           CC"()Z",    (void*)&WB_AreSharedStringsIgnored },

1996   {CC"clearInlineCaches0",  CC"(Z)V",                 (void*)&WB_ClearInlineCaches },
1997   {CC"addCompilerDirective",    CC"(Ljava/lang/String;)I",
1998                                                       (void*)&WB_AddCompilerDirective },
1999   {CC"removeCompilerDirective",   CC"(I)V",             (void*)&WB_RemoveCompilerDirective },
2000   {CC"currentGC",                 CC"()I",            (void*)&WB_CurrentGC},
2001   {CC"allSupportedGC",            CC"()I",            (void*)&WB_AllSupportedGC},
2002   {CC"gcSelectedByErgo",          CC"()Z",            (void*)&WB_GCSelectedByErgo},
2003   {CC"supportsConcurrentGCPhaseControl", CC"()Z",     (void*)&WB_SupportsConcurrentGCPhaseControl},
2004   {CC"getConcurrentGCPhases",     CC"()[Ljava/lang/String;",
2005                                                       (void*)&WB_GetConcurrentGCPhases},
2006   {CC"requestConcurrentGCPhase0", CC"(Ljava/lang/String;)Z",
2007                                                       (void*)&WB_RequestConcurrentGCPhase},
2008 };
2009 
2010 #undef CC
2011 
2012 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2013   {
2014     if (WhiteBoxAPI) {
2015       // Make sure that wbclass is loaded by the null classloader


1672     ThreadToNativeFromVM ttnfv(thread);
1673     return doubleBox(thread, env, result);
1674   }
1675   return NULL;
1676 WB_END
1677 
1678 WB_ENTRY(jobject, WB_GetMethodStringOption(JNIEnv* env, jobject wb, jobject method, jstring name))
1679   ccstr ccstrResult;
1680   if (GetMethodOption <ccstr> (thread, env, method, name, &ccstrResult)) {
1681     // can't be in VM when we call JNI
1682     ThreadToNativeFromVM ttnfv(thread);
1683     jstring result = env->NewStringUTF(ccstrResult);
1684     CHECK_JNI_EXCEPTION_(env, NULL);
1685     return result;
1686   }
1687   return NULL;
1688 WB_END
1689 
1690 WB_ENTRY(jboolean, WB_IsShared(JNIEnv* env, jobject wb, jobject obj))
1691   oop obj_oop = JNIHandles::resolve(obj);
1692   return oopDesc::is_archive_object(obj_oop);
1693 WB_END
1694 
1695 WB_ENTRY(jboolean, WB_IsSharedClass(JNIEnv* env, jobject wb, jclass clazz))
1696   return (jboolean)MetaspaceShared::is_in_shared_space(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz)));
1697 WB_END
1698 
1699 WB_ENTRY(jboolean, WB_AreSharedStringsIgnored(JNIEnv* env))
1700   return !StringTable::shared_string_mapped();
1701 WB_END
1702 
1703 WB_ENTRY(jobject, WB_GetResolvedReferences(JNIEnv* env, jobject wb, jclass clazz))
1704   Klass *k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(clazz));
1705   if (k->is_instance_klass()) {
1706     InstanceKlass *ik = InstanceKlass::cast(k);
1707     ConstantPool *cp = ik->constants();
1708     objArrayOop refs =  cp->resolved_references();
1709     return (jobject)JNIHandles::make_local(env, refs);
1710   } else {
1711     return NULL;
1712   }
1713 WB_END
1714 
1715 //Some convenience methods to deal with objects from java
1716 int WhiteBox::offset_for_field(const char* field_name, oop object,
1717     Symbol* signature_symbol) {
1718   assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
1719   Thread* THREAD = Thread::current();
1720 
1721   //Get the class of our object
1722   Klass* arg_klass = object->klass();
1723   //Turn it into an instance-klass
1724   InstanceKlass* ik = InstanceKlass::cast(arg_klass);
1725 
1726   //Create symbols to look for in the class
1727   TempNewSymbol name_symbol = SymbolTable::lookup(field_name, (int) strlen(field_name),
1728       THREAD);
1729 
1730   //To be filled in with an offset of the field we're looking for
1731   fieldDescriptor fd;
1732 


1988   {CC"encodeConstantPoolIndyIndex0",
1989       CC"(I)I",                      (void*)&WB_ConstantPoolEncodeIndyIndex},
1990   {CC"getMethodBooleanOption",
1991       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Boolean;",
1992                                                       (void*)&WB_GetMethodBooleaneOption},
1993   {CC"getMethodIntxOption",
1994       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
1995                                                       (void*)&WB_GetMethodIntxOption},
1996   {CC"getMethodUintxOption",
1997       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Long;",
1998                                                       (void*)&WB_GetMethodUintxOption},
1999   {CC"getMethodDoubleOption",
2000       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/Double;",
2001                                                       (void*)&WB_GetMethodDoubleOption},
2002   {CC"getMethodStringOption",
2003       CC"(Ljava/lang/reflect/Executable;Ljava/lang/String;)Ljava/lang/String;",
2004                                                       (void*)&WB_GetMethodStringOption},
2005   {CC"isShared",           CC"(Ljava/lang/Object;)Z", (void*)&WB_IsShared },
2006   {CC"isSharedClass",      CC"(Ljava/lang/Class;)Z",  (void*)&WB_IsSharedClass },
2007   {CC"areSharedStringsIgnored",           CC"()Z",    (void*)&WB_AreSharedStringsIgnored },
2008   {CC"getResolvedReferences", CC"(Ljava/lang/Class;)Ljava/lang/Object;", (void*)&WB_GetResolvedReferences},
2009   {CC"clearInlineCaches0",  CC"(Z)V",                 (void*)&WB_ClearInlineCaches },
2010   {CC"addCompilerDirective",    CC"(Ljava/lang/String;)I",
2011                                                       (void*)&WB_AddCompilerDirective },
2012   {CC"removeCompilerDirective",   CC"(I)V",             (void*)&WB_RemoveCompilerDirective },
2013   {CC"currentGC",                 CC"()I",            (void*)&WB_CurrentGC},
2014   {CC"allSupportedGC",            CC"()I",            (void*)&WB_AllSupportedGC},
2015   {CC"gcSelectedByErgo",          CC"()Z",            (void*)&WB_GCSelectedByErgo},
2016   {CC"supportsConcurrentGCPhaseControl", CC"()Z",     (void*)&WB_SupportsConcurrentGCPhaseControl},
2017   {CC"getConcurrentGCPhases",     CC"()[Ljava/lang/String;",
2018                                                       (void*)&WB_GetConcurrentGCPhases},
2019   {CC"requestConcurrentGCPhase0", CC"(Ljava/lang/String;)Z",
2020                                                       (void*)&WB_RequestConcurrentGCPhase},
2021 };
2022 
2023 #undef CC
2024 
2025 JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
2026   {
2027     if (WhiteBoxAPI) {
2028       // Make sure that wbclass is loaded by the null classloader
< prev index next >