src/share/vm/prims/whitebox.cpp

changeset 6992
2c6ef90f030a
parent 6963
0c48231c5c84
child 7050
6701abbc4441
equal deleted inserted replaced
6991:882004b9e7e1 6992:2c6ef90f030a
22 * 22 *
23 */ 23 */
24 24
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 26
27 #include "memory/metadataFactory.hpp"
27 #include "memory/universe.hpp" 28 #include "memory/universe.hpp"
28 #include "oops/oop.inline.hpp" 29 #include "oops/oop.inline.hpp"
29 30
30 #include "classfile/symbolTable.hpp" 31 #include "classfile/symbolTable.hpp"
31 #include "classfile/classLoaderData.hpp" 32 #include "classfile/classLoaderData.hpp"
34 #include "prims/wbtestmethods/parserTests.hpp" 35 #include "prims/wbtestmethods/parserTests.hpp"
35 36
36 #include "runtime/arguments.hpp" 37 #include "runtime/arguments.hpp"
37 #include "runtime/interfaceSupport.hpp" 38 #include "runtime/interfaceSupport.hpp"
38 #include "runtime/os.hpp" 39 #include "runtime/os.hpp"
40 #include "utilities/array.hpp"
39 #include "utilities/debug.hpp" 41 #include "utilities/debug.hpp"
40 #include "utilities/macros.hpp" 42 #include "utilities/macros.hpp"
41 #include "utilities/exceptions.hpp" 43 #include "utilities/exceptions.hpp"
42 44
43 #if INCLUDE_ALL_GCS 45 #if INCLUDE_ALL_GCS
722 env->SetObjectArrayElement(result, 1, insts); 724 env->SetObjectArrayElement(result, 1, insts);
723 725
724 return result; 726 return result;
725 WB_END 727 WB_END
726 728
729
730 int WhiteBox::array_bytes_to_length(size_t bytes) {
731 return Array<u1>::bytes_to_length(bytes);
732 }
733
734 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size))
735 if (size < 0) {
736 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(),
737 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size));
738 }
739
740 oop class_loader_oop = JNIHandles::resolve(class_loader);
741 ClassLoaderData* cld = class_loader_oop != NULL
742 ? java_lang_ClassLoader::loader_data(class_loader_oop)
743 : ClassLoaderData::the_null_class_loader_data();
744
745 void* metadata = MetadataFactory::new_writeable_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread);
746
747 return (jlong)(uintptr_t)metadata;
748 WB_END
749
750 WB_ENTRY(void, WB_FreeMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong addr, jlong size))
751 oop class_loader_oop = JNIHandles::resolve(class_loader);
752 ClassLoaderData* cld = class_loader_oop != NULL
753 ? java_lang_ClassLoader::loader_data(class_loader_oop)
754 : ClassLoaderData::the_null_class_loader_data();
755
756 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr);
757 WB_END
727 758
728 //Some convenience methods to deal with objects from java 759 //Some convenience methods to deal with objects from java
729 int WhiteBox::offset_for_field(const char* field_name, oop object, 760 int WhiteBox::offset_for_field(const char* field_name, oop object,
730 Symbol* signature_symbol) { 761 Symbol* signature_symbol) {
731 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid"); 762 assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
853 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;", 884 {CC"getStringVMFlag", CC"(Ljava/lang/String;)Ljava/lang/String;",
854 (void*)&WB_GetStringVMFlag}, 885 (void*)&WB_GetStringVMFlag},
855 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable }, 886 {CC"isInStringTable", CC"(Ljava/lang/String;)Z", (void*)&WB_IsInStringTable },
856 {CC"fullGC", CC"()V", (void*)&WB_FullGC }, 887 {CC"fullGC", CC"()V", (void*)&WB_FullGC },
857 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory }, 888 {CC"readReservedMemory", CC"()V", (void*)&WB_ReadReservedMemory },
889 {CC"allocateMetaspace",
890 CC"(Ljava/lang/ClassLoader;J)J", (void*)&WB_AllocateMetaspace },
891 {CC"freeMetaspace",
892 CC"(Ljava/lang/ClassLoader;JJ)V", (void*)&WB_FreeMetaspace },
858 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures }, 893 {CC"getCPUFeatures", CC"()Ljava/lang/String;", (void*)&WB_GetCPUFeatures },
859 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;", 894 {CC"getNMethod", CC"(Ljava/lang/reflect/Executable;Z)[Ljava/lang/Object;",
860 (void*)&WB_GetNMethod }, 895 (void*)&WB_GetNMethod },
861 }; 896 };
862 897

mercurial