comparison src/os/windows/vm/os_windows.cpp @ 273:6f17a7c9f8b4

6719981: Update Hotspot Windows os_win32 for windows XP 64 bit and windows 2008 Reviewed-by: dholmes, kamg
author xlu
date Fri, 01 Aug 2008 15:12:34 -0700
parents d95b224e9f17
children 1ee8caae33af
comparison
equal deleted inserted replaced
242:d95b224e9f17 273:6f17a7c9f8b4
1445 int pid = os::current_process_id(); 1445 int pid = os::current_process_id();
1446 st->print_cr("Dynamic libraries:"); 1446 st->print_cr("Dynamic libraries:");
1447 enumerate_modules(pid, _print_module, (void *)st); 1447 enumerate_modules(pid, _print_module, (void *)st);
1448 } 1448 }
1449 1449
1450 // function pointer to Windows API "GetNativeSystemInfo".
1451 typedef void (WINAPI *GetNativeSystemInfo_func_type)(LPSYSTEM_INFO);
1452 static GetNativeSystemInfo_func_type _GetNativeSystemInfo;
1453
1450 void os::print_os_info(outputStream* st) { 1454 void os::print_os_info(outputStream* st) {
1451 st->print("OS:"); 1455 st->print("OS:");
1452 1456
1453 OSVERSIONINFOEX osvi; 1457 OSVERSIONINFOEX osvi;
1454 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); 1458 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
1455 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 1459 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
1456 1460
1457 if (!GetVersionEx((OSVERSIONINFO *)&osvi)) { 1461 if (!GetVersionEx((OSVERSIONINFO *)&osvi)) {
1458 st->print_cr("N/A"); 1462 st->print_cr("N/A");
1459 return; 1463 return;
1460 } 1464 }
1461 1465
1462 int os_vers = osvi.dwMajorVersion * 1000 + osvi.dwMinorVersion; 1466 int os_vers = osvi.dwMajorVersion * 1000 + osvi.dwMinorVersion;
1463 1467 if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
1464 if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { 1468 switch (os_vers) {
1465 switch (os_vers) { 1469 case 3051: st->print(" Windows NT 3.51"); break;
1466 case 3051: st->print(" Windows NT 3.51"); break; 1470 case 4000: st->print(" Windows NT 4.0"); break;
1467 case 4000: st->print(" Windows NT 4.0"); break; 1471 case 5000: st->print(" Windows 2000"); break;
1468 case 5000: st->print(" Windows 2000"); break; 1472 case 5001: st->print(" Windows XP"); break;
1469 case 5001: st->print(" Windows XP"); break; 1473 case 5002:
1470 case 5002: st->print(" Windows Server 2003 family"); break; 1474 case 6000: {
1471 case 6000: st->print(" Windows Vista"); break; 1475 // Retrieve SYSTEM_INFO from GetNativeSystemInfo call so that we could
1472 default: // future windows, print out its major and minor versions 1476 // find out whether we are running on 64 bit processor or not.
1473 st->print(" Windows NT %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion); 1477 SYSTEM_INFO si;
1474 } 1478 ZeroMemory(&si, sizeof(SYSTEM_INFO));
1475 } else { 1479 // Check to see if _GetNativeSystemInfo has been initialized.
1476 switch (os_vers) { 1480 if (_GetNativeSystemInfo == NULL) {
1477 case 4000: st->print(" Windows 95"); break; 1481 HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32.dll"));
1478 case 4010: st->print(" Windows 98"); break; 1482 _GetNativeSystemInfo =
1479 case 4090: st->print(" Windows Me"); break; 1483 CAST_TO_FN_PTR(GetNativeSystemInfo_func_type,
1480 default: // future windows, print out its major and minor versions 1484 GetProcAddress(hKernel32,
1481 st->print(" Windows %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion); 1485 "GetNativeSystemInfo"));
1482 } 1486 if (_GetNativeSystemInfo == NULL)
1483 } 1487 GetSystemInfo(&si);
1484 1488 } else {
1485 st->print(" Build %d", osvi.dwBuildNumber); 1489 _GetNativeSystemInfo(&si);
1486 st->print(" %s", osvi.szCSDVersion); // service pack 1490 }
1487 st->cr(); 1491 if (os_vers == 5002) {
1492 if (osvi.wProductType == VER_NT_WORKSTATION &&
1493 si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
1494 st->print(" Windows XP x64 Edition");
1495 else
1496 st->print(" Windows Server 2003 family");
1497 } else { // os_vers == 6000
1498 if (osvi.wProductType == VER_NT_WORKSTATION)
1499 st->print(" Windows Vista");
1500 else
1501 st->print(" Windows Server 2008");
1502 if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
1503 st->print(" , 64 bit");
1504 }
1505 break;
1506 }
1507 default: // future windows, print out its major and minor versions
1508 st->print(" Windows NT %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
1509 }
1510 } else {
1511 switch (os_vers) {
1512 case 4000: st->print(" Windows 95"); break;
1513 case 4010: st->print(" Windows 98"); break;
1514 case 4090: st->print(" Windows Me"); break;
1515 default: // future windows, print out its major and minor versions
1516 st->print(" Windows %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion);
1517 }
1518 }
1519 st->print(" Build %d", osvi.dwBuildNumber);
1520 st->print(" %s", osvi.szCSDVersion); // service pack
1521 st->cr();
1488 } 1522 }
1489 1523
1490 void os::print_memory_info(outputStream* st) { 1524 void os::print_memory_info(outputStream* st) {
1491 st->print("Memory:"); 1525 st->print("Memory:");
1492 st->print(" %dk page", os::vm_page_size()>>10); 1526 st->print(" %dk page", os::vm_page_size()>>10);