--- old/src/hotspot/share/classfile/javaClasses.cpp 2018-04-10 16:58:48.425013000 +0200 +++ new/src/hotspot/share/classfile/javaClasses.cpp 2018-04-10 16:58:47.976981000 +0200 @@ -4126,7 +4126,7 @@ ss.print("\"%s\" (instance of %s", name, loader->klass()->external_name()); seperator = ", "; } else { - ss.print("%s", loader->klass()->external_name()); + ss.print("instance of %s", loader->klass()->external_name()); seperator = " ("; } --- old/src/hotspot/share/classfile/systemDictionary.cpp 2018-04-10 16:58:49.768142000 +0200 +++ new/src/hotspot/share/classfile/systemDictionary.cpp 2018-04-10 16:58:49.321073000 +0200 @@ -2170,7 +2170,6 @@ if ((defining == true) || (k != check)) { linkage_error1 = "loader "; linkage_error2 = " attempted duplicate class definition for "; - guarantee(check->class_loader() == class_loader(), "Per construction. Else report the other loader."); } else { return; } @@ -3107,18 +3106,10 @@ NOT_PRODUCT(SystemDictionary::verify()); } -// Return string to give helpful intformation about a classloader. // Caller needs ResourceMark. const char* SystemDictionary::loader_name(const oop loader) { -#if INCLUDE_CDS - if (DumpSharedSpaces) { - // Describe_external() calls assert(is_instance...) in various places, - // which may fail with DumpSharedSpaces. - if ((loader) == NULL) return ""; - return InstanceKlass::cast((loader)->klass())->name()->as_C_string(); - } -#endif - return java_lang_ClassLoader::describe_external(loader); + return ((loader) == NULL ? "" : + InstanceKlass::cast((loader)->klass())->name()->as_C_string()); } // caller needs ResourceMark --- old/src/hotspot/share/oops/klassVtable.cpp 2018-04-10 16:58:51.497259000 +0200 +++ new/src/hotspot/share/oops/klassVtable.cpp 2018-04-10 16:58:51.040231000 +0200 @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "jvm.h" +#include "classfile/javaClasses.hpp" #include "classfile/systemDictionary.hpp" #include "classfile/vmSymbols.hpp" #include "interpreter/linkResolver.hpp" @@ -509,17 +510,17 @@ "selected method's type %s, and the class loader %s for its super " "type %s have different Class objects for the type %s used in the signature"; const char* curr_class = klass->external_name(); - const char* sig = target_method()->name_and_sig_as_C_string(); + const char* method = target_method()->name_and_sig_as_C_string(); const char* loader1 = java_lang_ClassLoader::describe_external(target_loader()); const char* sel_class = target_klass->external_name(); const char* loader2 = java_lang_ClassLoader::describe_external(super_loader()); const char* super_class = super_klass->external_name(); - char* failed_type_name = failed_type_symbol->as_C_string(); - size_t buflen = strlen(msg) + strlen(curr_class) + strlen(sig) + + const char* failed_type_name = failed_type_symbol->as_klass_external_name(); + size_t buflen = strlen(msg) + strlen(curr_class) + strlen(method) + strlen(loader1) + strlen(sel_class) + strlen(loader2) + strlen(super_class) + strlen(failed_type_name); char* buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, buflen); - jio_snprintf(buf, buflen, msg, curr_class, sig, loader1, sel_class, loader2, + jio_snprintf(buf, buflen, msg, curr_class, method, loader1, sel_class, loader2, super_class, failed_type_name); THROW_MSG_(vmSymbols::java_lang_LinkageError(), buf, false); } @@ -1245,7 +1246,7 @@ const char* iface = InstanceKlass::cast(interf)->external_name(); const char* loader2 = java_lang_ClassLoader::describe_external(method_holder_loader()); const char* mclass = target()->method_holder()->external_name(); - const char* failed_type_name = failed_type_symbol->as_C_string(); + const char* failed_type_name = failed_type_symbol->as_klass_external_name(); size_t buflen = strlen(msg) + strlen(current) + strlen(sig) + strlen(loader1) + strlen(iface) + strlen(loader2) + strlen(mclass) + strlen(failed_type_name);