diff -r eda4c6456efb -r bccff579c2ff src/hotspot/share/classfile/javaClasses.cpp --- a/src/hotspot/share/classfile/javaClasses.cpp Wed Jan 09 10:59:37 2019 -0800 +++ b/src/hotspot/share/classfile/javaClasses.cpp Wed Jan 09 20:28:16 2019 +0100 @@ -1344,6 +1344,16 @@ java_class->obj_field_put(_module_offset, module); } +oop java_lang_Class::name(Handle java_class, TRAPS) { + assert(_name_offset != 0, "must be set"); + oop o = java_class->obj_field(_name_offset); + if (o == NULL) { + o = StringTable::intern(java_lang_Class::as_external_name(java_class()), THREAD); + java_class->obj_field_put(_name_offset, o); + } + return o; +} + oop java_lang_Class::create_basic_type_mirror(const char* basic_type_name, BasicType type, TRAPS) { // This should be improved by adding a field at the Java level or by // introducing a new VM klass (see comment in ClassFileParser) @@ -1504,7 +1514,8 @@ macro(classRedefinedCount_offset, k, "classRedefinedCount", int_signature, false) ; \ macro(_class_loader_offset, k, "classLoader", classloader_signature, false); \ macro(_component_mirror_offset, k, "componentType", class_signature, false); \ - macro(_module_offset, k, "module", module_signature, false) + macro(_module_offset, k, "module", module_signature, false); \ + macro(_name_offset, k, "name", string_signature, false); \ void java_lang_Class::compute_offsets() { if (offsets_computed) { @@ -2550,12 +2561,14 @@ int version, int bci, Symbol* name, TRAPS) { assert(element->is_a(SystemDictionary::StackTraceElement_klass()), "sanity check"); + ResourceMark rm(THREAD); + HandleMark hm(THREAD); + // Fill in class name - ResourceMark rm(THREAD); - const char* str = holder->external_name(); - oop classname = StringTable::intern(str, CHECK); + Handle java_class(THREAD, holder->java_mirror()); + oop classname = java_lang_Class::name(java_class, CHECK); java_lang_StackTraceElement::set_declaringClass(element(), classname); - java_lang_StackTraceElement::set_declaringClassObject(element(), holder->java_mirror()); + java_lang_StackTraceElement::set_declaringClassObject(element(), java_class()); oop loader = holder->class_loader(); if (loader != NULL) { @@ -3966,6 +3979,7 @@ int java_lang_Class::_component_mirror_offset; int java_lang_Class::_init_lock_offset; int java_lang_Class::_signers_offset; +int java_lang_Class::_name_offset; GrowableArray* java_lang_Class::_fixup_mirror_list = NULL; GrowableArray* java_lang_Class::_fixup_module_field_list = NULL; int java_lang_Throwable::backtrace_offset;