Messages in this thread | | | From | Colin Ian King <> | Subject | Re: [PATCH -rc v1] gcov: Disable gcov build with GCC 10 | Date | Thu, 10 Sep 2020 20:19:52 +0100 |
| |
On 10/09/2020 13:52, Peter Oberparleiter wrote: > On 04.09.2020 17:58, Leon Romanovsky wrote: >> GCOV built with GCC 10 doesn't initialize n_function variable. >> This produces different kernel panics as was seen by Colin in >> Ubuntu [1] and me in FC 32 [2]. >> >> As a workaround, let's disable GCOV build for broken GCC 10 version. >> >> [1] https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1891288 >> [2] https://lore.kernel.org/lkml/20200827133932.3338519-1-leon@kernel.org >> Cc: Colin Ian King <colin.king@canonical.com> >> Signed-off-by: Leon Romanovsky <leonro@nvidia.com> > > The following patch should fix the problem with gcov and GCC 10. > I successfully tested it with kernel 5.9-rc4 on s390 using GCC 10.1.1 > and also with GCC 9.1.1 to see that it didn't break support for previous > GCC versions. In both cases there were no kernel panics and gcov worked > fine. > > Could you try this patch to see if it also fixes the problem in your > environment? >
This works perfectly, tested with gcc 10.2 on linux 5.9-rc4 (tip) on an ARM64 Socionext Synquacer E-Series (Cortex A-53) system.
thanks!
Tested-and-Acked-by: Colin Ian King <colin.king@canonical.com>
> ---8<--- > From: Peter Oberparleiter <oberpar@linux.ibm.com> > Subject: [PATCH] gcov: add support for GCC 10.1 > > Using gcov to collect coverage data for kernels compiled with GCC 10.1 > causes random malfunctions and kernel crashes. This is the result of a > changed GCOV_COUNTERS value in GCC 10.1 that causes a mismatch between > the layout of the gcov_info structure created by GCC profiling code and > the related structure used by the kernel. > > Fix this by updating the in-kernel GCOV_COUNTERS value. Also re-enable > config GCOV_KERNEL for use with GCC 10. > > Reported-by: Colin Ian King <colin.king@canonical.com> > Reported-by: Leon Romanovsky <leonro@nvidia.com> > Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com> > --- > kernel/gcov/Kconfig | 1 - > kernel/gcov/gcc_4_7.c | 4 +++- > 2 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig > index bb4b680e8455..3110c77230c7 100644 > --- a/kernel/gcov/Kconfig > +++ b/kernel/gcov/Kconfig > @@ -4,7 +4,6 @@ menu "GCOV-based kernel profiling" > config GCOV_KERNEL > bool "Enable gcov-based kernel profiling" > depends on DEBUG_FS > - depends on !CC_IS_GCC || GCC_VERSION < 100000 > select CONSTRUCTORS if !UML > default n > help > diff --git a/kernel/gcov/gcc_4_7.c b/kernel/gcov/gcc_4_7.c > index 908fdf5098c3..53c67c87f141 100644 > --- a/kernel/gcov/gcc_4_7.c > +++ b/kernel/gcov/gcc_4_7.c > @@ -19,7 +19,9 @@ > #include <linux/vmalloc.h> > #include "gcov.h" > > -#if (__GNUC__ >= 7) > +#if (__GNUC__ >= 10) > +#define GCOV_COUNTERS 8 > +#elif (__GNUC__ >= 7) > #define GCOV_COUNTERS 9 > #elif (__GNUC__ > 5) || (__GNUC__ == 5 && __GNUC_MINOR__ >= 1) > #define GCOV_COUNTERS 10 >
| |