Skip to content

Commit 29c603f

Browse files
author
Harold Seigel
committed
8262227: Change SystemDictionary::find() to return an InstanceKlass*.
Reviewed-by: iklam, dholmes, coleenp
1 parent 35c0a69 commit 29c603f

13 files changed

+71
-84
lines changed

src/hotspot/share/aot/aotCodeHeap.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,7 @@ Klass* AOTCodeHeap::lookup_klass(const char* name, int len, const Method* method
112112
log_debug(aot, class, resolve)("Probe failed for AOT class %s", name);
113113
return NULL;
114114
}
115-
Klass* k = SystemDictionary::find_instance_or_array_klass(sym, loader, protection_domain, thread);
116-
assert(!thread->has_pending_exception(), "should not throw");
115+
Klass* k = SystemDictionary::find_instance_or_array_klass(sym, loader, protection_domain);
117116

118117
if (k != NULL) {
119118
log_info(aot, class, resolve)("%s %s (lookup)", caller->method_holder()->external_name(), k->external_name());

src/hotspot/share/ci/ciEnv.cpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -304,10 +304,10 @@ ciInstance* ciEnv::get_or_create_exception(jobject& handle, Symbol* name) {
304304
VM_ENTRY_MARK;
305305
if (handle == NULL) {
306306
// Cf. universe.cpp, creation of Universe::_null_ptr_exception_instance.
307-
Klass* k = SystemDictionary::find(name, Handle(), Handle(), THREAD);
307+
InstanceKlass* ik = SystemDictionary::find_instance_klass(name, Handle(), Handle());
308308
jobject objh = NULL;
309-
if (!HAS_PENDING_EXCEPTION && k != NULL) {
310-
oop obj = InstanceKlass::cast(k)->allocate_instance(THREAD);
309+
if (ik != NULL) {
310+
oop obj = ik->allocate_instance(THREAD);
311311
if (!HAS_PENDING_EXCEPTION)
312312
objh = JNIHandles::make_global(Handle(THREAD, obj));
313313
}
@@ -448,8 +448,7 @@ ciKlass* ciEnv::get_klass_by_name_impl(ciKlass* accessing_klass,
448448
kls = SystemDictionary::find_constrained_instance_or_array_klass(sym, loader,
449449
CHECK_AND_CLEAR_(fail_type));
450450
} else {
451-
kls = SystemDictionary::find_instance_or_array_klass(sym, loader, domain,
452-
CHECK_AND_CLEAR_(fail_type));
451+
kls = SystemDictionary::find_instance_or_array_klass(sym, loader, domain);
453452
}
454453
found_klass = kls;
455454
}

src/hotspot/share/classfile/systemDictionary.cpp

+11-14
Original file line numberDiff line numberDiff line change
@@ -899,16 +899,15 @@ InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
899899
// _dictionary->bucket(index) is read here, so the caller will not see
900900
// the new entry.
901901

902-
Klass* SystemDictionary::find(Symbol* class_name,
903-
Handle class_loader,
904-
Handle protection_domain,
905-
TRAPS) {
902+
InstanceKlass* SystemDictionary::find_instance_klass(Symbol* class_name,
903+
Handle class_loader,
904+
Handle protection_domain) {
906905

907906
// The result of this call should be consistent with the result
908907
// of the call to resolve_instance_class_or_null().
909908
// See evaluation 6790209 and 4474172 for more details.
910-
class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
911-
ClassLoaderData* loader_data = ClassLoaderData::class_loader_data_or_null(class_loader());
909+
oop class_loader_oop = java_lang_ClassLoader::non_reflection_class_loader(class_loader());
910+
ClassLoaderData* loader_data = ClassLoaderData::class_loader_data_or_null(class_loader_oop);
912911

913912
if (loader_data == NULL) {
914913
// If the ClassLoaderData has not been setup,
@@ -918,16 +917,14 @@ Klass* SystemDictionary::find(Symbol* class_name,
918917

919918
Dictionary* dictionary = loader_data->dictionary();
920919
unsigned int name_hash = dictionary->compute_hash(class_name);
921-
return dictionary->find(name_hash, class_name,
922-
protection_domain);
920+
return dictionary->find(name_hash, class_name, protection_domain);
923921
}
924922

925923
// Look for a loaded instance or array klass by name. Do not do any loading.
926924
// return NULL in case of error.
927925
Klass* SystemDictionary::find_instance_or_array_klass(Symbol* class_name,
928926
Handle class_loader,
929-
Handle protection_domain,
930-
TRAPS) {
927+
Handle protection_domain) {
931928
Klass* k = NULL;
932929
assert(class_name != NULL, "class name must be non NULL");
933930

@@ -941,13 +938,13 @@ Klass* SystemDictionary::find_instance_or_array_klass(Symbol* class_name,
941938
if (t != T_OBJECT) {
942939
k = Universe::typeArrayKlassObj(t);
943940
} else {
944-
k = SystemDictionary::find(ss.as_symbol(), class_loader, protection_domain, THREAD);
941+
k = SystemDictionary::find_instance_klass(ss.as_symbol(), class_loader, protection_domain);
945942
}
946943
if (k != NULL) {
947944
k = k->array_klass_or_null(ndims);
948945
}
949946
} else {
950-
k = find(class_name, class_loader, protection_domain, THREAD);
947+
k = find_instance_klass(class_name, class_loader, protection_domain);
951948
}
952949
return k;
953950
}
@@ -1219,7 +1216,7 @@ bool SystemDictionary::check_shared_class_super_type(InstanceKlass* klass, Insta
12191216
if (!super_type->is_shared_unregistered_class() && super_type->class_loader_data() != NULL) {
12201217
// Check if the super class is loaded by the current class_loader
12211218
Symbol* name = super_type->name();
1222-
Klass* check = find(name, class_loader, protection_domain, CHECK_0);
1219+
InstanceKlass* check = find_instance_klass(name, class_loader, protection_domain);
12231220
if (check == super_type) {
12241221
return true;
12251222
}
@@ -1897,7 +1894,7 @@ Klass* SystemDictionary::find_constrained_instance_or_array_klass(
18971894
// Force the protection domain to be null. (This removes protection checks.)
18981895
Handle no_protection_domain;
18991896
Klass* klass = find_instance_or_array_klass(class_name, class_loader,
1900-
no_protection_domain, CHECK_NULL);
1897+
no_protection_domain);
19011898
if (klass != NULL)
19021899
return klass;
19031900

src/hotspot/share/classfile/systemDictionary.hpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,14 @@ class SystemDictionary : AllStatic {
139139
TRAPS);
140140

141141
// Lookup an already loaded class. If not found NULL is returned.
142-
static Klass* find(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
142+
static InstanceKlass* find_instance_klass(Symbol* class_name, Handle class_loader, Handle protection_domain);
143143

144144
// Lookup an already loaded instance or array class.
145145
// Do not make any queries to class loaders; consult only the cache.
146146
// If not found NULL is returned.
147147
static Klass* find_instance_or_array_klass(Symbol* class_name,
148148
Handle class_loader,
149-
Handle protection_domain,
150-
TRAPS);
149+
Handle protection_domain);
151150

152151
// Lookup an instance or array class that has already been loaded
153152
// either into the given class loader, or else into another class

src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1513,7 +1513,7 @@ static bool is_retransforming(const InstanceKlass* ik, TRAPS) {
15131513
assert(name != NULL, "invariant");
15141514
Handle class_loader(THREAD, ik->class_loader());
15151515
Handle protection_domain(THREAD, ik->protection_domain());
1516-
return SystemDictionary::find(name, class_loader, protection_domain, THREAD) != NULL;
1516+
return SystemDictionary::find_instance_klass(name, class_loader, protection_domain) != NULL;
15171517
}
15181518

15191519
// target for JFR_ON_KLASS_CREATION hook

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

+9-6
Original file line numberDiff line numberDiff line change
@@ -547,24 +547,27 @@ C2V_VMENTRY_NULL(jobject, lookupType, (JNIEnv* env, jobject, jstring jname, jcla
547547
// This is a name from a signature. Strip off the trimmings.
548548
// Call recursive to keep scope of strippedsym.
549549
TempNewSymbol strippedsym = Signature::strip_envelope(class_name);
550-
resolved_klass = SystemDictionary::find(strippedsym, class_loader, protection_domain, CHECK_NULL);
550+
resolved_klass = SystemDictionary::find_instance_klass(strippedsym,
551+
class_loader,
552+
protection_domain);
551553
} else if (Signature::is_array(class_name)) {
552554
SignatureStream ss(class_name, false);
553555
int ndim = ss.skip_array_prefix();
554556
if (ss.type() == T_OBJECT) {
555557
Symbol* strippedsym = ss.as_symbol();
556-
resolved_klass = SystemDictionary::find(strippedsym,
557-
class_loader,
558-
protection_domain,
559-
CHECK_NULL);
558+
resolved_klass = SystemDictionary::find_instance_klass(strippedsym,
559+
class_loader,
560+
protection_domain);
560561
if (!resolved_klass.is_null()) {
561562
resolved_klass = resolved_klass->array_klass(ndim, CHECK_NULL);
562563
}
563564
} else {
564565
resolved_klass = TypeArrayKlass::cast(Universe::typeArrayKlassObj(ss.type()))->array_klass(ndim, CHECK_NULL);
565566
}
566567
} else {
567-
resolved_klass = SystemDictionary::find(class_name, class_loader, protection_domain, CHECK_NULL);
568+
resolved_klass = SystemDictionary::find_instance_klass(class_name,
569+
class_loader,
570+
protection_domain);
568571
}
569572
}
570573
JVMCIObject result = JVMCIENV->get_jvmci_type(resolved_klass, JVMCI_CHECK_NULL);

src/hotspot/share/jvmci/jvmciRuntime.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1162,7 +1162,7 @@ Klass* JVMCIRuntime::get_klass_by_name_impl(Klass*& accessing_klass,
11621162
if (!require_local) {
11631163
found_klass = SystemDictionary::find_constrained_instance_or_array_klass(sym, loader, CHECK_NULL);
11641164
} else {
1165-
found_klass = SystemDictionary::find_instance_or_array_klass(sym, loader, domain, CHECK_NULL);
1165+
found_klass = SystemDictionary::find_instance_or_array_klass(sym, loader, domain);
11661166
}
11671167
}
11681168

src/hotspot/share/oops/constantPool.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ Klass* ConstantPool::klass_at_if_loaded(const constantPoolHandle& this_cp, int w
582582
oop protection_domain = this_cp->pool_holder()->protection_domain();
583583
Handle h_prot (thread, protection_domain);
584584
Handle h_loader (thread, loader);
585-
Klass* k = SystemDictionary::find(name, h_loader, h_prot, thread);
585+
Klass* k = SystemDictionary::find_instance_klass(name, h_loader, h_prot);
586586

587587
// Avoid constant pool verification at a safepoint, which takes the Module_lock.
588588
if (k != NULL && !SafepointSynchronize::is_at_safepoint()) {

src/hotspot/share/oops/method.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ bool Method::is_klass_loaded_by_klass_index(int klass_index) const {
891891
Symbol* klass_name = constants()->klass_name_at(klass_index);
892892
Handle loader(thread, method_holder()->class_loader());
893893
Handle prot (thread, method_holder()->protection_domain());
894-
return SystemDictionary::find(klass_name, loader, prot, thread) != NULL;
894+
return SystemDictionary::find_instance_klass(klass_name, loader, prot) != NULL;
895895
} else {
896896
return true;
897897
}

src/hotspot/share/prims/jvm.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -1070,8 +1070,7 @@ JVM_ENTRY(jclass, JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)
10701070
Handle h_loader(THREAD, JNIHandles::resolve(loader));
10711071
Klass* k = SystemDictionary::find_instance_or_array_klass(klass_name,
10721072
h_loader,
1073-
Handle(),
1074-
CHECK_NULL);
1073+
Handle());
10751074
#if INCLUDE_CDS
10761075
if (k == NULL) {
10771076
// If the class is not already loaded, try to see if it's in the shared

src/hotspot/share/runtime/deoptimization.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -903,12 +903,11 @@ Deoptimization::DeoptAction Deoptimization::_unloaded_action
903903
template<typename CacheType>
904904
class BoxCacheBase : public CHeapObj<mtCompiler> {
905905
protected:
906-
static InstanceKlass* find_cache_klass(Symbol* klass_name, TRAPS) {
906+
static InstanceKlass* find_cache_klass(Symbol* klass_name) {
907907
ResourceMark rm;
908908
char* klass_name_str = klass_name->as_C_string();
909-
Klass* k = SystemDictionary::find(klass_name, Handle(), Handle(), THREAD);
910-
guarantee(k != NULL, "%s must be loaded", klass_name_str);
911-
InstanceKlass* ik = InstanceKlass::cast(k);
909+
InstanceKlass* ik = SystemDictionary::find_instance_klass(klass_name, Handle(), Handle());
910+
guarantee(ik != NULL, "%s must be loaded", klass_name_str);
912911
guarantee(ik->is_initialized(), "%s must be initialized", klass_name_str);
913912
CacheType::compute_offsets(ik);
914913
return ik;
@@ -922,7 +921,7 @@ template<typename PrimitiveType, typename CacheType, typename BoxType> class Box
922921
protected:
923922
static BoxCache<PrimitiveType, CacheType, BoxType> *_singleton;
924923
BoxCache(Thread* thread) {
925-
InstanceKlass* ik = BoxCacheBase<CacheType>::find_cache_klass(CacheType::symbol(), thread);
924+
InstanceKlass* ik = BoxCacheBase<CacheType>::find_cache_klass(CacheType::symbol());
926925
objArrayOop cache = CacheType::cache(ik);
927926
assert(cache->length() > 0, "Empty cache");
928927
_low = BoxType::value(cache->obj_at(0));
@@ -978,7 +977,7 @@ class BooleanBoxCache : public BoxCacheBase<java_lang_Boolean> {
978977
protected:
979978
static BooleanBoxCache *_singleton;
980979
BooleanBoxCache(Thread *thread) {
981-
InstanceKlass* ik = find_cache_klass(java_lang_Boolean::symbol(), thread);
980+
InstanceKlass* ik = find_cache_klass(java_lang_Boolean::symbol());
982981
_true_cache = JNIHandles::make_global(Handle(thread, java_lang_Boolean::get_TRUE(ik)));
983982
_false_cache = JNIHandles::make_global(Handle(thread, java_lang_Boolean::get_FALSE(ik)));
984983
}

src/hotspot/share/runtime/signature.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -393,7 +393,7 @@ Klass* SignatureStream::as_klass(Handle class_loader, Handle protection_domain,
393393
} else if (failure_mode == CachedOrNull) {
394394
NoSafepointVerifier nsv; // no loading, now, we mean it!
395395
assert(!HAS_PENDING_EXCEPTION, "");
396-
k = SystemDictionary::find(name, class_loader, protection_domain, CHECK_NULL);
396+
k = SystemDictionary::find_instance_klass(name, class_loader, protection_domain);
397397
// SD::find does not trigger loading, so there should be no throws
398398
// Still, bad things can happen, so we CHECK_NULL and ask callers
399399
// to do likewise.

0 commit comments

Comments
 (0)