From 271a33443c6e9ce77eb1a06d8726c692da85ab16 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 15 Oct 2001 09:41:18 +0000 Subject: [PATCH] * uname.cc (uname): Use `wProcessorLevel' unless OS sets it wrong. Use `dwProcessorType' then instead. * wincap.cc: Set flag has_valid_processorlevel appropriately. * wincap.h: Add flag has_valid_processorlevel. --- winsup/cygwin/ChangeLog | 7 +++++++ winsup/cygwin/uname.cc | 22 ++++++++++++++++------ winsup/cygwin/wincap.cc | 11 +++++++++++ winsup/cygwin/wincap.h | 2 ++ 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index c2dda0be4..79b9b2e6a 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2001-10-15 Corinna Vinschen + + * uname.cc (uname): Use `wProcessorLevel' unless OS sets it wrong. + Use `dwProcessorType' then instead. + * wincap.cc: Set flag has_valid_processorlevel appropriately. + * wincap.h: Add flag has_valid_processorlevel. + 2001-10-14 Christopher Faylor * dtable.cc (dtable::build_fhandler_from_name): Use PC_FULL to diff --git a/winsup/cygwin/uname.cc b/winsup/cygwin/uname.cc index b73dc970f..80bd31991 100644 --- a/winsup/cygwin/uname.cc +++ b/winsup/cygwin/uname.cc @@ -57,13 +57,23 @@ uname (struct utsname *name) { case PROCESSOR_ARCHITECTURE_INTEL: unsigned int ptype; - if (sysinfo.dwProcessorType < 3) /* Shouldn't happen. */ - ptype = 3; - else if (sysinfo.dwProcessorType > 9) /* P4 */ - ptype = 6; + if (wincap.has_valid_processorlevel ()) + { + if (sysinfo.wProcessorLevel < 3) /* Shouldn't happen. */ + ptype = 3; + else if (sysinfo.wProcessorLevel > 9) /* P4 */ + ptype = 6; + else + ptype = sysinfo.wProcessorLevel; + } else - ptype = sysinfo.dwProcessorType; - + { + if (sysinfo.dwProcessorType == PROCESSOR_INTEL_386 || + sysinfo.dwProcessorType == PROCESSOR_INTEL_486) + ptype = sysinfo.dwProcessorType / 100; + else + ptype = PROCESSOR_INTEL_PENTIUM / 100; + } __small_sprintf (name->machine, "i%d86", ptype); break; case PROCESSOR_ARCHITECTURE_ALPHA: diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc index 4026167ad..d0f9c6dff 100644 --- a/winsup/cygwin/wincap.cc +++ b/winsup/cygwin/wincap.cc @@ -43,6 +43,7 @@ static NO_COPY wincaps wincap_unknown = { has_negative_pids:false, has_unreliable_pipes:false, has_try_enter_critical_section:false, + has_valid_processorlevel:false, }; static NO_COPY wincaps wincap_95 = { @@ -77,6 +78,7 @@ static NO_COPY wincaps wincap_95 = { has_negative_pids:true, has_unreliable_pipes:true, has_try_enter_critical_section:false, + has_valid_processorlevel:false, }; static NO_COPY wincaps wincap_95osr2 = { @@ -111,6 +113,7 @@ static NO_COPY wincaps wincap_95osr2 = { has_negative_pids:true, has_unreliable_pipes:true, has_try_enter_critical_section:false, + has_valid_processorlevel:false, }; static NO_COPY wincaps wincap_98 = { @@ -145,6 +148,7 @@ static NO_COPY wincaps wincap_98 = { has_negative_pids:true, has_unreliable_pipes:true, has_try_enter_critical_section:false, + has_valid_processorlevel:true, }; static NO_COPY wincaps wincap_98se = { @@ -179,6 +183,7 @@ static NO_COPY wincaps wincap_98se = { has_negative_pids:true, has_unreliable_pipes:true, has_try_enter_critical_section:false, + has_valid_processorlevel:true, }; static NO_COPY wincaps wincap_me = { @@ -213,6 +218,7 @@ static NO_COPY wincaps wincap_me = { has_negative_pids:true, has_unreliable_pipes:true, has_try_enter_critical_section:false, + has_valid_processorlevel:true, }; static NO_COPY wincaps wincap_nt3 = { @@ -247,6 +253,7 @@ static NO_COPY wincaps wincap_nt3 = { has_negative_pids:false, has_unreliable_pipes:false, has_try_enter_critical_section:false, + has_valid_processorlevel:true, }; static NO_COPY wincaps wincap_nt4 = { @@ -281,6 +288,7 @@ static NO_COPY wincaps wincap_nt4 = { has_negative_pids:false, has_unreliable_pipes:false, has_try_enter_critical_section:true, + has_valid_processorlevel:true, }; static NO_COPY wincaps wincap_nt4sp4 = { @@ -315,6 +323,7 @@ static NO_COPY wincaps wincap_nt4sp4 = { has_negative_pids:false, has_unreliable_pipes:false, has_try_enter_critical_section:true, + has_valid_processorlevel:true, }; static NO_COPY wincaps wincap_2000 = { @@ -349,6 +358,7 @@ static NO_COPY wincaps wincap_2000 = { has_negative_pids:false, has_unreliable_pipes:false, has_try_enter_critical_section:true, + has_valid_processorlevel:true, }; static NO_COPY wincaps wincap_xp = { @@ -383,6 +393,7 @@ static NO_COPY wincaps wincap_xp = { has_negative_pids:false, has_unreliable_pipes:false, has_try_enter_critical_section:true, + has_valid_processorlevel:true, }; wincapc NO_COPY wincap; diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h index 038947636..2bb391454 100644 --- a/winsup/cygwin/wincap.h +++ b/winsup/cygwin/wincap.h @@ -44,6 +44,7 @@ struct wincaps unsigned has_negative_pids : 1; unsigned has_unreliable_pipes : 1; unsigned has_try_enter_critical_section : 1; + unsigned has_valid_processorlevel : 1; }; class wincapc @@ -92,6 +93,7 @@ public: bool IMPLEMENT (has_negative_pids) bool IMPLEMENT (has_unreliable_pipes) bool IMPLEMENT (has_try_enter_critical_section) + bool IMPLEMENT (has_valid_processorlevel) #undef IMPLEMENT };