diff options
author | Ulrich Drepper <drepper@gmail.com> | 2012-01-26 07:45:14 -0500 |
---|---|---|
committer | Carlos O'Donell <carlos_odonell@mentor.com> | 2012-05-01 22:15:39 -0400 |
commit | c37ba8a2607dd45527d01299bc25730369501dca (patch) | |
tree | 080a36d2f14a2152bc20e4fc081bd1007a4f2711 | |
parent | 3088c58cbb15172e01cd9cc7e21ed06bc2b27889 (diff) | |
download | glibc-c37ba8a2607dd45527d01299bc25730369501dca.tar.gz glibc-c37ba8a2607dd45527d01299bc25730369501dca.tar.xz glibc-c37ba8a2607dd45527d01299bc25730369501dca.zip |
Reset bit_AVX in __cpu_features is OS support is missing
(cherry picked from commit afc5ed09cbce5d6fd48b3a8c5ec427b31f996880)
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/init-arch.c | 14 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/init-arch.h | 3 |
4 files changed, 25 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index 3b5e69bb41..44ace9a3fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -101,6 +101,13 @@ * sysdeps/i386/fpu/feupdateenv.c (__feupdateenv) Invoke __feraiseexcept instead of feraiseexcept. +2012-01-26 Ulrich Drepper <drepper@gmail.com> + + [BZ #13583] + * sysdeps/x86_64/multiarch/init-arch.h: Define bit_OSXSAVE. + * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): If + bit_AVX is set also check OSXAVE/XCR0 and reset bit_AVX if necessary. + 2012-01-01 Ulrich Drepper <drepper@gmail.com> * posix/getconf.c: Update copyright year. diff --git a/NEWS b/NEWS index bbf14c0f9e..58571074b6 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,5 @@ GNU C Library NEWS -- history of user-visible changes. 2011-12-23 -Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc. +Copyright (C) 1992-2012 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU C library bug reports via <http://sources.redhat.com/bugzilla/> @@ -9,7 +9,8 @@ Version 2.15.1 * The following bugs are resolved with this release: - 411, 2547, 2548, 11365, 11494, 13731, 13732, 13733, 13747, 13748, 13749 + 411, 2547, 2548, 11365, 11494, 13583, 13731, 13732, 13733, 13747, 13748, + 13749 Version 2.15 diff --git a/sysdeps/x86_64/multiarch/init-arch.c b/sysdeps/x86_64/multiarch/init-arch.c index 65b0ee93e5..4fabbee06d 100644 --- a/sysdeps/x86_64/multiarch/init-arch.c +++ b/sysdeps/x86_64/multiarch/init-arch.c @@ -1,6 +1,6 @@ /* Initialize CPU feature data. This file is part of the GNU C Library. - Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Ulrich Drepper <drepper@redhat.com>. The GNU C Library is free software; you can redistribute it and/or @@ -144,6 +144,18 @@ __init_cpu_features (void) else kind = arch_kind_other; + if (__cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx & bit_AVX) + { + /* Reset the AVX bit in case OSXSAVE is disabled. */ + if ((__cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx & bit_OSXSAVE) == 0 + || ({ unsigned int xcrlow; + unsigned int xcrhigh; + asm ("xgetbv" + : "=a" (xcrlow), "=d" (xcrhigh) : "c" (0)); + (xcrlow & 6) != 6; })) + __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx &= ~bit_AVX; + } + __cpu_features.family = family; __cpu_features.model = model; atomic_write_barrier (); diff --git a/sysdeps/x86_64/multiarch/init-arch.h b/sysdeps/x86_64/multiarch/init-arch.h index 2a1df393c4..408e5aeb89 100644 --- a/sysdeps/x86_64/multiarch/init-arch.h +++ b/sysdeps/x86_64/multiarch/init-arch.h @@ -1,5 +1,5 @@ /* This file is part of the GNU C Library. - Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -27,6 +27,7 @@ #define bit_SSSE3 (1 << 9) #define bit_SSE4_1 (1 << 19) #define bit_SSE4_2 (1 << 20) +#define bit_OSXSAVE (1 << 27) #define bit_AVX (1 << 28) #define bit_POPCOUNT (1 << 23) #define bit_FMA (1 << 12) |