Re: [PATCH v2] kernel: add kcov code coverage

From: Kirill A. Shutemov
Date: Thu Jan 14 2016 - 07:36:05 EST


On Thu, Jan 14, 2016 at 01:21:27PM +0100, Dmitry Vyukov wrote:
> On Thu, Jan 14, 2016 at 10:23 AM, Kirill A. Shutemov
> <kirill@xxxxxxxxxxxxx> wrote:
> > On Thu, Jan 14, 2016 at 10:10:39AM +0100, Dmitry Vyukov wrote:
> >> On Thu, Jan 14, 2016 at 10:03 AM, Kirill A. Shutemov
> >> <kirill@xxxxxxxxxxxxx> wrote:
> >> > Hi,
> >> >
> >> > I've tried to build current -next with the patch. It has few reject, but
> >> > nothing major.
> >> >
> >> > Booting the kernel in qemu with CONFIG_KCOV=y has failed. It hangs on
> >> > "smpboot: Total of 3 processors activated (9178.27 BogoMIPS)"
> >> >
> >> > The interesting part is that I have only 2 cpu in this setup!
> >> >
> >> > Huh?
> >> >
> >> > CONFIG_KCOV=n works fine.
> >>
> >>
> >> Hi Kirill,
> >>
> >> Thanks for testing.
> >>
> >> I will try to reproduce this if you provide:
> >> - location of the -next tree
> >
> > The usual one:
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git next-20160114
> >
> >> - gcc revision
> >
> > Current gcc-snapshot from Debian:
> >
> > gcc version 6.0.0 20160105 (experimental) [trunk revision 232093] (Debian 20160105-1)
> >
> >> - .config
> >
> > Attached.
> >
> >> - qemu command line
> >
> > Nothing fancy:
> >
> > qemu-system-x86_64 -smp 2 -m 2048 -nographic -kernel bzImage -append "console=ttyS0 earlyprintk=serial"
> >
> >> Alternatively, you can try to bulk disable instrumentation of
> >> everything related to boot process (by adding KCOV_INSTRUMENT := n to
> >> the Makefile). Most likely it is due to instrumentation. If it helps,
> >> try to bisect the the guilty files.
> >
> > Okay, I'll try.
>
>
> I've tried with exactly your gcc revision and your config and VM boots fine...
>
> For me it prints 4 CPUs:
> [ 0.193348] smpboot: Total of 4 processors activated
> so it is probably fine :)
>
> I am almost sure that the root cause is kcov instrumentation is some
> inappropriate place. I've fixed such symptoms several times by
> disabling instrumentation in various places.
>
> I've ported this patch to an older 3.13 kernel and I had to disabl all
> instrumentation in the following files (with KCOV_INSTRUMENT := n):
>
> arch/x86/kernel/cpu/Makefile
> arch/x86/pci/Makefile
> arch/x86/platform/Makefile
> arch/x86/platform/**/Makefile
> arch/x86/power/Makefile
> arch/x86/realmode/Makefile
> arch/x86/um/Makefile
>
> Try these first.

I found that disabling instrumentation for whole lib/ helps, but I wasn't
able to identify specific object files.

I've tried these:

KCOV_INSTRUMENT_cpumask.o := n
KCOV_INSTRUMENT_smp_processor_id.o := n
KCOV_INSTRUMENT_bitmap.o := n
KCOV_INSTRUMENT_find_bit.o := n

No luck.

--
Kirill A. Shutemov