hotspot/src/share/vm/runtime/vm_version.cpp
changeset 24238 641b2b1b0163
parent 22828 17ecb098bc1e
child 24424 2658d7834c6e
equal deleted inserted replaced
24237:7b210ef8c830 24238:641b2b1b0163
    53 int Abstract_VM_Version::_reserve_for_allocation_prefetch = 0;
    53 int Abstract_VM_Version::_reserve_for_allocation_prefetch = 0;
    54 
    54 
    55 #ifndef HOTSPOT_RELEASE_VERSION
    55 #ifndef HOTSPOT_RELEASE_VERSION
    56   #error HOTSPOT_RELEASE_VERSION must be defined
    56   #error HOTSPOT_RELEASE_VERSION must be defined
    57 #endif
    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 
    58 #ifndef JRE_RELEASE_VERSION
    72 #ifndef JRE_RELEASE_VERSION
    59   #error JRE_RELEASE_VERSION must be defined
    73   #error JRE_RELEASE_VERSION must be defined
    60 #endif
    74 #endif
    61 #ifndef HOTSPOT_BUILD_TARGET
    75 #ifndef HOTSPOT_BUILD_TARGET
    62   #error HOTSPOT_BUILD_TARGET must be defined
    76   #error HOTSPOT_BUILD_TARGET must be defined
    66   #define VM_RELEASE HOTSPOT_RELEASE_VERSION
    80   #define VM_RELEASE HOTSPOT_RELEASE_VERSION
    67 #else
    81 #else
    68   #define VM_RELEASE HOTSPOT_RELEASE_VERSION "-" HOTSPOT_BUILD_TARGET
    82   #define VM_RELEASE HOTSPOT_RELEASE_VERSION "-" HOTSPOT_BUILD_TARGET
    69 #endif
    83 #endif
    70 
    84 
    71 // HOTSPOT_RELEASE_VERSION must follow the release version naming convention
    85 // HOTSPOT_RELEASE_VERSION follows the JDK release version naming convention
    72 // <major_ver>.<minor_ver>-b<nn>[-<identifier>][-<debug_target>]
    86 // <major_ver>.<minor_ver>.<micro_ver>[-<identifier>][-<debug_target>][-b<nn>]
    73 int Abstract_VM_Version::_vm_major_version = 0;
    87 int Abstract_VM_Version::_vm_major_version = 0;
    74 int Abstract_VM_Version::_vm_minor_version = 0;
    88 int Abstract_VM_Version::_vm_minor_version = 0;
       
    89 int Abstract_VM_Version::_vm_micro_version = 0;
    75 int Abstract_VM_Version::_vm_build_number = 0;
    90 int Abstract_VM_Version::_vm_build_number = 0;
    76 bool Abstract_VM_Version::_initialized = false;
    91 bool Abstract_VM_Version::_initialized = false;
    77 int Abstract_VM_Version::_parallel_worker_threads = 0;
    92 int Abstract_VM_Version::_parallel_worker_threads = 0;
    78 bool Abstract_VM_Version::_parallel_worker_threads_initialized = false;
    93 bool Abstract_VM_Version::_parallel_worker_threads_initialized = false;
    79 
    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 
    80 void Abstract_VM_Version::initialize() {
   111 void Abstract_VM_Version::initialize() {
    81   if (_initialized) {
   112   if (_initialized) {
    82     return;
   113     return;
    83   }
   114   }
    84   char* vm_version = os::strdup(HOTSPOT_RELEASE_VERSION);
   115 
    85 
   116   set_version_field(&_vm_major_version, JDK_MAJOR_VERSION, "bad major version");
    86   // Expecting the next vm_version format:
   117   set_version_field(&_vm_minor_version, JDK_MINOR_VERSION, "bad minor version");
    87   // <major_ver>.<minor_ver>-b<nn>[-<identifier>]
   118   set_version_field(&_vm_micro_version, JDK_MICRO_VERSION, "bad micro version");
    88   char* vm_major_ver = vm_version;
   119   int offset = (JDK_BUILD_NUMBER != NULL && JDK_BUILD_NUMBER[0] == 'b') ? 1 : 0;
    89   assert(isdigit(vm_major_ver[0]),"wrong vm major version number");
   120   set_version_field(&_vm_build_number, JDK_BUILD_NUMBER + offset,
    90   char* vm_minor_ver = strchr(vm_major_ver, '.');
   121                     "bad build number");
    91   assert(vm_minor_ver != NULL && isdigit(vm_minor_ver[1]),"wrong vm minor version number");
   122 
    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;
   123   _initialized = true;
   105 }
   124 }
   106 
   125 
   107 #if defined(_LP64)
   126 #if defined(_LP64)
   108   #define VMLP "64-Bit "
   127   #define VMLP "64-Bit "
   274 }
   293 }
   275 
   294 
   276 unsigned int Abstract_VM_Version::jvm_version() {
   295 unsigned int Abstract_VM_Version::jvm_version() {
   277   return ((Abstract_VM_Version::vm_major_version() & 0xFF) << 24) |
   296   return ((Abstract_VM_Version::vm_major_version() & 0xFF) << 24) |
   278          ((Abstract_VM_Version::vm_minor_version() & 0xFF) << 16) |
   297          ((Abstract_VM_Version::vm_minor_version() & 0xFF) << 16) |
       
   298          ((Abstract_VM_Version::vm_micro_version() & 0xFF) << 8) |
   279          (Abstract_VM_Version::vm_build_number() & 0xFF);
   299          (Abstract_VM_Version::vm_build_number() & 0xFF);
   280 }
   300 }
   281 
   301 
   282 
   302 
   283 void VM_Version_init() {
   303 void VM_Version_init() {