From 6efcf43c2657773c50e5f6c946b05c4b2004a22b Mon Sep 17 00:00:00 2001 From: Toomas Soome Date: Sun, 10 Dec 2017 11:51:37 +0200 Subject: [PATCH] 8914 loader: gcc 4.4.4 fails to allocate register for do_cpuid() Reviewed by: Yuri Pankov Reviewed by: Igor Kozhukhov Reviewed by: Richard Lowe Approved by: Dan McDonald --- usr/src/boot/sys/i386/include/cpufunc.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/usr/src/boot/sys/i386/include/cpufunc.h b/usr/src/boot/sys/i386/include/cpufunc.h index f43319476d..501d229035 100644 --- a/usr/src/boot/sys/i386/include/cpufunc.h +++ b/usr/src/boot/sys/i386/include/cpufunc.h @@ -109,9 +109,12 @@ disable_intr(void) static __inline void do_cpuid(u_int ax, u_int *p) { - __asm __volatile("cpuid" - : "=a" (p[0]), "=b" (p[1]), "=c" (p[2]), "=d" (p[3]) - : "0" (ax)); + __asm __volatile("pushl %%ebx \n\t" + "cpuid \n\t" + "movl %%ebx, %1 \n\t" + "popl %%ebx \n\t" + : "=a" (p[0]), "=m" (p[1]), "=c" (p[2]), "=d" (p[3]) + : "0" (ax)); } static __inline void -- 2.11.4.GIT