Check if cpuid is available in init_cpu_features

Since not all i486 processors support cpuid, we call __get_cpuid_max to
check if cpuid is available before using it if not compiling for i586,
i686 nor x86-64.

	* sysdeps/x86/cpu-features.c (init_cpu_features): Call
	__get_cpuid_max if not compiling for i586, i686 nor x86-64.
This commit is contained in:
H.J. Lu 2015-08-13 04:52:50 -07:00
parent e54388bd8b
commit a5cf909b8f
2 changed files with 17 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2015-08-13 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86/cpu-features.c (init_cpu_features): Call
__get_cpuid_max if not compiling for i586, i686 nor x86-64.
2015-08-13 H.J. Lu <hongjiu.lu@intel.com> 2015-08-13 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/unix/sysv/linux/x86/elision-conf.h: Don't include * sysdeps/unix/sysv/linux/x86/elision-conf.h: Don't include

View File

@ -40,6 +40,14 @@ init_cpu_features (struct cpu_features *cpu_features)
unsigned int model = 0; unsigned int model = 0;
enum cpu_features_kind kind; enum cpu_features_kind kind;
#if !defined __i586__ && !defined __i686__ && !defined __x86_64__
if (__get_cpuid_max (0, 0) == 0)
{
kind = arch_kind_other;
goto no_cpuid;
}
#endif
__cpuid (0, cpu_features->max_cpuid, ebx, ecx, edx); __cpuid (0, cpu_features->max_cpuid, ebx, ecx, edx);
/* This spells out "GenuineIntel". */ /* This spells out "GenuineIntel". */
@ -196,6 +204,10 @@ init_cpu_features (struct cpu_features *cpu_features)
} }
} }
#if !defined __i586__ && !defined __i686__ && !defined __x86_64__
no_cpuid:
#endif
cpu_features->family = family; cpu_features->family = family;
cpu_features->model = model; cpu_features->model = model;
cpu_features->kind = kind; cpu_features->kind = kind;