1487 WB_END 1488 1489 WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o)) 1490 JavaThread* t = JavaThread::current(); 1491 return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong)JavaThread::stack_shadow_zone_size(); 1492 WB_END 1493 1494 1495 int WhiteBox::array_bytes_to_length(size_t bytes) { 1496 return Array<u1>::bytes_to_length(bytes); 1497 } 1498 1499 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size)) 1500 if (size < 0) { 1501 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), 1502 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size)); 1503 } 1504 1505 oop class_loader_oop = JNIHandles::resolve(class_loader); 1506 ClassLoaderData* cld = class_loader_oop != NULL 1507 ? java_lang_ClassLoader::loader_data(class_loader_oop) 1508 : ClassLoaderData::the_null_class_loader_data(); 1509 1510 void* metadata = MetadataFactory::new_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread); 1511 1512 return (jlong)(uintptr_t)metadata; 1513 WB_END 1514 1515 WB_ENTRY(void, WB_FreeMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong addr, jlong size)) 1516 oop class_loader_oop = JNIHandles::resolve(class_loader); 1517 ClassLoaderData* cld = class_loader_oop != NULL 1518 ? java_lang_ClassLoader::loader_data(class_loader_oop) 1519 : ClassLoaderData::the_null_class_loader_data(); 1520 1521 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr); 1522 WB_END 1523 1524 WB_ENTRY(void, WB_DefineModule(JNIEnv* env, jobject o, jobject module, jboolean is_open, 1525 jstring version, jstring location, jobjectArray packages)) 1526 ResourceMark rm(THREAD); 1527 1528 objArrayOop packages_oop = objArrayOop(JNIHandles::resolve(packages)); 1529 objArrayHandle packages_h(THREAD, packages_oop); 1530 int num_packages = (packages_h == NULL ? 0 : packages_h->length()); 1531 1532 char** pkgs = NULL; 1533 if (num_packages > 0) { 1534 pkgs = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char*, num_packages); 1535 for (int x = 0; x < num_packages; x++) { 1536 oop pkg_str = packages_h->obj_at(x); 1537 if (pkg_str == NULL || !pkg_str->is_a(SystemDictionary::String_klass())) { 1538 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), | 1487 WB_END 1488 1489 WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o)) 1490 JavaThread* t = JavaThread::current(); 1491 return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong)JavaThread::stack_shadow_zone_size(); 1492 WB_END 1493 1494 1495 int WhiteBox::array_bytes_to_length(size_t bytes) { 1496 return Array<u1>::bytes_to_length(bytes); 1497 } 1498 1499 WB_ENTRY(jlong, WB_AllocateMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong size)) 1500 if (size < 0) { 1501 THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), 1502 err_msg("WB_AllocateMetaspace: size is negative: " JLONG_FORMAT, size)); 1503 } 1504 1505 oop class_loader_oop = JNIHandles::resolve(class_loader); 1506 ClassLoaderData* cld = class_loader_oop != NULL 1507 ? java_lang_ClassLoader::loader_data_acquire(class_loader_oop) 1508 : ClassLoaderData::the_null_class_loader_data(); 1509 1510 void* metadata = MetadataFactory::new_array<u1>(cld, WhiteBox::array_bytes_to_length((size_t)size), thread); 1511 1512 return (jlong)(uintptr_t)metadata; 1513 WB_END 1514 1515 WB_ENTRY(void, WB_FreeMetaspace(JNIEnv* env, jobject wb, jobject class_loader, jlong addr, jlong size)) 1516 oop class_loader_oop = JNIHandles::resolve(class_loader); 1517 ClassLoaderData* cld = class_loader_oop != NULL 1518 ? java_lang_ClassLoader::loader_data_acquire(class_loader_oop) 1519 : ClassLoaderData::the_null_class_loader_data(); 1520 1521 MetadataFactory::free_array(cld, (Array<u1>*)(uintptr_t)addr); 1522 WB_END 1523 1524 WB_ENTRY(void, WB_DefineModule(JNIEnv* env, jobject o, jobject module, jboolean is_open, 1525 jstring version, jstring location, jobjectArray packages)) 1526 ResourceMark rm(THREAD); 1527 1528 objArrayOop packages_oop = objArrayOop(JNIHandles::resolve(packages)); 1529 objArrayHandle packages_h(THREAD, packages_oop); 1530 int num_packages = (packages_h == NULL ? 0 : packages_h->length()); 1531 1532 char** pkgs = NULL; 1533 if (num_packages > 0) { 1534 pkgs = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char*, num_packages); 1535 for (int x = 0; x < num_packages; x++) { 1536 oop pkg_str = packages_h->obj_at(x); 1537 if (pkg_str == NULL || !pkg_str->is_a(SystemDictionary::String_klass())) { 1538 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), |