Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 #ifndef _LINUX_KCOV_IOCTLS_H
0003 #define _LINUX_KCOV_IOCTLS_H
0004 
0005 #include <linux/types.h>
0006 
0007 /*
0008  * Argument for KCOV_REMOTE_ENABLE ioctl, see Documentation/dev-tools/kcov.rst
0009  * and the comment before kcov_remote_start() for usage details.
0010  */
0011 struct kcov_remote_arg {
0012     __u32       trace_mode; /* KCOV_TRACE_PC or KCOV_TRACE_CMP */
0013     __u32       area_size;  /* Length of coverage buffer in words */
0014     __u32       num_handles;    /* Size of handles array */
0015     __aligned_u64   common_handle;
0016     __aligned_u64   handles[];
0017 };
0018 
0019 #define KCOV_REMOTE_MAX_HANDLES     0x100
0020 
0021 #define KCOV_INIT_TRACE         _IOR('c', 1, unsigned long)
0022 #define KCOV_ENABLE         _IO('c', 100)
0023 #define KCOV_DISABLE            _IO('c', 101)
0024 #define KCOV_REMOTE_ENABLE      _IOW('c', 102, struct kcov_remote_arg)
0025 
0026 enum {
0027     /*
0028      * Tracing coverage collection mode.
0029      * Covered PCs are collected in a per-task buffer.
0030      * In new KCOV version the mode is chosen by calling
0031      * ioctl(fd, KCOV_ENABLE, mode). In older versions the mode argument
0032      * was supposed to be 0 in such a call. So, for reasons of backward
0033      * compatibility, we have chosen the value KCOV_TRACE_PC to be 0.
0034      */
0035     KCOV_TRACE_PC = 0,
0036     /* Collecting comparison operands mode. */
0037     KCOV_TRACE_CMP = 1,
0038 };
0039 
0040 /*
0041  * The format for the types of collected comparisons.
0042  *
0043  * Bit 0 shows whether one of the arguments is a compile-time constant.
0044  * Bits 1 & 2 contain log2 of the argument size, up to 8 bytes.
0045  */
0046 #define KCOV_CMP_CONST          (1 << 0)
0047 #define KCOV_CMP_SIZE(n)        ((n) << 1)
0048 #define KCOV_CMP_MASK           KCOV_CMP_SIZE(3)
0049 
0050 #define KCOV_SUBSYSTEM_COMMON   (0x00ull << 56)
0051 #define KCOV_SUBSYSTEM_USB  (0x01ull << 56)
0052 
0053 #define KCOV_SUBSYSTEM_MASK (0xffull << 56)
0054 #define KCOV_INSTANCE_MASK  (0xffffffffull)
0055 
0056 static inline __u64 kcov_remote_handle(__u64 subsys, __u64 inst)
0057 {
0058     if (subsys & ~KCOV_SUBSYSTEM_MASK || inst & ~KCOV_INSTANCE_MASK)
0059         return 0;
0060     return subsys | inst;
0061 }
0062 
0063 #endif /* _LINUX_KCOV_IOCTLS_H */