From 4c6552d2df2912a710cab6acf476347a7fbf15a0 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Wed, 1 Sep 2010 09:12:44 +0000
Subject: [PATCH] Support for Position Independet Code by aboid clobbering PIC register

Do not use the PIC register (ebx)
See http://www.gentoo.org/proj/en/hardened/pic-fix-guide.xml#doc_chap5
---
 utils/cpuid.h |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/utils/cpuid.h b/utils/cpuid.h
index 2bac69a..ebcec7c 100644
--- a/utils/cpuid.h
+++ b/utils/cpuid.h
@@ -5,9 +5,12 @@ static inline void __cpuid(unsigned int *eax, unsigned int *ebx,
 				unsigned int *ecx, unsigned int *edx)
 {
 	/* ecx is often an input as well as an output. */
-	asm volatile("cpuid"
+	asm volatile(
+		"movl %%ebx, %%esi;"
+		"cpuid;"
+		"xchg %%ebx, %%esi;"
 	    : "=a" (*eax),
-	      "=b" (*ebx),
+	      "=S" (*ebx),
 	      "=c" (*ecx),
 	      "=d" (*edx)
 	    : "0" (*eax), "2" (*ecx));
-- 
1.7.2.2