mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 05:22:56 +00:00
[ROSLOAD]: Fix NX enabling
[ROSLOAD]: The IA32_MISC_ENABLE MSR bit actually _disables_ NX, so diabling the bit _enables_ NX. [ROSLOAD]: The MSR_XD_ENABLE_MASK is for the _high_ DWORD of the MSR (bit 34), not the low. [ROSLOAD]: Fix printf. [ENVIRON/ROSLOAD]: Switch to CPU_INFO structure instead of blindly using INT[4]. Revealed a bug in the PAE detection which was reading out of bounds.
This commit is contained in:
parent
e836d0b56e
commit
478348ead1
4 changed files with 40 additions and 37 deletions
|
@ -904,12 +904,12 @@ BlArchGetPerformanceCounter (
|
|||
)
|
||||
{
|
||||
#if defined(_M_IX86) || defined(_M_X64)
|
||||
INT CpuInfo[4];
|
||||
CPU_INFO CpuInfo;
|
||||
|
||||
/* Serialize with CPUID, if it exists */
|
||||
if (Archx86IsCpuidSupported())
|
||||
{
|
||||
BlArchCpuId(0, 0, CpuInfo);
|
||||
BlArchCpuId(0, 0, &CpuInfo);
|
||||
}
|
||||
|
||||
/* Read the TSC */
|
||||
|
@ -924,12 +924,12 @@ VOID
|
|||
BlArchCpuId (
|
||||
_In_ ULONG Function,
|
||||
_In_ ULONG SubFunction,
|
||||
_Out_ INT* Result
|
||||
_Out_ PCPU_INFO Result
|
||||
)
|
||||
{
|
||||
#if defined(_M_IX86) || defined(_M_X64)
|
||||
/* Use the intrinsic */
|
||||
__cpuidex(Result, Function, SubFunction);
|
||||
__cpuidex((INT*)Result->AsUINT32, Function, SubFunction);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -938,37 +938,37 @@ BlArchGetCpuVendor (
|
|||
VOID
|
||||
)
|
||||
{
|
||||
INT CpuInfo[4];
|
||||
CPU_INFO CpuInfo;
|
||||
INT Temp;
|
||||
|
||||
/* Get the CPU Vendor */
|
||||
BlArchCpuId(0, 0, CpuInfo);
|
||||
Temp = CpuInfo[2];
|
||||
CpuInfo[2] = CpuInfo[3];
|
||||
CpuInfo[3] = Temp;
|
||||
BlArchCpuId(0, 0, &CpuInfo);
|
||||
Temp = CpuInfo.Ecx;
|
||||
CpuInfo.Ecx = CpuInfo.Edx;
|
||||
CpuInfo.Edx = Temp;
|
||||
|
||||
/* Check against supported values */
|
||||
if (!strncmp((PCHAR)&CpuInfo[1], "GenuineIntel", 12))
|
||||
if (!strncmp((PCHAR)&CpuInfo.Ebx, "GenuineIntel", 12))
|
||||
{
|
||||
return CPU_INTEL;
|
||||
}
|
||||
if (!strncmp((PCHAR)&CpuInfo[1], "AuthenticAMD", 12))
|
||||
if (!strncmp((PCHAR)&CpuInfo.Ebx, "AuthenticAMD", 12))
|
||||
{
|
||||
return CPU_AMD;
|
||||
}
|
||||
if (!strncmp((PCHAR)&CpuInfo[1], "CentaurHauls", 12))
|
||||
if (!strncmp((PCHAR)&CpuInfo.Ebx, "CentaurHauls", 12))
|
||||
{
|
||||
return CPU_VIA;
|
||||
}
|
||||
if (!strncmp((PCHAR)&CpuInfo[1], "CyrixInstead", 12))
|
||||
if (!strncmp((PCHAR)&CpuInfo.Ebx, "CyrixInstead", 12))
|
||||
{
|
||||
return CPU_CYRIX;
|
||||
}
|
||||
if (!strncmp((PCHAR)&CpuInfo[1], "GenuineTMx86", 12))
|
||||
if (!strncmp((PCHAR)&CpuInfo.Ebx, "GenuineTMx86", 12))
|
||||
{
|
||||
return CPU_TRANSMETA;
|
||||
}
|
||||
if (!strncmp((PCHAR)&CpuInfo[1], "RiseRiseRise", 12))
|
||||
if (!strncmp((PCHAR)&CpuInfo.Ebx, "RiseRiseRise", 12))
|
||||
{
|
||||
return CPU_RISE;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue