On May 12 16:36, Jon Turney wrote: > On 08/05/2023 04:12, Brian Inglis wrote: > > cpuid 0x00000007:0 ecx:7 shstk Shadow Stack support & Windows > > [20]20H1/[20]2004+ > > => user_shstk User mode program Shadow Stack support > > AMD SVM 0x8000000a:0 edx:25 vnmi virtual Non-Maskable Interrrupts > > Sync AMD 0x80000008:0 ebx flags across two output locations > > Thanks. I applied this. > > Does this need applying to the 3.4 branch as well? > > > --- > > winsup/cygwin/fhandler/proc.cc | 29 ++++++++++++++++++++++------- > > > + /* cpuid 0x00000007 ecx & Windows [20]20H1/[20]2004+ */ > > + if (maxf >= 0x00000007 && wincap.osname () >= "10.0" > > + && wincap.build_number () >= 19041)
No problems checking for the OS versions, but not like this. wincap.osname () >= "10.0" ? That will not do what you expect it to do. wincap.osname() is a char * and the >= operator will not work as on cstring in C++, but compare the pointer values of the two strings instead. While changing this to strcmp (wincap.osname (), "10.0") >= 0 is possible, it doesn't make sense. For all supported Windows versions, the build number is unambiguously bumped with each new release. So there's no older OS version with a build number >= 19041. As a result, the check for osname() can simply go away. But then again, this is a windows feature which would best served by adding a bit flag to the wincaps array, *and* we already have a wincaps array for windows versions starting with build number 19041 (wincap_10_2004). So, Brian, would you mind to create a followup patch which rather defines a new bitflag in the wincaps array, set it to false or true according to the OS version, and check this flag instead? Thanks, Corinna