]> sourceware.org Git - glibc.git/commitdiff
Replace cpuid asm statement with __cpuid_count
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 13 Aug 2014 00:02:51 +0000 (17:02 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 13 Aug 2014 00:02:51 +0000 (17:02 -0700)
The compiler doesn't know that the cpuid asm statement in intel_check_word
will trash RBX.  We are lucky that it doesn't cause any problems since
RBX is also used by compiler for other purposes so that RBX is saved and
restored.  This patch replaces it with __cpuid_count.

[BZ #17259]
* sysdeps/x86_64/cacheinfo.c (intel_check_word): Replace cpuid
asm statement with __cpuid_count.

ChangeLog
NEWS
sysdeps/x86_64/cacheinfo.c

index d385cc937ea7a882352ed2eeb6783cb38841876b..e3a1f0a974ddb1f07fe236c57211835c55ca1a58 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-08-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       [BZ #17259]
+       * sysdeps/x86_64/cacheinfo.c (intel_check_word): Replace cpuid
+       asm statement with __cpuid_count.
+
 2014-08-12  Mike Frysinger  <vapier@gentoo.org>
 
        * configure.ac: Change __ehdr_start code to dereference the struct.
diff --git a/NEWS b/NEWS
index ad337e8ab27ccf892c105c676e343efb880b4c49..03132e2896aa20b764851606b27090bdd2e96968 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -22,7 +22,8 @@ Version 2.20
   16918, 16922, 16927, 16928, 16932, 16943, 16958, 16965, 16966, 16967,
   16977, 16978, 16984, 16990, 16996, 17009, 17022, 17031, 17042, 17048,
   17050, 17058, 17061, 17062, 17069, 17075, 17078, 17079, 17084, 17086,
-  17088, 17092, 17097, 17125, 17135, 17137, 17150, 17153, 17213, 17261.
+  17088, 17092, 17097, 17125, 17135, 17137, 17150, 17153, 17213, 17259,
+  17261.
 
 * Reverted change of ABI data structures for s390 and s390x:
   On s390 and s390x the size of struct ucontext and jmp_buf was increased in
index 163af2acbc666057413262a3673eb5a26be6f2ea..ca13a53f253ea27bfb77a94080c3708d42abb556 100644 (file)
@@ -191,9 +191,7 @@ intel_check_word (int name, unsigned int value, bool *has_level_2,
          unsigned int round = 0;
          while (1)
            {
-             asm volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1"
-                           : "=a" (eax), "=r" (ebx), "=c" (ecx), "=d" (edx)
-                           : "0" (4), "2" (round));
+             __cpuid_count (4, round, eax, ebx, ecx, edx);
 
              enum { null = 0, data = 1, inst = 2, uni = 3 } type = eax & 0x1f;
              if (type == null)
This page took 0.110765 seconds and 5 git commands to generate.