1088 return thread_oop(); |
1088 return thread_oop(); |
1089 } |
1089 } |
1090 |
1090 |
1091 char java_runtime_name[128] = ""; |
1091 char java_runtime_name[128] = ""; |
1092 char java_runtime_version[128] = ""; |
1092 char java_runtime_version[128] = ""; |
|
1093 char java_runtime_vendor_version[128] = ""; |
|
1094 char java_runtime_vendor_vm_bug_url[128] = ""; |
1093 |
1095 |
1094 // extract the JRE name from java.lang.VersionProps.java_runtime_name |
1096 // extract the JRE name from java.lang.VersionProps.java_runtime_name |
1095 static const char* get_java_runtime_name(TRAPS) { |
1097 static const char* get_java_runtime_name(TRAPS) { |
1096 Klass* k = SystemDictionary::find(vmSymbols::java_lang_VersionProps(), |
1098 Klass* k = SystemDictionary::find(vmSymbols::java_lang_VersionProps(), |
1097 Handle(), Handle(), CHECK_AND_CLEAR_NULL); |
1099 Handle(), Handle(), CHECK_AND_CLEAR_NULL); |
1127 return NULL; |
1129 return NULL; |
1128 } |
1130 } |
1129 const char* name = java_lang_String::as_utf8_string(name_oop, |
1131 const char* name = java_lang_String::as_utf8_string(name_oop, |
1130 java_runtime_version, |
1132 java_runtime_version, |
1131 sizeof(java_runtime_version)); |
1133 sizeof(java_runtime_version)); |
|
1134 return name; |
|
1135 } else { |
|
1136 return NULL; |
|
1137 } |
|
1138 } |
|
1139 |
|
1140 // extract the JRE vendor version from java.lang.VersionProps.VENDOR_VERSION |
|
1141 static const char* get_java_runtime_vendor_version(TRAPS) { |
|
1142 Klass* k = SystemDictionary::find(vmSymbols::java_lang_VersionProps(), |
|
1143 Handle(), Handle(), CHECK_AND_CLEAR_NULL); |
|
1144 fieldDescriptor fd; |
|
1145 bool found = k != NULL && |
|
1146 InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_vendor_version_name(), |
|
1147 vmSymbols::string_signature(), &fd); |
|
1148 if (found) { |
|
1149 oop name_oop = k->java_mirror()->obj_field(fd.offset()); |
|
1150 if (name_oop == NULL) { |
|
1151 return NULL; |
|
1152 } |
|
1153 const char* name = java_lang_String::as_utf8_string(name_oop, |
|
1154 java_runtime_vendor_version, |
|
1155 sizeof(java_runtime_vendor_version)); |
|
1156 return name; |
|
1157 } else { |
|
1158 return NULL; |
|
1159 } |
|
1160 } |
|
1161 |
|
1162 // extract the JRE vendor VM bug URL from java.lang.VersionProps.VENDOR_URL_VM_BUG |
|
1163 static const char* get_java_runtime_vendor_vm_bug_url(TRAPS) { |
|
1164 Klass* k = SystemDictionary::find(vmSymbols::java_lang_VersionProps(), |
|
1165 Handle(), Handle(), CHECK_AND_CLEAR_NULL); |
|
1166 fieldDescriptor fd; |
|
1167 bool found = k != NULL && |
|
1168 InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_vendor_vm_bug_url_name(), |
|
1169 vmSymbols::string_signature(), &fd); |
|
1170 if (found) { |
|
1171 oop name_oop = k->java_mirror()->obj_field(fd.offset()); |
|
1172 if (name_oop == NULL) { |
|
1173 return NULL; |
|
1174 } |
|
1175 const char* name = java_lang_String::as_utf8_string(name_oop, |
|
1176 java_runtime_vendor_vm_bug_url, |
|
1177 sizeof(java_runtime_vendor_vm_bug_url)); |
1132 return name; |
1178 return name; |
1133 } else { |
1179 } else { |
1134 return NULL; |
1180 return NULL; |
1135 } |
1181 } |
1136 } |
1182 } |
3654 initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK); |
3700 initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK); |
3655 |
3701 |
3656 // Phase 1 of the system initialization in the library, java.lang.System class initialization |
3702 // Phase 1 of the system initialization in the library, java.lang.System class initialization |
3657 call_initPhase1(CHECK); |
3703 call_initPhase1(CHECK); |
3658 |
3704 |
3659 // get the Java runtime name after java.lang.System is initialized |
3705 // get the Java runtime name, version, and vendor info after java.lang.System is initialized |
3660 JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); |
3706 JDK_Version::set_runtime_name(get_java_runtime_name(THREAD)); |
3661 JDK_Version::set_runtime_version(get_java_runtime_version(THREAD)); |
3707 JDK_Version::set_runtime_version(get_java_runtime_version(THREAD)); |
|
3708 JDK_Version::set_runtime_vendor_version(get_java_runtime_vendor_version(THREAD)); |
|
3709 JDK_Version::set_runtime_vendor_vm_bug_url(get_java_runtime_vendor_vm_bug_url(THREAD)); |
3662 |
3710 |
3663 // an instance of OutOfMemory exception has been allocated earlier |
3711 // an instance of OutOfMemory exception has been allocated earlier |
3664 initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK); |
3712 initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK); |
3665 initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK); |
3713 initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK); |
3666 initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK); |
3714 initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK); |