On Thu, Nov 6, 2025 at 1:42 PM Shuah Khan <[email protected]> wrote:
>
> On 10/27/25 20:42, Kuniyuki Iwashima wrote:
> > While writing a selftest with kselftest_harness.h, I often want to
> > check which paths are actually exercised.
> >
> > Let's support generating KCOV coverage data.
> >
> > We can specify the output directory via the KCOV_OUTPUT environment
> > variable, and the number of instructions to collect via the KCOV_SLOTS
> > environment variable.
> >
> >    # KCOV_OUTPUT=$PWD/kcov KCOV_SLOTS=$((4096 * 2)) \
> >      ./tools/testing/selftests/net/af_unix/scm_inq
> >
> > Both variables can also be specified as the make variable.
> >
> >    # make -C tools/testing/selftests/ \
> >      KCOV_OUTPUT=$PWD/kcov KCOV_SLOTS=$((4096 * 4)) \
> >      kselftest_override_timeout=60 TARGETS=net/af_unix run_tests
> >
> > The coverage data can be simply decoded with addr2line:
> >
> >    $ cat kcov/* | sort | uniq | addr2line -e vmlinux | grep unix
> >    net/unix/af_unix.c:1056
> >    net/unix/af_unix.c:3138
> >    net/unix/af_unix.c:3834
> >    net/unix/af_unix.c:3838
> >    net/unix/af_unix.c:311 (discriminator 2)
> >    ...
> >
> > or more nicely with a script embedded in vock [0]:
> >
> >    $ cat kcov/* | sort | uniq > local.log
> >    $ python3 ~/kernel/tools/vock/report.py \
> >      --kernel-src ./ --vmlinux ./vmlinux \
> >      --mode local --local-log local.log --filter unix
> >    ...
> >    ------------------------------- Coverage Report 
> > --------------------------------
> >    📄 net/unix/af_unix.c (276 lines)
> >     ...
> >    942 | static int unix_setsockopt(struct socket *sock, int level, int 
> > optname,
> >    943 |                         sockptr_t optval, unsigned int optlen)
> >    944 | {
> >     ...
> >    961 |      switch (optname) {
> >    962 |      case SO_INQ:
> >    963 >              if (sk->sk_type != SOCK_STREAM)
> >    964 |                      return -EINVAL;
> >    965 |
> >    966 >              if (val > 1 || val < 0)
> >    967 |                      return -EINVAL;
> >    968 |
> >    969 >              WRITE_ONCE(u->recvmsg_inq, val);
> >    970 |              break;
> >
> > Link: 
> > https://github.com/kzall0c/vock/blob/f3d97de9954f9df758c0ab287ca7e24e654288c7/report.py
> >  #[0]
> > Signed-off-by: Kuniyuki Iwashima <[email protected]>
> > ---
> > v2: Support TEST()
> > v1: 
> > https://lore.kernel.org/linux-kselftest/[email protected]/
> > ---
> >   Documentation/dev-tools/kselftest.rst       |  41 ++++++
> >   tools/testing/selftests/Makefile            |  14 ++-
> >   tools/testing/selftests/kselftest_harness.h | 133 +++++++++++++++++++-
> >   3 files changed, 178 insertions(+), 10 deletions(-)
> >
>
> I am okay with kcov support being added. You probably have to fix a few 
> things.
> kernel test robot is still complaining on v2.

Thank you, Shuah!
Will fix the issue in v3.

Reply via email to