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 |