From: Xinchen Hui Date: Tue, 4 Sep 2018 09:26:46 +0000 (+0800) Subject: Fixed bug #76825 (Undefined symbols ___cpuid_count) X-Git-Tag: php-7.3.0RC1~23 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3497b75b732723b2f8d0745336d9fcaccb2e3dd7;p=php Fixed bug #76825 (Undefined symbols ___cpuid_count) --- diff --git a/NEWS b/NEWS index 10bfe1edcf..f9dfe553b1 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ PHP NEWS ?? ??? ????, PHP 7.3.0RC1 - Core: + . Fixed bug #76825 (Undefined symbols ___cpuid_count). (Laruence) . Fixed bug #76820 (Z_COPYABLE invalid definition). (mvdwerve, cmb) - intl: diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 index 8d5cfe5372..20dd0f9a39 100644 --- a/Zend/Zend.m4 +++ b/Zend/Zend.m4 @@ -58,6 +58,7 @@ sys/time.h \ signal.h \ unix.h \ stdlib.h \ +cpuid.h \ dlfcn.h) AC_TYPE_SIZE_T 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 +# ifdef HAVE_CPUID_H +# include 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 static void __zend_cpuid(uint32_t func, uint32_t subfunc, zend_cpu_info *cpuinfo) {