| From 6583327c4dd55acbbf2a6f25e775b28b3abf9a42 Mon Sep 17 00:00:00 2001 |
| From: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> |
| Date: Thu, 6 Feb 2014 15:58:20 +0100 |
| Subject: x86, hweight: Fix BUG when booting with CONFIG_GCOV_PROFILE_ALL=y |
| |
| From: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> |
| |
| commit 6583327c4dd55acbbf2a6f25e775b28b3abf9a42 upstream. |
| |
| Commit d61931d89b, "x86: Add optimized popcnt variants" introduced |
| compile flag -fcall-saved-rdi for lib/hweight.c. When combined with |
| options -fprofile-arcs and -O2, this flag causes gcc to generate |
| broken constructor code. As a result, a 64 bit x86 kernel compiled |
| with CONFIG_GCOV_PROFILE_ALL=y prints message "gcov: could not create |
| file" and runs into sproadic BUGs during boot. |
| |
| The gcc people indicate that these kinds of problems are endemic when |
| using ad hoc calling conventions. It is therefore best to treat any |
| file compiled with ad hoc calling conventions as an isolated |
| environment and avoid things like profiling or coverage analysis, |
| since those subsystems assume a "normal" calling conventions. |
| |
| This patch avoids the bug by excluding lib/hweight.o from coverage |
| profiling. |
| |
| Reported-by: Meelis Roos <mroos@linux.ee> |
| Cc: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> |
| Link: http://lkml.kernel.org/r/52F3A30C.7050205@linux.vnet.ibm.com |
| Signed-off-by: H. Peter Anvin <hpa@zytor.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| lib/Makefile | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/lib/Makefile |
| +++ b/lib/Makefile |
| @@ -41,6 +41,7 @@ obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock |
| lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o |
| lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o |
| |
| +GCOV_PROFILE_hweight.o := n |
| CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS)) |
| obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o |
| |