mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
into pilot.blaudden:/home/msvensson/mysql/mysql-5.1-maint
This commit is contained in:
commit
1772776e27
1 changed files with 21 additions and 16 deletions
|
@ -192,27 +192,32 @@ bool HaveCpuId()
|
|||
}
|
||||
return true;
|
||||
#else
|
||||
typedef void (*SigHandler)(int);
|
||||
|
||||
SigHandler oldHandler = signal(SIGILL, SigIllHandler);
|
||||
if (oldHandler == SIG_ERR)
|
||||
return false;
|
||||
|
||||
bool result = true;
|
||||
if (setjmp(s_env))
|
||||
result = false;
|
||||
else
|
||||
word32 eax, ebx;
|
||||
__asm__ __volatile
|
||||
(
|
||||
// save ebx in case -fPIC is being used
|
||||
"push %%ebx; mov $0, %%eax; cpuid; pop %%ebx"
|
||||
:
|
||||
/* Put EFLAGS in eax and ebx */
|
||||
"pushf;"
|
||||
"pushf;"
|
||||
"pop %0;"
|
||||
"movl %0,%1;"
|
||||
|
||||
/* Flip the cpuid bit and store back in EFLAGS */
|
||||
"xorl $0x200000,%0;"
|
||||
"push %0;"
|
||||
"popf;"
|
||||
|
||||
/* Read EFLAGS again */
|
||||
"pushf;"
|
||||
"pop %0;"
|
||||
"popf"
|
||||
: "=r" (eax), "=r" (ebx)
|
||||
:
|
||||
: "%eax", "%ecx", "%edx"
|
||||
: "cc"
|
||||
);
|
||||
|
||||
signal(SIGILL, oldHandler);
|
||||
return result;
|
||||
if (eax == ebx)
|
||||
return false;
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue