71 void *lib_handle = os::native_java_library();
72 void *func = os::dll_lookup(lib_handle, "VerifyClassCodesForMajorVersion");
73 OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func);
74 if (func == NULL) {
75 OrderAccess::release_store(&_is_new_verify_byte_codes_fn, false);
76 func = os::dll_lookup(lib_handle, "VerifyClassCodes");
77 OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func);
78 }
79 }
80 return (void*)_verify_byte_codes_fn;
81 }
82
83
84 // Methods in Verifier
85
86 bool Verifier::should_verify_for(oop class_loader, bool should_verify_class) {
87 return (class_loader == NULL || !should_verify_class) ?
88 BytecodeVerificationLocal : BytecodeVerificationRemote;
89 }
90
91 bool Verifier::relax_verify_for(oop loader) {
92 bool trusted = java_lang_ClassLoader::is_trusted_loader(loader);
93 bool need_verify =
94 // verifyAll
95 (BytecodeVerificationLocal && BytecodeVerificationRemote) ||
96 // verifyRemote
97 (!BytecodeVerificationLocal && BytecodeVerificationRemote && !trusted);
98 return !need_verify;
99 }
100
101 void Verifier::trace_class_resolution(Klass* resolve_class, InstanceKlass* verify_class) {
102 assert(verify_class != NULL, "Unexpected null verify_class");
103 ResourceMark rm;
104 Symbol* s = verify_class->source_file_name();
105 const char* source_file = (s != NULL ? s->as_C_string() : NULL);
106 const char* verify = verify_class->external_name();
107 const char* resolve = resolve_class->external_name();
108 // print in a single call to reduce interleaving between threads
109 if (source_file != NULL) {
110 log_debug(class, resolve)("%s %s %s (verification)", verify, resolve, source_file);
111 } else {
|
71 void *lib_handle = os::native_java_library();
72 void *func = os::dll_lookup(lib_handle, "VerifyClassCodesForMajorVersion");
73 OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func);
74 if (func == NULL) {
75 OrderAccess::release_store(&_is_new_verify_byte_codes_fn, false);
76 func = os::dll_lookup(lib_handle, "VerifyClassCodes");
77 OrderAccess::release_store_ptr(&_verify_byte_codes_fn, func);
78 }
79 }
80 return (void*)_verify_byte_codes_fn;
81 }
82
83
84 // Methods in Verifier
85
86 bool Verifier::should_verify_for(oop class_loader, bool should_verify_class) {
87 return (class_loader == NULL || !should_verify_class) ?
88 BytecodeVerificationLocal : BytecodeVerificationRemote;
89 }
90
91 bool Verifier::relax_access_for(oop loader) {
92 bool trusted = java_lang_ClassLoader::is_trusted_loader(loader);
93 bool need_verify =
94 // verifyAll
95 (BytecodeVerificationLocal && BytecodeVerificationRemote) ||
96 // verifyRemote
97 (!BytecodeVerificationLocal && BytecodeVerificationRemote && !trusted);
98 return !need_verify;
99 }
100
101 void Verifier::trace_class_resolution(Klass* resolve_class, InstanceKlass* verify_class) {
102 assert(verify_class != NULL, "Unexpected null verify_class");
103 ResourceMark rm;
104 Symbol* s = verify_class->source_file_name();
105 const char* source_file = (s != NULL ? s->as_C_string() : NULL);
106 const char* verify = verify_class->external_name();
107 const char* resolve = resolve_class->external_name();
108 // print in a single call to reduce interleaving between threads
109 if (source_file != NULL) {
110 log_debug(class, resolve)("%s %s %s (verification)", verify, resolve, source_file);
111 } else {
|