diff options
author | Xinchen Hui <laruence@gmail.com> | 2018-09-04 17:26:46 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2018-09-04 17:26:46 +0800 |
commit | 3497b75b732723b2f8d0745336d9fcaccb2e3dd7 (patch) | |
tree | 4146619a0ba3660c02b6cf5fd584b19693271b0b /Zend/zend_cpuinfo.c | |
parent | 7d8e6e6394725a0c00ddfb0bc1a14ded4d94b962 (diff) | |
download | php-git-3497b75b732723b2f8d0745336d9fcaccb2e3dd7.tar.gz |
Fixed bug #76825 (Undefined symbols ___cpuid_count)
Diffstat (limited to 'Zend/zend_cpuinfo.c')
-rw-r--r-- | Zend/zend_cpuinfo.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Zend/zend_cpuinfo.c b/Zend/zend_cpuinfo.c index 39519c4c16..ffa370416d 100644 --- a/Zend/zend_cpuinfo.c +++ b/Zend/zend_cpuinfo.c @@ -29,10 +29,20 @@ typedef struct _zend_cpu_info { static zend_cpu_info cpuinfo = {0}; #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) -#include <cpuid.h> +# ifdef HAVE_CPUID_H +# include <cpuid.h> static void __zend_cpuid(uint32_t func, uint32_t subfunc, zend_cpu_info *cpuinfo) { __cpuid_count(func, subfunc, cpuinfo->eax, cpuinfo->ebx, cpuinfo->ecx, cpuinfo->edx); } +# else +static void __zend_cpuid(uint32_t func, uint32_t subfunc, zend_cpu_info *cpuinfo) { + __asm__ __volatile__ ( + "cpuid" + : "=a"(cpuinfo->eax), "=b"(cpuinfo->ebx), "=c"(cpuinfo->ecx), "=d"(cpuinfo->edx) + : "a"(func), "c"(subfunc) + ); +} +# endif #elif defined(ZEND_WIN32) && !defined(__clang__) # include <intrin.h> static void __zend_cpuid(uint32_t func, uint32_t subfunc, zend_cpu_info *cpuinfo) { |