# HG changeset patch # User sla # Date 1351771547 -3600 # Node ID aec758622b4b602e50449350cd0184907bcd1cdd # Parent a171bf7d0c99242d257597d76bff6a8e82a5b424 8002078: hs_err_pid file should report full JDK version string Reviewed-by: dholmes, sspitsyn, kmo diff -r a171bf7d0c99 -r aec758622b4b hotspot/src/share/vm/classfile/vmSymbols.hpp --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Mon Oct 29 16:39:14 2012 -0700 +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Thu Nov 01 13:05:47 2012 +0100 @@ -114,6 +114,7 @@ /* Java runtime version access */ \ template(sun_misc_Version, "sun/misc/Version") \ template(java_runtime_name_name, "java_runtime_name") \ + template(java_runtime_version_name, "java_runtime_version") \ \ /* class file format tags */ \ template(tag_source_file, "SourceFile") \ diff -r a171bf7d0c99 -r aec758622b4b hotspot/src/share/vm/runtime/java.cpp --- a/hotspot/src/share/vm/runtime/java.cpp Mon Oct 29 16:39:14 2012 -0700 +++ b/hotspot/src/share/vm/runtime/java.cpp Thu Nov 01 13:05:47 2012 +0100 @@ -688,6 +688,7 @@ JDK_Version JDK_Version::_current; const char* JDK_Version::_runtime_name; +const char* JDK_Version::_runtime_version; void JDK_Version::initialize() { jdk_version_info info; diff -r a171bf7d0c99 -r aec758622b4b hotspot/src/share/vm/runtime/java.hpp --- a/hotspot/src/share/vm/runtime/java.hpp Mon Oct 29 16:39:14 2012 -0700 +++ b/hotspot/src/share/vm/runtime/java.hpp Thu Nov 01 13:05:47 2012 +0100 @@ -75,6 +75,7 @@ static JDK_Version _current; static const char* _runtime_name; + static const char* _runtime_version; // In this class, we promote the minor version of release to be the // major version for releases >= 5 in anticipation of the JDK doing the @@ -189,6 +190,13 @@ _runtime_name = name; } + static const char* runtime_version() { + return _runtime_version; + } + static void set_runtime_version(const char* version) { + _runtime_version = version; + } + // Convenience methods for queries on the current major/minor version static bool is_jdk12x_version() { return current().compare_major(2) == 0; diff -r a171bf7d0c99 -r aec758622b4b hotspot/src/share/vm/runtime/thread.cpp --- a/hotspot/src/share/vm/runtime/thread.cpp Mon Oct 29 16:39:14 2012 -0700 +++ b/hotspot/src/share/vm/runtime/thread.cpp Thu Nov 01 13:05:47 2012 +0100 @@ -1042,6 +1042,7 @@ } char java_runtime_name[128] = ""; +char java_runtime_version[128] = ""; // extract the JRE name from sun.misc.Version.java_runtime_name static const char* get_java_runtime_name(TRAPS) { @@ -1064,6 +1065,27 @@ } } +// extract the JRE version from sun.misc.Version.java_runtime_version +static const char* get_java_runtime_version(TRAPS) { + Klass* k = SystemDictionary::find(vmSymbols::sun_misc_Version(), + Handle(), Handle(), CHECK_AND_CLEAR_NULL); + fieldDescriptor fd; + bool found = k != NULL && + InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_version_name(), + vmSymbols::string_signature(), &fd); + if (found) { + oop name_oop = k->java_mirror()->obj_field(fd.offset()); + if (name_oop == NULL) + return NULL; + const char* name = java_lang_String::as_utf8_string(name_oop, + java_runtime_version, + sizeof(java_runtime_version)); + return name; + } else { + return NULL; + } +} + // General purpose hook into Java code, run once when the VM is initialized. // The Java library method itself may be changed independently from the VM. static void call_postVMInitHook(TRAPS) { @@ -3473,6 +3495,7 @@ // get the Java runtime name after java.lang.System is initialized JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); + JDK_Version::set_runtime_version(get_java_runtime_version(THREAD)); } else { warning("java.lang.System not initialized"); } diff -r a171bf7d0c99 -r aec758622b4b hotspot/src/share/vm/utilities/vmError.cpp --- a/hotspot/src/share/vm/utilities/vmError.cpp Mon Oct 29 16:39:14 2012 -0700 +++ b/hotspot/src/share/vm/utilities/vmError.cpp Thu Nov 01 13:05:47 2012 +0100 @@ -453,7 +453,9 @@ JDK_Version::current().to_string(buf, sizeof(buf)); const char* runtime_name = JDK_Version::runtime_name() != NULL ? JDK_Version::runtime_name() : ""; - st->print_cr("# JRE version: %s (%s)", runtime_name, buf); + const char* runtime_version = JDK_Version::runtime_version() != NULL ? + JDK_Version::runtime_version() : ""; + st->print_cr("# JRE version: %s (%s) (build %s)", runtime_name, buf, runtime_version); st->print_cr("# Java VM: %s (%s %s %s %s)", Abstract_VM_Version::vm_name(), Abstract_VM_Version::vm_release(),