src/share/vm/runtime/vm_version.cpp

Print this page
rev 6314 : 8030011: Update Hotspot version string output
Reviewed-by: dholmes, jcoomes, kvn


  38 #ifdef TARGET_ARCH_arm
  39 # include "vm_version_arm.hpp"
  40 #endif
  41 #ifdef TARGET_ARCH_ppc
  42 # include "vm_version_ppc.hpp"
  43 #endif
  44 
  45 const char* Abstract_VM_Version::_s_vm_release = Abstract_VM_Version::vm_release();
  46 const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Version::internal_vm_info_string();
  47 bool Abstract_VM_Version::_supports_cx8 = false;
  48 bool Abstract_VM_Version::_supports_atomic_getset4 = false;
  49 bool Abstract_VM_Version::_supports_atomic_getset8 = false;
  50 bool Abstract_VM_Version::_supports_atomic_getadd4 = false;
  51 bool Abstract_VM_Version::_supports_atomic_getadd8 = false;
  52 unsigned int Abstract_VM_Version::_logical_processors_per_package = 1U;
  53 int Abstract_VM_Version::_reserve_for_allocation_prefetch = 0;
  54 
  55 #ifndef HOTSPOT_RELEASE_VERSION
  56   #error HOTSPOT_RELEASE_VERSION must be defined
  57 #endif














  58 #ifndef JRE_RELEASE_VERSION
  59   #error JRE_RELEASE_VERSION must be defined
  60 #endif
  61 #ifndef HOTSPOT_BUILD_TARGET
  62   #error HOTSPOT_BUILD_TARGET must be defined
  63 #endif
  64 
  65 #ifdef PRODUCT
  66   #define VM_RELEASE HOTSPOT_RELEASE_VERSION
  67 #else
  68   #define VM_RELEASE HOTSPOT_RELEASE_VERSION "-" HOTSPOT_BUILD_TARGET
  69 #endif
  70 
  71 // HOTSPOT_RELEASE_VERSION must follow the release version naming convention
  72 // <major_ver>.<minor_ver>-b<nn>[-<identifier>][-<debug_target>]
  73 int Abstract_VM_Version::_vm_major_version = 0;
  74 int Abstract_VM_Version::_vm_minor_version = 0;

  75 int Abstract_VM_Version::_vm_build_number = 0;
  76 bool Abstract_VM_Version::_initialized = false;
  77 int Abstract_VM_Version::_parallel_worker_threads = 0;
  78 bool Abstract_VM_Version::_parallel_worker_threads_initialized = false;
  79 
















  80 void Abstract_VM_Version::initialize() {
  81   if (_initialized) {
  82     return;
  83   }
  84   char* vm_version = os::strdup(HOTSPOT_RELEASE_VERSION);
  85 
  86   // Expecting the next vm_version format:
  87   // <major_ver>.<minor_ver>-b<nn>[-<identifier>]
  88   char* vm_major_ver = vm_version;
  89   assert(isdigit(vm_major_ver[0]),"wrong vm major version number");
  90   char* vm_minor_ver = strchr(vm_major_ver, '.');
  91   assert(vm_minor_ver != NULL && isdigit(vm_minor_ver[1]),"wrong vm minor version number");
  92   vm_minor_ver[0] = '\0'; // terminate vm_major_ver
  93   vm_minor_ver += 1;
  94   char* vm_build_num = strchr(vm_minor_ver, '-');
  95   assert(vm_build_num != NULL && vm_build_num[1] == 'b' && isdigit(vm_build_num[2]),"wrong vm build number");
  96   vm_build_num[0] = '\0'; // terminate vm_minor_ver
  97   vm_build_num += 2;
  98 
  99   _vm_major_version = atoi(vm_major_ver);
 100   _vm_minor_version = atoi(vm_minor_ver);
 101   _vm_build_number  = atoi(vm_build_num);
 102 
 103   os::free(vm_version);
 104   _initialized = true;
 105 }
 106 
 107 #if defined(_LP64)
 108   #define VMLP "64-Bit "
 109 #else
 110   #define VMLP ""
 111 #endif
 112 
 113 #ifndef VMTYPE
 114   #ifdef TIERED
 115     #define VMTYPE "Server"
 116   #else // TIERED
 117   #ifdef ZERO
 118   #ifdef SHARK
 119     #define VMTYPE "Shark"
 120   #else // SHARK
 121     #define VMTYPE "Zero"
 122   #endif // SHARK
 123   #else // ZERO


 259       #define FLOAT_ARCH_STR "-hflt"
 260     #else
 261       #define FLOAT_ARCH_STR ""
 262     #endif
 263   #else
 264     #define FLOAT_ARCH_STR XSTR(FLOAT_ARCH)
 265   #endif
 266 
 267   return VMNAME " (" VM_RELEASE ") for " OS "-" CPU FLOAT_ARCH_STR
 268          " JRE (" JRE_RELEASE_VERSION "), built on " __DATE__ " " __TIME__
 269          " by " XSTR(HOTSPOT_BUILD_USER) " with " HOTSPOT_BUILD_COMPILER;
 270 }
 271 
 272 const char *Abstract_VM_Version::vm_build_user() {
 273   return HOTSPOT_BUILD_USER;
 274 }
 275 
 276 unsigned int Abstract_VM_Version::jvm_version() {
 277   return ((Abstract_VM_Version::vm_major_version() & 0xFF) << 24) |
 278          ((Abstract_VM_Version::vm_minor_version() & 0xFF) << 16) |

 279          (Abstract_VM_Version::vm_build_number() & 0xFF);
 280 }
 281 
 282 
 283 void VM_Version_init() {
 284   VM_Version::initialize();
 285 
 286 #ifndef PRODUCT
 287   if (PrintMiscellaneous && Verbose) {
 288     os::print_cpu_info(tty);
 289   }
 290 #endif
 291 }
 292 
 293 unsigned int Abstract_VM_Version::nof_parallel_worker_threads(
 294                                                       unsigned int num,
 295                                                       unsigned int den,
 296                                                       unsigned int switch_pt) {
 297   if (FLAG_IS_DEFAULT(ParallelGCThreads)) {
 298     assert(ParallelGCThreads == 0, "Default ParallelGCThreads is not 0");




  38 #ifdef TARGET_ARCH_arm
  39 # include "vm_version_arm.hpp"
  40 #endif
  41 #ifdef TARGET_ARCH_ppc
  42 # include "vm_version_ppc.hpp"
  43 #endif
  44 
  45 const char* Abstract_VM_Version::_s_vm_release = Abstract_VM_Version::vm_release();
  46 const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Version::internal_vm_info_string();
  47 bool Abstract_VM_Version::_supports_cx8 = false;
  48 bool Abstract_VM_Version::_supports_atomic_getset4 = false;
  49 bool Abstract_VM_Version::_supports_atomic_getset8 = false;
  50 bool Abstract_VM_Version::_supports_atomic_getadd4 = false;
  51 bool Abstract_VM_Version::_supports_atomic_getadd8 = false;
  52 unsigned int Abstract_VM_Version::_logical_processors_per_package = 1U;
  53 int Abstract_VM_Version::_reserve_for_allocation_prefetch = 0;
  54 
  55 #ifndef HOTSPOT_RELEASE_VERSION
  56   #error HOTSPOT_RELEASE_VERSION must be defined
  57 #endif
  58 
  59 #ifndef JDK_MAJOR_VERSION
  60   #error JDK_MAJOR_VERSION must be defined
  61 #endif
  62 #ifndef JDK_MINOR_VERSION
  63   #error JDK_MINOR_VERSION must be defined
  64 #endif
  65 #ifndef JDK_MICRO_VERSION
  66   #error JDK_MICRO_VERSION must be defined
  67 #endif
  68 #ifndef JDK_BUILD_NUMBER
  69   #error JDK_BUILD_NUMBER must be defined
  70 #endif
  71 
  72 #ifndef JRE_RELEASE_VERSION
  73   #error JRE_RELEASE_VERSION must be defined
  74 #endif
  75 #ifndef HOTSPOT_BUILD_TARGET
  76   #error HOTSPOT_BUILD_TARGET must be defined
  77 #endif
  78 
  79 #ifdef PRODUCT
  80   #define VM_RELEASE HOTSPOT_RELEASE_VERSION
  81 #else
  82   #define VM_RELEASE HOTSPOT_RELEASE_VERSION "-" HOTSPOT_BUILD_TARGET
  83 #endif
  84 
  85 // HOTSPOT_RELEASE_VERSION follows the JDK release version naming convention
  86 // <major_ver>.<minor_ver>.<micro_ver>[-<identifier>][-<debug_target>][-b<nn>]
  87 int Abstract_VM_Version::_vm_major_version = 0;
  88 int Abstract_VM_Version::_vm_minor_version = 0;
  89 int Abstract_VM_Version::_vm_micro_version = 0;
  90 int Abstract_VM_Version::_vm_build_number = 0;
  91 bool Abstract_VM_Version::_initialized = false;
  92 int Abstract_VM_Version::_parallel_worker_threads = 0;
  93 bool Abstract_VM_Version::_parallel_worker_threads_initialized = false;
  94 
  95 #ifdef ASSERT
  96 static void assert_digits(const char * s, const char * message) {
  97   for (int i = 0; s[i] != '\0'; i++) {
  98     assert(isdigit(s[i]), message);
  99   }
 100 }
 101 #endif
 102 
 103 static void set_version_field(int * version_field, const char * version_str,
 104                               const char * const assert_msg) {
 105   if (version_str != NULL && *version_str != '\0') {
 106     DEBUG_ONLY(assert_digits(version_str, assert_msg));
 107     *version_field = atoi(version_str);
 108   }
 109 }
 110 
 111 void Abstract_VM_Version::initialize() {
 112   if (_initialized) {
 113     return;
 114   }

 115 
 116   set_version_field(&_vm_major_version, JDK_MAJOR_VERSION,  "wrong vm major version number");
 117   set_version_field(&_vm_minor_version, JDK_MINOR_VERSION,  "wrong vm minor version number");
 118   set_version_field(&_vm_micro_version, JDK_MICRO_VERSION,  "wrong vm micro version number");
 119   int offset = (JDK_BUILD_NUMBER != NULL && JDK_BUILD_NUMBER[0] == 'b') ? 1 : 0;
 120   set_version_field(&_vm_build_number, JDK_BUILD_NUMBER + offset, "bad build number");











 121 

 122   _initialized = true;
 123 }
 124 
 125 #if defined(_LP64)
 126   #define VMLP "64-Bit "
 127 #else
 128   #define VMLP ""
 129 #endif
 130 
 131 #ifndef VMTYPE
 132   #ifdef TIERED
 133     #define VMTYPE "Server"
 134   #else // TIERED
 135   #ifdef ZERO
 136   #ifdef SHARK
 137     #define VMTYPE "Shark"
 138   #else // SHARK
 139     #define VMTYPE "Zero"
 140   #endif // SHARK
 141   #else // ZERO


 277       #define FLOAT_ARCH_STR "-hflt"
 278     #else
 279       #define FLOAT_ARCH_STR ""
 280     #endif
 281   #else
 282     #define FLOAT_ARCH_STR XSTR(FLOAT_ARCH)
 283   #endif
 284 
 285   return VMNAME " (" VM_RELEASE ") for " OS "-" CPU FLOAT_ARCH_STR
 286          " JRE (" JRE_RELEASE_VERSION "), built on " __DATE__ " " __TIME__
 287          " by " XSTR(HOTSPOT_BUILD_USER) " with " HOTSPOT_BUILD_COMPILER;
 288 }
 289 
 290 const char *Abstract_VM_Version::vm_build_user() {
 291   return HOTSPOT_BUILD_USER;
 292 }
 293 
 294 unsigned int Abstract_VM_Version::jvm_version() {
 295   return ((Abstract_VM_Version::vm_major_version() & 0xFF) << 24) |
 296          ((Abstract_VM_Version::vm_minor_version() & 0xFF) << 16) |
 297          ((Abstract_VM_Version::vm_micro_version() & 0xFF) << 8) |
 298          (Abstract_VM_Version::vm_build_number() & 0xFF);
 299 }
 300 
 301 
 302 void VM_Version_init() {
 303   VM_Version::initialize();
 304 
 305 #ifndef PRODUCT
 306   if (PrintMiscellaneous && Verbose) {
 307     os::print_cpu_info(tty);
 308   }
 309 #endif
 310 }
 311 
 312 unsigned int Abstract_VM_Version::nof_parallel_worker_threads(
 313                                                       unsigned int num,
 314                                                       unsigned int den,
 315                                                       unsigned int switch_pt) {
 316   if (FLAG_IS_DEFAULT(ParallelGCThreads)) {
 317     assert(ParallelGCThreads == 0, "Default ParallelGCThreads is not 0");