From nobody Sat May 18 21:15:55 2024 Received: from zg8tmja2lje4os4yms4ymjma.icoremail.net (zg8tmja2lje4os4yms4ymjma.icoremail.net [206.189.21.223]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E5FBE13B2AC; Tue, 23 Apr 2024 14:24:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=206.189.21.223 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713882288; cv=none; b=WIdEz7H4g4YrV0mfihxQ+FrrWKyhHbK/qb45FanYi2JH5q1JU6QYvWgCHPCqI0Pddw+VJU1ZrI+lLLMaiibIZqCZY6IJ8SiH4TvjNqhFbSXC3pzWJeitp6iizn+3WCZadTQd4U9AZIEInBALDMDcYswuZq3Og1zoTRimI+kDzVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713882288; c=relaxed/simple; bh=hhC4/ugD1478w+dMAUR5lqMKxQKAE3bhrFk6VU7sgOM=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Content-Type; b=nhzuJz9UV3HfRFlZdM7MwyrI0SnwDkUECPQSDbRrEHJRSYSnl8ARqQgyND8Nz1q5hP4PJb4eQ6FaF+jRC4+LrmHp6jjfEn0+GMhQTc9E+86KDWTE6z3ZV8xYEwV493jiXhFupT9QVVO0oS4VMb4WuRUHK0PidvqdaZ2DzfTbVMQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=hust.edu.cn; spf=pass smtp.mailfrom=hust.edu.cn; arc=none smtp.client-ip=206.189.21.223 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=hust.edu.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hust.edu.cn Received: from hust.edu.cn (unknown [172.16.0.52]) by app1 (Coremail) with SMTP id HgEQrAB3eyqDxCdm4UFRBQ--.23867S2; Tue, 23 Apr 2024 22:24:03 +0800 (CST) Received: from localhost.localdomain (unknown [10.12.177.116]) by gateway (Coremail) with SMTP id _____wB350CBxCdmRLrJAQ--.6759S2; Tue, 23 Apr 2024 22:24:03 +0800 (CST) From: Haoyang Liu To: Alex Shi , Yanteng Si , Jonathan Corbet , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt Cc: hust-os-kernel-patches@googlegroups.com, Haoyang Liu , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, llvm@lists.linux.dev Subject: [PATCH] docs/zh_CN: Add dev-tools/kcov Chinese translation Date: Tue, 23 Apr 2024 22:23:56 +0800 Message-Id: <20240423142357.3906-1-tttturtleruss@hust.edu.cn> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: HgEQrAB3eyqDxCdm4UFRBQ--.23867S2 Authentication-Results: app1; spf=neutral smtp.mail=tttturtleruss@hust .edu.cn; X-Coremail-Antispam: 1UD129KBjvAXoW3Kr4xZry7KrWrtFy8uFWfKrg_yoW8XFWrto Wfua90k34xAF4rZ3Z8Ka1UG3yxJF4kCrn3Ars7ArW3Zry8Ga4rWr4fCw4rt34rAr45K3ya 9r1xKrWfCa90k3W7n29KB7ZKAUJUUUUf529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUO47k0a2IF6F4UM7kC6x804xWl1xkIjI8I6I8E6xAIw20EY4v2 0xvaj40_Wr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7 IYx2IY67AKxVW7JVWDJwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xv wVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2kKe7AKxV WUAVWUtwAS0I0E0xvYzxvE52x082IY62kv0487Mc804VCY07AIYIkI8VC2zVCFFI0UMc02 F40EFcxC0VAKzVAqx4xG6I80ewAv7VACjcxG62k0Y48FwI0_Cr0_Gr1UMcIj6x8ErcxFaV Av8VW8uFyUJr1UMcIj6xkF7I0En7xvr7AKxVWxJVW8Jr1lOx8S6xCaFVCjc4AY6r1j6r4U M4x0Y48IcxkI7VAKI48JMxkF7I0En4kS14v26r1q6r43MxAIw28IcxkI7VAKI48JMxAIw2 8IcVCjz48v1sIEY20_GFW3Jr1UJwCFx2IqxVCFs4IE7xkEbVWUJVW8JwCFI7km07C267AK xVWUAVWUtwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67 AF67kF1VAFwI0_Jw0_GFylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI 42IY6xIIjxv20xvEc7CjxVAFwI0_Gr0_Cr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMI IF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVF xhVjvjDU0xZFpf9x07UJrcfUUUUU= X-CM-SenderInfo: rxsqjiqrssiko6kx23oohg3hdfq/1tbiAQsPAmYmbD8JSwAIse Translate dev-tools/kcov into Chinese and add it in dev-tools/zh_CN/index.rst. Signed-off-by: Haoyang Liu Reviewed-by: Yanteng Si Reviewed-by: Alex Shi --- .../translations/zh_CN/dev-tools/index.rst | 2 +- .../translations/zh_CN/dev-tools/kcov.rst | 359 ++++++++++++++++++ 2 files changed, 360 insertions(+), 1 deletion(-) create mode 100644 Documentation/translations/zh_CN/dev-tools/kcov.rst diff --git a/Documentation/translations/zh_CN/dev-tools/index.rst b/Documen= tation/translations/zh_CN/dev-tools/index.rst index 51e5b3e724c1..fa900f5beb68 100644 --- a/Documentation/translations/zh_CN/dev-tools/index.rst +++ b/Documentation/translations/zh_CN/dev-tools/index.rst @@ -22,6 +22,7 @@ Documentation/translations/zh_CN/dev-tools/testing-overvi= ew.rst sparse gcov kasan + kcov ubsan kmemleak gdb-kernel-debugging @@ -29,7 +30,6 @@ Documentation/translations/zh_CN/dev-tools/testing-overvi= ew.rst Todolist: =20 - coccinelle - - kcov - kcsan - kfence - kgdb diff --git a/Documentation/translations/zh_CN/dev-tools/kcov.rst b/Document= ation/translations/zh_CN/dev-tools/kcov.rst new file mode 100644 index 000000000000..629154df7121 --- /dev/null +++ b/Documentation/translations/zh_CN/dev-tools/kcov.rst @@ -0,0 +1,359 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: ../disclaimer-zh_CN.rst + +:Original: Documentation/dev-tools/kcov.rst +:Translator: =E5=88=98=E6=B5=A9=E9=98=B3 Haoyang Liu + +KCOV: =E7=94=A8=E4=BA=8E=E6=A8=A1=E7=B3=8A=E6=B5=8B=E8=AF=95=E7=9A=84=E4= =BB=A3=E7=A0=81=E8=A6=86=E7=9B=96=E7=8E=87 +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D + +KCOV =E4=BB=A5=E4=B8=80=E7=A7=8D=E9=80=82=E7=94=A8=E4=BA=8E=E8=A6=86=E7=9B= =96=E7=8E=87=E5=BC=95=E5=AF=BC=E7=9A=84=E6=A8=A1=E7=B3=8A=E6=B5=8B=E8=AF=95= =E7=9A=84=E5=BD=A2=E5=BC=8F=E6=94=B6=E9=9B=86=E5=92=8C=E6=9A=B4=E9=9C=B2=E5= =86=85=E6=A0=B8=E4=BB=A3=E7=A0=81=E8=A6=86=E7=9B=96=E7=8E=87=E4=BF=A1=E6=81= =AF=E3=80=82 +=E4=B8=80=E4=B8=AA=E6=AD=A3=E5=9C=A8=E8=BF=90=E8=A1=8C=E7=9A=84=E5=86=85= =E6=A0=B8=E7=9A=84=E8=A6=86=E7=9B=96=E7=8E=87=E6=95=B0=E6=8D=AE=E5=8F=AF=E4= =BB=A5=E9=80=9A=E8=BF=87 ``kcov`` =E8=B0=83=E8=AF=95=E6=96=87=E4=BB=B6=E5= =AF=BC=E5=87=BA=E3=80=82=E8=A6=86=E7=9B=96=E7=8E=87=E7=9A=84=E6=94=B6=E9=9B= =86=E6=98=AF=E5=9F=BA +=E4=BA=8E=E4=BB=BB=E5=8A=A1=E5=90=AF=E7=94=A8=E7=9A=84=EF=BC=8C=E5=9B=A0= =E6=AD=A4 KCOV =E5=8F=AF=E4=BB=A5=E7=B2=BE=E7=A1=AE=E6=8D=95=E8=8E=B7=E5=8D= =95=E4=B8=AA=E7=B3=BB=E7=BB=9F=E8=B0=83=E7=94=A8=E7=9A=84=E8=A6=86=E7=9B=96= =E7=8E=87=E3=80=82 + +=E8=A6=81=E6=B3=A8=E6=84=8F=E7=9A=84=E6=98=AF KCOV =E4=B8=8D=E6=98=AF=E4= =B8=BA=E4=BA=86=E6=94=B6=E9=9B=86=E5=B0=BD=E5=8F=AF=E8=83=BD=E5=A4=9A=E7=9A= =84=E8=A6=86=E7=9B=96=E7=8E=87=E6=95=B0=E6=8D=AE=E3=80=82=E8=80=8C=E6=98=AF= =E4=B8=BA=E4=BA=86=E6=94=B6=E9=9B=86=E7=9B=B8=E5=AF=B9=E7=A8=B3=E5=AE=9A=E7= =9A=84=E8=A6=86=E7=9B=96=E7=8E=87 +=EF=BC=8C=E8=BF=99=E6=98=AF=E7=B3=BB=E7=BB=9F=E8=B0=83=E7=94=A8=E8=BE=93= =E5=85=A5=E7=9A=84=E5=87=BD=E6=95=B0=E3=80=82=E4=B8=BA=E4=BA=86=E5=AE=8C=E6= =88=90=E8=BF=99=E4=B8=AA=E7=9B=AE=E6=A0=87=EF=BC=8C=E5=AE=83=E4=B8=8D=E6=94= =B6=E9=9B=86=E8=BD=AF=E7=A1=AC=E4=B8=AD=E6=96=AD=E7=9A=84=E8=A6=86=E7=9B=96= =E7=8E=87=EF=BC=88=E9=99=A4=E9=9D=9E=E7=A7=BB=E9=99=A4 +=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86=E8=A2=AB=E5=90=AF=E7=94=A8= =EF=BC=8C=E8=A7=81=E4=B8=8B=E6=96=87=EF=BC=89=E4=BB=A5=E5=8F=8A=E5=86=85=E6= =A0=B8=E4=B8=AD=E5=9B=BA=E6=9C=89=E7=9A=84=E4=B8=8D=E7=A1=AE=E5=AE=9A=E9=83= =A8=E5=88=86=E7=9A=84=E8=A6=86=E7=9B=96=E7=8E=87=EF=BC=88=E5=A6=82=E8=B0=83= =E5=BA=A6=E5=99=A8=EF=BC=8C=E9=94=81=E5=AE=9A=EF=BC=89 + +=E9=99=A4=E4=BA=86=E6=94=B6=E9=9B=86=E4=BB=A3=E7=A0=81=E8=A6=86=E7=9B=96= =E7=8E=87=EF=BC=8CKCOV =E8=BF=98=E6=94=B6=E9=9B=86=E6=93=8D=E4=BD=9C=E6=95= =B0=E6=AF=94=E8=BE=83=E7=9A=84=E8=A6=86=E7=9B=96=E7=8E=87=E3=80=82=E8=A7=81= "=E6=93=8D=E4=BD=9C=E6=95=B0=E6=AF=94=E8=BE=83=E6=94=B6=E9=9B=86" =E4=B8= =80=E8=8A=82 +=E6=9F=A5=E7=9C=8B=E8=AF=A6=E7=BB=86=E4=BF=A1=E6=81=AF=E3=80=82 + +=E9=99=A4=E4=BA=86=E4=BB=8E=E7=B3=BB=E7=BB=9F=E8=B0=83=E7=94=A8=E5=A4=84= =E7=90=86=E5=99=A8=E6=94=B6=E9=9B=86=E8=A6=86=E7=9B=96=E7=8E=87=E6=95=B0=E6= =8D=AE=EF=BC=8CKCOV =E8=BF=98=E4=BB=8E=E5=90=8E=E5=8F=B0=E5=86=85=E6=A0=B8= =E6=88=96=E8=BD=AF=E4=B8=AD=E6=96=AD=E4=BB=BB=E5=8A=A1=E4=B8=AD=E6=89=A7=E8= =A1=8C=E7=9A=84=E5=86=85=E6=A0=B8 +=E8=A2=AB=E6=A0=87=E6=B3=A8=E7=9A=84=E9=83=A8=E5=88=86=E6=94=B6=E9=9B=86= =E8=A6=86=E7=9B=96=E7=8E=87=E3=80=82=E8=A7=81 "=E8=BF=9C=E7=A8=8B=E8=A6=86= =E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86" =E4=B8=80=E8=8A=82=E6=9F=A5=E7=9C=8B= =E8=AF=A6=E7=BB=86=E4=BF=A1=E6=81=AF=E3=80=82 + +=E5=85=88=E5=86=B3=E6=9D=A1=E4=BB=B6 +-------- + +KCOV =E4=BE=9D=E8=B5=96=E7=BC=96=E8=AF=91=E5=99=A8=E6=8F=92=E6=A1=A9=EF=BC= =8C=E8=A6=81=E6=B1=82 GCC 6.1.0 =E5=8F=8A=E6=9B=B4=E9=AB=98=E7=89=88=E6=9C= =AC=E6=88=96=E8=80=85=E5=86=85=E6=A0=B8=E6=94=AF=E6=8C=81=E7=9A=84=E4=BB=BB= =E6=84=8F=E7=89=88=E6=9C=AC=E7=9A=84 Clang=E3=80=82 + +=E6=94=B6=E9=9B=86=E6=93=8D=E4=BD=9C=E6=95=B0=E6=AF=94=E8=BE=83=E7=9A=84= =E8=A6=86=E7=9B=96=E7=8E=87=E9=9C=80=E8=A6=81 GCC 8+ =E6=88=96=E8=80=85 Cla= ng=E3=80=82 + +=E4=B8=BA=E4=BA=86=E5=90=AF=E7=94=A8 KCOV=EF=BC=8C=E9=9C=80=E8=A6=81=E4=BD= =BF=E7=94=A8=E5=A6=82=E4=B8=8B=E5=8F=82=E6=95=B0=E9=85=8D=E7=BD=AE=E5=86=85= =E6=A0=B8:: + + CONFIG_KCOV=3Dy + +=E4=B8=BA=E4=BA=86=E5=90=AF=E7=94=A8=E6=93=8D=E4=BD=9C=E6=95=B0=E6=AF=94= =E8=BE=83=E8=A6=86=E7=9B=96=E7=8E=87=E7=9A=84=E6=94=B6=E9=9B=86=EF=BC=8C=E4= =BD=BF=E7=94=A8=E5=A6=82=E4=B8=8B=E5=8F=82=E6=95=B0:: + + CONFIG_KCOV_ENABLE_COMPARISONS=3Dy + +=E8=A6=86=E7=9B=96=E7=8E=87=E6=95=B0=E6=8D=AE=E5=8F=AA=E4=BC=9A=E5=9C=A8= =E8=B0=83=E8=AF=95=E6=96=87=E4=BB=B6=E7=B3=BB=E7=BB=9F=E8=A2=AB=E6=8C=82=E8= =BD=BD=E5=90=8E=E6=89=8D=E5=8F=AF=E4=BB=A5=E8=8E=B7=E5=8F=96:: + + mount -t debugfs none /sys/kernel/debug + +=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86 +---------- + +=E4=B8=8B=E9=9D=A2=E7=9A=84=E7=A8=8B=E5=BA=8F=E6=BC=94=E7=A4=BA=E4=BA=86= =E5=A6=82=E4=BD=95=E4=BD=BF=E7=94=A8 KCOV =E5=9C=A8=E4=B8=80=E4=B8=AA=E6=B5= =8B=E8=AF=95=E7=A8=8B=E5=BA=8F=E4=B8=AD=E6=94=B6=E9=9B=86=E5=8D=95=E4=B8=AA= =E7=B3=BB=E7=BB=9F=E8=B0=83=E7=94=A8=E7=9A=84=E8=A6=86=E7=9B=96=E7=8E=87=EF= =BC=9A + +.. code-block:: c + + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + + #define KCOV_INIT_TRACE _IOR('c', 1, unsigned long) + #define KCOV_ENABLE _IO('c', 100) + #define KCOV_DISABLE _IO('c', 101) + #define COVER_SIZE (64<<10) + + #define KCOV_TRACE_PC 0 + #define KCOV_TRACE_CMP 1 + + int main(int argc, char **argv) + { + int fd; + unsigned long *cover, n, i; + + /* =E5=8D=95=E4=B8=AA=E6=96=87=E4=BB=B6=E6=8F=8F=E8=BF=B0=E7=AC=A6=E5=85= =81=E8=AE=B8 + * =E5=9C=A8=E5=8D=95=E7=BA=BF=E7=A8=8B=E4=B8=8A=E6=94=B6=E9=9B=86=E8=A6= =86=E7=9B=96=E7=8E=87=E3=80=82 + */ + fd =3D open("/sys/kernel/debug/kcov", O_RDWR); + if (fd =3D=3D -1) + perror("open"), exit(1); + /* =E8=AE=BE=E7=BD=AE=E8=B7=9F=E8=B8=AA=E6=A8=A1=E5=BC=8F=E5=92=8C=E8=B7= =9F=E8=B8=AA=E5=A4=A7=E5=B0=8F=E3=80=82 */ + if (ioctl(fd, KCOV_INIT_TRACE, COVER_SIZE)) + perror("ioctl"), exit(1); + /* =E6=98=A0=E5=B0=84=E5=86=85=E6=A0=B8=E7=A9=BA=E9=97=B4=E5=92=8C=E7=94= =A8=E6=88=B7=E7=A9=BA=E9=97=B4=E5=85=B1=E4=BA=AB=E7=9A=84=E7=BC=93=E5=86=B2= =E5=8C=BA=E3=80=82 */ + cover =3D (unsigned long*)mmap(NULL, COVER_SIZE * sizeof(unsigned long), + PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if ((void*)cover =3D=3D MAP_FAILED) + perror("mmap"), exit(1); + /* =E5=9C=A8=E5=BD=93=E5=89=8D=E7=BA=BF=E7=A8=8B=E4=B8=AD=E5=90=AF=E7=94= =A8=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86=E3=80=82 */ + if (ioctl(fd, KCOV_ENABLE, KCOV_TRACE_PC)) + perror("ioctl"), exit(1); + /* =E5=9C=A8=E8=B0=83=E7=94=A8 ioctl() =E4=B9=8B=E5=90=8E=E9=87=8D=E7=BD= =AE=E8=A6=86=E7=9B=96=E7=8E=87=E3=80=82 */ + __atomic_store_n(&cover[0], 0, __ATOMIC_RELAXED); + /* =E8=B0=83=E7=94=A8=E7=9B=AE=E6=A0=87=E7=B3=BB=E7=BB=9F=E8=B0=83=E7=94= =A8=E3=80=82 */ + read(-1, NULL, 0); + /* =E8=AF=BB=E5=8F=96=E6=94=B6=E9=9B=86=E5=88=B0=E7=9A=84 PC =E7=9A=84=E6= =95=B0=E7=9B=AE=E3=80=82 */ + n =3D __atomic_load_n(&cover[0], __ATOMIC_RELAXED); + for (i =3D 0; i < n; i++) + printf("0x%lx\n", cover[i + 1]); + /* =E5=9C=A8=E5=BD=93=E5=89=8D=E7=BA=BF=E7=A8=8B=E4=B8=8A=E7=A6=81=E7=94= =A8=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86=E3=80=82=E5=9C=A8=E8=BF=99= =E4=B9=8B=E5=90=8E + * =E5=8F=AF=E4=BB=A5=E5=9C=A8=E5=85=B6=E4=BB=96=E7=BA=BF=E7=A8=8B=E4=B8= =8A=E6=94=B6=E9=9B=86=E8=A6=86=E7=9B=96=E7=8E=87 + */ + if (ioctl(fd, KCOV_DISABLE, 0)) + perror("ioctl"), exit(1); + /* =E9=87=8A=E6=94=BE=E8=B5=84=E6=BA=90 */ + if (munmap(cover, COVER_SIZE * sizeof(unsigned long))) + perror("munmap"), exit(1); + if (close(fd)) + perror("close"), exit(1); + return 0; + } + +=E5=9C=A8=E4=BD=BF=E7=94=A8 ``addr2line`` =E4=BC=A0=E8=BE=93=E5=90=8E=EF= =BC=8C=E7=A8=8B=E5=BA=8F=E8=BE=93=E5=87=BA=E5=BA=94=E8=AF=A5=E5=A6=82=E4=B8= =8B=E6=89=80=E7=A4=BA:: + + SyS_read + fs/read_write.c:562 + __fdget_pos + fs/file.c:774 + __fget_light + fs/file.c:746 + __fget_light + fs/file.c:750 + __fget_light + fs/file.c:760 + __fdget_pos + fs/file.c:784 + SyS_read + fs/read_write.c:562 + +=E5=A6=82=E6=9E=9C=E4=B8=80=E4=B8=AA=E7=A8=8B=E5=BA=8F=E9=9C=80=E8=A6=81= =E4=BB=8E=E5=A4=9A=E4=B8=AA=E7=BA=BF=E7=A8=8B=E6=94=B6=E9=9B=86=E8=A6=86=E7= =9B=96=E7=8E=87=EF=BC=88=E7=8B=AC=E7=AB=8B=E5=9C=B0=EF=BC=89=E3=80=82=E9=82= =A3=E4=B9=88=E6=AF=8F=E4=B8=AA=E7=BA=BF=E7=A8=8B=E9=83=BD=E9=9C=80=E8=A6=81= =E5=8D=95=E7=8B=AC=E6=89=93=E5=BC=80 +``/sys/kernel/debug/kcov``=E3=80=82 + +=E6=8E=A5=E5=8F=A3=E7=9A=84=E7=BB=86=E7=B2=92=E5=BA=A6=E5=85=81=E8=AE=B8= =E9=AB=98=E6=95=88=E7=9A=84=E5=88=9B=E5=BB=BA=E6=B5=8B=E8=AF=95=E8=BF=9B=E7= =A8=8B=E3=80=82=E5=8D=B3=EF=BC=8C=E4=B8=80=E4=B8=AA=E7=88=B6=E8=BF=9B=E7=A8= =8B=E6=89=93=E5=BC=80=E4=BA=86 +``/sys/kernel/debug/kcov``=EF=BC=8C=E5=90=AF=E7=94=A8=E4=BA=86=E8=BF=BD=E8= =B8=AA=E6=A8=A1=E5=BC=8F=EF=BC=8C=E6=98=A0=E5=B0=84=E4=BA=86=E8=A6=86=E7=9B= =96=E7=8E=87=E7=BC=93=E5=86=B2=E5=8C=BA=EF=BC=8C=E7=84=B6=E5=90=8E=E5=9C=A8= =E4=B8=80=E4=B8=AA=E5=BE=AA +=E7=8E=AF=E4=B8=AD=E5=88=9B=E5=BB=BA=E4=BA=86=E5=AD=90=E8=BF=9B=E7=A8=8B= =E3=80=82=E8=BF=99=E4=B8=AA=E5=AD=90=E8=BF=9B=E7=A8=8B=E5=8F=AA=E9=9C=80=E8= =A6=81=E5=90=AF=E7=94=A8=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86=E5=8D= =B3=E5=8F=AF=EF=BC=88=E5=BD=93=E4=B8=80=E4=B8=AA=E7=BA=BF=E7=A8=8B=E9=80=80= =E5=87=BA=E6=97=B6=E5=B0=86=E8=87=AA=E5=8A=A8=E7=A6=81 +=E7=94=A8=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86=EF=BC=89=E3=80=82 + +=E6=93=8D=E4=BD=9C=E6=95=B0=E6=AF=94=E8=BE=83=E6=94=B6=E9=9B=86 +-------------- + +=E6=93=8D=E4=BD=9C=E6=95=B0=E6=AF=94=E8=BE=83=E6=94=B6=E9=9B=86=E5=92=8C= =E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86=E7=B1=BB=E4=BC=BC=EF=BC=9A + +.. code-block:: c + + /* =E5=8C=85=E5=90=AB=E5=92=8C=E4=B8=8A=E6=96=87=E4=B8=80=E6=A0=B7=E7= =9A=84=E5=A4=B4=E6=96=87=E4=BB=B6=E5=92=8C=E5=AE=8F=E5=AE=9A=E4=B9=89=E3=80= =82 */ + + /* =E6=AF=8F=E6=AC=A1=E8=AE=B0=E5=BD=95=E7=9A=84 64 =E4=BD=8D=E5=AD=97= =E7=9A=84=E6=95=B0=E9=87=8F=E3=80=82 */ + #define KCOV_WORDS_PER_CMP 4 + + /* + * =E6=94=B6=E9=9B=86=E7=9A=84=E6=AF=94=E8=BE=83=E7=A7=8D=E7=B1=BB=E7= =9A=84=E6=A0=BC=E5=BC=8F=E3=80=82 + * + * 0 =E6=AF=94=E7=89=B9=E8=A1=A8=E7=A4=BA=E6=98=AF=E5=90=A6=E6=98=AF= =E4=B8=80=E4=B8=AA=E7=BC=96=E8=AF=91=E6=97=B6=E5=B8=B8=E9=87=8F=E3=80=82 + * 1 & 2 =E6=AF=94=E7=89=B9=E5=8C=85=E5=90=AB=E5=8F=82=E6=95=B0=E5=A4= =A7=E5=B0=8F=E7=9A=84 log2 =E5=80=BC=EF=BC=8C=E6=9C=80=E5=A4=A7 8 =E5=AD=97= =E8=8A=82=E3=80=82 + */ + + #define KCOV_CMP_CONST (1 << 0) + #define KCOV_CMP_SIZE(n) ((n) << 1) + #define KCOV_CMP_MASK KCOV_CMP_SIZE(3) + + int main(int argc, char **argv) + { + int fd; + uint64_t *cover, type, arg1, arg2, is_const, size; + unsigned long n, i; + + fd =3D open("/sys/kernel/debug/kcov", O_RDWR); + if (fd =3D=3D -1) + perror("open"), exit(1); + if (ioctl(fd, KCOV_INIT_TRACE, COVER_SIZE)) + perror("ioctl"), exit(1); + /* + * =E6=B3=A8=E6=84=8F=E7=BC=93=E5=86=B2=E5=8C=BA=E6=8C=87=E9=92=88=E7=9A= =84=E7=B1=BB=E5=9E=8B=E6=98=AF uint64_t*=EF=BC=8C=E5=9B=A0=E4=B8=BA=E6=89= =80=E6=9C=89=E7=9A=84 + * =E6=AF=94=E8=BE=83=E6=93=8D=E4=BD=9C=E6=95=B0=E9=83=BD=E8=A2=AB=E6=8F= =90=E5=8D=87=E4=B8=BA uint64_t =E7=B1=BB=E5=9E=8B=E3=80=82 + */ + cover =3D (uint64_t *)mmap(NULL, COVER_SIZE * sizeof(unsigned long), + PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if ((void*)cover =3D=3D MAP_FAILED) + perror("mmap"), exit(1); + /* =E6=B3=A8=E6=84=8F=E8=BF=99=E9=87=8C=E6=98=AF KCOV_TRACE_CMP =E8=80=8C= =E4=B8=8D=E6=98=AF KCOV_TRACE_PC=E3=80=82 */ + if (ioctl(fd, KCOV_ENABLE, KCOV_TRACE_CMP)) + perror("ioctl"), exit(1); + __atomic_store_n(&cover[0], 0, __ATOMIC_RELAXED); + read(-1, NULL, 0); + /* =E8=AF=BB=E5=8F=96=E6=94=B6=E9=9B=86=E5=88=B0=E7=9A=84=E6=AF=94=E8=BE= =83=E6=93=8D=E4=BD=9C=E6=95=B0=E7=9A=84=E6=95=B0=E9=87=8F=E3=80=82 */ + n =3D __atomic_load_n(&cover[0], __ATOMIC_RELAXED); + for (i =3D 0; i < n; i++) { + uint64_t ip; + + type =3D cover[i * KCOV_WORDS_PER_CMP + 1]; + /* arg1 =E5=92=8C arg2 - =E6=AF=94=E8=BE=83=E7=9A=84=E4=B8=A4=E4=B8=AA= =E6=93=8D=E4=BD=9C=E6=95=B0=E3=80=82 */ + arg1 =3D cover[i * KCOV_WORDS_PER_CMP + 2]; + arg2 =3D cover[i * KCOV_WORDS_PER_CMP + 3]; + /* ip - =E8=B0=83=E7=94=A8=E8=80=85=E7=9A=84=E5=9C=B0=E5=9D=80=E3=80=82 = */ + ip =3D cover[i * KCOV_WORDS_PER_CMP + 4]; + /* =E6=93=8D=E4=BD=9C=E6=95=B0=E7=9A=84=E5=A4=A7=E5=B0=8F=E3=80=82 */ + size =3D 1 << ((type & KCOV_CMP_MASK) >> 1); + /* is_const - =E5=BD=93=E6=93=8D=E4=BD=9C=E6=95=B0=E6=98=AF=E4=B8=80=E4= =B8=AA=E7=BC=96=E8=AF=91=E6=97=B6=E5=B8=B8=E9=87=8F=E6=97=B6=E4=B8=BA=E7=9C= =9F=E3=80=82*/ + is_const =3D type & KCOV_CMP_CONST; + printf("ip: 0x%lx type: 0x%lx, arg1: 0x%lx, arg2: 0x%lx, " + "size: %lu, %s\n", + ip, type, arg1, arg2, size, + is_const ? "const" : "non-const"); + } + if (ioctl(fd, KCOV_DISABLE, 0)) + perror("ioctl"), exit(1); + /* =E9=87=8A=E6=94=BE=E8=B5=84=E6=BA=90=E3=80=82 */ + if (munmap(cover, COVER_SIZE * sizeof(unsigned long))) + perror("munmap"), exit(1); + if (close(fd)) + perror("close"), exit(1); + return 0; + } + +=E6=B3=A8=E6=84=8F KCOV =E7=9A=84=E6=A8=A1=E5=BC=8F=EF=BC=88=E4=BB=A3=E7= =A0=81=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86=E6=88=96=E6=93=8D=E4=BD= =9C=E6=95=B0=E6=AF=94=E8=BE=83=E6=94=B6=E9=9B=86=EF=BC=89=E6=98=AF=E4=BA=92= =E6=96=A5=E7=9A=84=E3=80=82 + +=E8=BF=9C=E7=A8=8B=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86 +-------------- + +=E9=99=A4=E4=BA=86=E4=BB=8E=E7=94=A8=E6=88=B7=E7=A9=BA=E9=97=B4=E8=BF=9B= =E7=A8=8B=E5=8F=91=E5=B8=83=E7=9A=84=E7=B3=BB=E7=BB=9F=E8=B0=83=E7=94=A8=E5= =8F=A5=E6=9F=84=E6=94=B6=E9=9B=86=E8=A6=86=E7=9B=96=E7=8E=87=E6=95=B0=E6=8D= =AE=E4=BB=A5=E5=A4=96=EF=BC=8CKCOV =E4=B9=9F=E5=8F=AF=E4=BB=A5=E4=BB=8E=E9= =83=A8=E5=88=86=E5=9C=A8=E5=85=B6 +=E4=BB=96=E4=B8=8A=E4=B8=8B=E6=96=87=E4=B8=AD=E6=89=A7=E8=A1=8C=E7=9A=84= =E5=86=85=E6=A0=B8=E4=B8=AD=E6=94=B6=E9=9B=86=E8=A6=86=E7=9B=96=E7=8E=87 - = =E7=A7=B0=E4=B8=BA=E2=80=9C=E8=BF=9C=E7=A8=8B=E2=80=9D=E8=A6=86=E7=9B=96=E7= =8E=87=E3=80=82 + +=E4=BD=BF=E7=94=A8 KCOV =E6=94=B6=E9=9B=86=E8=BF=9C=E7=A8=8B=E8=A6=86=E7= =9B=96=E7=8E=87=E8=A6=81=E6=B1=82=EF=BC=9A + +1. =E4=BF=AE=E6=94=B9=E5=86=85=E6=A0=B8=E6=BA=90=E7=A0=81=E5=B9=B6=E4=BD= =BF=E7=94=A8 ``kcov_remote_start`` =E5=92=8C ``kcov_remote_stop`` =E6=9D=A5= =E6=A0=87=E6=B3=A8=E8=A6=81=E6=94=B6=E9=9B=86 + =E8=A6=86=E7=9B=96=E7=8E=87=E7=9A=84=E4=BB=A3=E7=A0=81=E7=89=87=E6=AE= =B5=E3=80=82 + +2. =E5=9C=A8=E7=94=A8=E6=88=B7=E7=A9=BA=E9=97=B4=E7=9A=84=E6=94=B6=E9=9B= =86=E8=A6=86=E7=9B=96=E7=8E=87=E7=9A=84=E8=BF=9B=E7=A8=8B=E5=BA=94=E4=BD=BF= =E7=94=A8 ``KCOV_REMOTE_ENABLE`` =E8=80=8C=E4=B8=8D=E6=98=AF ``KCOV_ENABLE`= `=E3=80=82 + +``kcov_remote_start`` =E5=92=8C ``kcov_remote_stop`` =E7=9A=84=E6=A0=87=E6= =B3=A8=E4=BB=A5=E5=8F=8A ``KCOV_REMOTE_ENABLE`` +ioctl =E9=83=BD=E6=8E=A5=E5=8F=97=E5=8F=AF=E4=BB=A5=E8=AF=86=E5=88=AB=E7= =89=B9=E5=AE=9A=E8=A6=86=E7=9B=96=E7=8E=87=E6=94=B6=E9=9B=86=E7=89=87=E6=AE= =B5=E7=9A=84=E5=8F=A5=E6=9F=84=E3=80=82=E5=8F=A5=E6=9F=84=E7=9A=84=E4=BD=BF= =E7=94=A8=E6=96=B9=E5=BC=8F=E5=8F=96=E5=86=B3=E4=BA=8E=E5=8C=B9=E9=85=8D=E4= =BB=A3=E7=A0=81=E7=89=87=E6=AE=B5=E6=89=A7 +=E8=A1=8C=E7=9A=84=E4=B8=8A=E4=B8=8B=E6=96=87=E3=80=82 + +KCOV =E6=94=AF=E6=8C=81=E5=9C=A8=E5=A6=82=E4=B8=8B=E4=B8=8A=E4=B8=8B=E6=96= =87=E4=B8=AD=E6=94=B6=E9=9B=86=E8=BF=9C=E7=A8=8B=E8=A6=86=E7=9B=96=E7=8E=87= =EF=BC=9A + +1. =E5=85=A8=E5=B1=80=E5=86=85=E6=A0=B8=E5=90=8E=E5=8F=B0=E4=BB=BB=E5=8A= =A1=E3=80=82=E8=BF=99=E4=BA=9B=E4=BB=BB=E5=8A=A1=E6=98=AF=E5=86=85=E6=A0=B8= =E5=90=AF=E5=8A=A8=E6=97=B6=E5=88=9B=E5=BB=BA=E7=9A=84=E6=95=B0=E9=87=8F=E6= =9C=89=E9=99=90=E7=9A=84=E5=AE=9E=E4=BE=8B=EF=BC=88=E5=A6=82=EF=BC=8C=E6=AF= =8F=E4=B8=80=E4=B8=AA + USB HCD =E4=BA=A7=E7=94=9F=E4=B8=80=E4=B8=AA USB ``hub_event`` =E5=B7= =A5=E4=BD=9C=E5=99=A8=EF=BC=89=E3=80=82 + +2. =E5=B1=80=E9=83=A8=E5=86=85=E6=A0=B8=E5=90=8E=E5=8F=B0=E4=BB=BB=E5=8A= =A1=E3=80=82=E8=BF=99=E4=BA=9B=E4=BB=BB=E5=8A=A1=E9=80=9A=E5=B8=B8=E6=98=AF= =E7=94=B1=E4=BA=8E=E7=94=A8=E6=88=B7=E7=A9=BA=E9=97=B4=E8=BF=9B=E7=A8=8B=E4= =B8=8E=E6=9F=90=E4=BA=9B=E5=86=85=E6=A0=B8=E6=8E=A5=E5=8F=A3=E8=BF=9B=E8=A1= =8C=E4=BA=A4=E4=BA=92=E6=97=B6=E4=BA=A7 + =E7=94=9F=E7=9A=84=EF=BC=8C=E5=B9=B6=E4=B8=94=E9=80=9A=E5=B8=B8=E5=9C= =A8=E8=BF=9B=E7=A8=8B=E9=80=80=E5=87=BA=E6=97=B6=E4=BC=9A=E8=A2=AB=E5=81=9C= =E6=AD=A2=EF=BC=88=E5=A6=82=EF=BC=8Cvhost =E5=B7=A5=E4=BD=9C=E5=99=A8=EF=BC= =89=E3=80=82 + +3. =E8=BD=AF=E4=B8=AD=E6=96=AD=E3=80=82 + +=E5=AF=B9=E4=BA=8E #1 =E5=92=8C #3=EF=BC=8C=E5=BF=85=E9=A1=BB=E9=80=89=E6= =8B=A9=E4=B8=80=E4=B8=AA=E7=8B=AC=E7=89=B9=E7=9A=84=E5=85=A8=E5=B1=80=E5=8F= =A5=E6=9F=84=E5=B9=B6=E5=B0=86=E5=85=B6=E4=BC=A0=E9=80=92=E7=BB=99=E5=AF=B9= =E5=BA=94=E7=9A=84 +``kcov_remote_start`` =E8=B0=83=E7=94=A8=E3=80=82=E4=B8=80=E4=B8=AA=E7=94= =A8=E6=88=B7=E7=A9=BA=E9=97=B4=E8=BF=9B=E7=A8=8B=E5=BF=85=E9=A1=BB=E5=B0=86= =E8=AF=A5=E5=8F=A5=E6=9F=84=E5=AD=98=E5=82=A8=E5=9C=A8 +``kcov_remote_arg`` =E7=BB=93=E6=9E=84=E4=BD=93=E7=9A=84 ``handle`` =E6=95= =B0=E7=BB=84=E5=AD=97=E6=AE=B5=E4=B8=AD=E5=B9=B6=E5=B0=86=E5=85=B6=E4=BC=A0= =E9=80=92=E7=BB=99 +``KCOV_REMOTE_ENABLE``=E3=80=82=E8=BF=99=E4=BC=9A=E5=B0=86=E4=BD=BF=E7=94= =A8=E7=9A=84 KCOV =E8=AE=BE=E5=A4=87=E9=99=84=E5=8A=A0=E5=88=B0=E7=94=B1=E6= =AD=A4=E5=8F=A5=E6=9F=84=E5=BC=95=E7=94=A8=E7=9A=84=E4=BB=A3=E7=A0=81=E7=89= =87=E6=AE=B5=E3=80=82=E5=A4=9A=E4=B8=AA=E5=85=A8=E5=B1=80 +=E5=8F=A5=E6=9F=84=E6=A0=87=E8=AF=86=E7=9A=84=E4=B8=8D=E5=90=8C=E4=BB=A3= =E7=A0=81=E7=89=87=E6=AE=B5=E5=8F=AF=E4=BB=A5=E4=B8=80=E6=AC=A1=E6=80=A7=E4= =BC=A0=E9=80=92=E3=80=82 + +=E5=AF=B9=E4=BA=8E #2=EF=BC=8C=E7=94=A8=E6=88=B7=E7=A9=BA=E9=97=B4=E8=BF= =9B=E7=A8=8B=E5=BF=85=E9=A1=BB=E9=80=9A=E8=BF=87 ``kcov_remote_arg`` =E7=BB= =93=E6=9E=84=E4=BD=93=E7=9A=84 ``common_handle`` =E5=AD=97=E6=AE=B5 +=E4=BC=A0=E9=80=92=E4=B8=80=E4=B8=AA=E9=9D=9E=E9=9B=B6=E5=8F=A5=E6=9F=84= =E3=80=82=E8=BF=99=E4=B8=AA=E9=80=9A=E7=94=A8=E5=8F=A5=E6=9F=84=E5=B0=86=E4= =BC=9A=E8=A2=AB=E4=BF=9D=E5=AD=98=E5=9C=A8=E5=BD=93=E5=89=8D ``task_struct`= ` =E7=BB=93=E6=9E=84=E4=BD=93=E7=9A=84 +``kcov_handle`` =E5=AD=97=E6=AE=B5=E4=B8=AD=E5=B9=B6=E4=B8=94=E9=9C=80=E8= =A6=81=E9=80=9A=E8=BF=87=E8=87=AA=E5=AE=9A=E4=B9=89=E5=86=85=E6=A0=B8=E4=BB= =A3=E7=A0=81=E7=9A=84=E4=BF=AE=E6=94=B9=E6=9D=A5=E4=BC=A0=E9=80=92=E7=BB=99= =E6=96=B0=E5=88=9B=E5=BB=BA=E7=9A=84=E6=9C=AC=E5=9C=B0=E4=BB=BB=E5=8A=A1 +=E3=80=82=E8=BF=99=E4=BA=9B=E4=BB=BB=E5=8A=A1=E9=9C=80=E8=A6=81=E5=9C=A8 `= `kcov_remote_start`` =E5=92=8C ``kcov_remote_stop`` =E6=A0=87=E6=B3=A8=E4= =B8=AD=E4=BE=9D=E6=AC=A1=E4=BD=BF=E7=94=A8=E4=BC=A0=E9=80=92=E8=BF=87=E6=9D= =A5=E7=9A=84 +=E5=8F=A5=E6=9F=84=E3=80=82 + +KCOV =E5=AF=B9=E5=85=A8=E5=B1=80=E5=8F=A5=E6=9F=84=E5=92=8C=E9=80=9A=E7=94= =A8=E5=8F=A5=E6=9F=84=E5=9D=87=E9=81=B5=E5=BE=AA=E4=B8=80=E4=B8=AA=E9=A2=84= =E5=AE=9A=E4=B9=89=E7=9A=84=E6=A0=BC=E5=BC=8F=E3=80=82=E6=AF=8F=E4=B8=80=E4= =B8=AA=E5=8F=A5=E6=9F=84=E9=83=BD=E6=98=AF=E4=B8=80=E4=B8=AA ``u64`` =E6=95= =B4=E5=BD=A2 +=E3=80=82=E5=BD=93=E5=89=8D=EF=BC=8C=E5=8F=AA=E6=9C=89=E6=9C=80=E9=AB=98= =E4=BD=8D=E5=92=8C=E4=BD=8E=E5=9B=9B=E4=BD=8D=E5=AD=97=E8=8A=82=E8=A2=AB=E4= =BD=BF=E7=94=A8=E3=80=82=E7=AC=AC 4-7 =E5=AD=97=E8=8A=82=E6=98=AF=E4=BF=9D= =E7=95=99=E4=BD=8D=E5=B9=B6=E4=B8=94=E5=80=BC=E5=BF=85=E9=A1=BB=E4=B8=BA 0= =E3=80=82 + +=E5=AF=B9=E4=BA=8E=E5=85=A8=E5=B1=80=E5=8F=A5=E6=9F=84=EF=BC=8C=E6=9C=80= =E9=AB=98=E4=BD=8D=E7=9A=84=E5=AD=97=E8=8A=82=E8=A1=A8=E7=A4=BA=E8=AF=A5=E5= =8F=A5=E6=9F=84=E5=B1=9E=E4=BA=8E=E7=9A=84=E5=AD=90=E7=B3=BB=E7=BB=9F=E7=9A= =84=E6=A0=87=E8=AF=86=E3=80=82=E6=AF=94=E5=A6=82=EF=BC=8CKCOV =E4=BD=BF=E7= =94=A8 ``1`` +=E8=A1=A8=E7=A4=BA USB =E5=AD=90=E7=B3=BB=E7=BB=9F=E7=B1=BB=E5=9E=8B=E3=80= =82=E5=85=A8=E5=B1=80=E5=8F=A5=E6=9F=84=E7=9A=84=E4=BD=8E 4 =E5=AD=97=E8=8A= =82=E8=A1=A8=E7=A4=BA=E5=AD=90=E7=B3=BB=E7=BB=9F=E4=B8=AD=E4=BB=BB=E5=8A=A1= =E5=AE=9E=E4=BE=8B=E7=9A=84=E6=A0=87=E8=AF=86=E3=80=82=E6=AF=94=E5=A6=82=EF= =BC=8C=E6=AF=8F=E4=B8=80 +=E4=B8=AA ``hub_event`` =E5=B7=A5=E4=BD=9C=E5=99=A8=E4=BD=BF=E7=94=A8 USB = =E6=80=BB=E7=BA=BF=E5=8F=B7=E4=BD=9C=E4=B8=BA=E4=BB=BB=E5=8A=A1=E5=AE=9E=E4= =BE=8B=E7=9A=84=E6=A0=87=E8=AF=86=E3=80=82 + +=E5=AF=B9=E4=BA=8E=E9=80=9A=E7=94=A8=E5=8F=A5=E6=9F=84=EF=BC=8C=E4=BD=BF= =E7=94=A8=E4=B8=80=E4=B8=AA=E4=BF=9D=E7=95=99=E5=80=BC ``0`` =E4=BD=9C=E4= =B8=BA=E5=AD=90=E7=B3=BB=E7=BB=9F=E6=A0=87=E8=AF=86=EF=BC=8C=E5=9B=A0=E4=B8= =BA=E8=BF=99=E4=BA=9B=E5=8F=A5=E6=9F=84=E4=B8=8D=E5=B1=9E=E4=BA=8E=E4=B8=80= =E4=B8=AA=E7=89=B9=E5=AE=9A +=E7=9A=84=E5=AD=90=E7=B3=BB=E7=BB=9F=E3=80=82=E9=80=9A=E7=94=A8=E5=8F=A5= =E6=9F=84=E7=9A=84=E4=BD=8E 4 =E5=AD=97=E8=8A=82=E7=94=A8=E4=BA=8E=E8=AF=86= =E5=88=AB=E6=9C=89=E7=94=A8=E6=88=B7=E8=BF=9B=E7=A8=8B=E7=94=9F=E6=88=90=E7= =9A=84=E6=89=80=E6=9C=89=E6=9C=AC=E5=9C=B0=E5=8F=A5=E6=9F=84=E7=9A=84=E9=9B= =86=E5=90=88=E5=AE=9E=E4=BE=8B=EF=BC=8C +=E8=AF=A5=E8=BF=9B=E7=A8=8B=E5=B0=86=E9=80=9A=E7=94=A8=E5=8F=A5=E6=9F=84= =E4=BC=A0=E9=80=92=E7=BB=99 ``KCOV_REMOTE_ENABLE``=E3=80=82 + +=E5=AE=9E=E9=99=85=E4=B8=8A=EF=BC=8C=E5=A6=82=E6=9E=9C=E5=8F=AA=E4=BB=8E= =E7=B3=BB=E7=BB=9F=E4=B8=AD=E7=9A=84=E5=8D=95=E4=B8=AA=E7=94=A8=E6=88=B7=E7= =A9=BA=E9=97=B4=E8=BF=9B=E7=A8=8B=E6=94=B6=E9=9B=86=E8=A6=86=E7=9B=96=E7=8E= =87=EF=BC=8C=E9=82=A3=E4=B9=88=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8=E4=BB=BB= =E6=84=8F=E5=80=BC=E4=BD=9C=E4=B8=BA=E9=80=9A=E7=94=A8 +=E5=8F=A5=E6=9F=84=E7=9A=84=E5=AE=9E=E4=BE=8B=E6=A0=87=E8=AF=86=E3=80=82= =E7=84=B6=E8=80=8C=EF=BC=8C=E5=A6=82=E6=9E=9C=E9=80=9A=E7=94=A8=E5=8F=A5=E6= =9F=84=E8=A2=AB=E5=A4=9A=E4=B8=AA=E7=94=A8=E6=88=B7=E7=A9=BA=E9=97=B4=E8=BF= =9B=E7=A8=8B=E4=BD=BF=E7=94=A8=EF=BC=8C=E6=AF=8F=E4=B8=AA=E8=BF=9B=E7=A8=8B= =E5=BF=85=E9=A1=BB=E4=BD=BF=E7=94=A8=E5=94=AF=E4=B8=80 +=E7=9A=84=E5=AE=9E=E4=BE=8B=E6=A0=87=E8=AF=86=E3=80=82=E4=B8=80=E4=B8=AA= =E9=80=89=E6=8B=A9=E6=98=AF=E4=BD=BF=E7=94=A8=E8=BF=9B=E7=A8=8B=E6=A0=87=E8= =AF=86=E4=BD=9C=E4=B8=BA=E9=80=9A=E7=94=A8=E5=8F=A5=E6=9F=84=E5=AE=9E=E4=BE= =8B=E7=9A=84=E6=A0=87=E8=AF=86=E3=80=82 + +=E4=B8=8B=E9=9D=A2=E7=9A=84=E7=A8=8B=E5=BA=8F=E6=BC=94=E7=A4=BA=E4=BA=86= =E5=A6=82=E4=BD=95=E4=BD=BF=E7=94=A8 KCOV =E4=BB=8E=E4=B8=80=E4=B8=AA=E7=94= =B1=E8=BF=9B=E7=A8=8B=E4=BA=A7=E7=94=9F=E7=9A=84=E6=9C=AC=E5=9C=B0=E4=BB=BB= =E5=8A=A1=E5=92=8C=E5=A4=84=E7=90=86 USB =E6=80=BB=E7=BA=BF=E7=9A=84=E5=85= =A8=E5=B1=80 +=E4=BB=BB=E5=8A=A1 #1 =E6=94=B6=E9=9B=86=E8=A6=86=E7=9B=96=E7=8E=87=EF=BC= =9A + +.. code-block:: c + + /* =E5=8C=85=E5=90=AB=E5=92=8C=E4=B8=8A=E6=96=87=E4=B8=80=E6=A0=B7=E7= =9A=84=E5=A4=B4=E6=96=87=E4=BB=B6=E5=92=8C=E5=AE=8F=E5=AE=9A=E4=B9=89=E3=80= =82 */ + + struct kcov_remote_arg { + __u32 trace_mode; + __u32 area_size; + __u32 num_handles; + __aligned_u64 common_handle; + __aligned_u64 handles[0]; + }; + + #define KCOV_INIT_TRACE _IOR('c', 1, unsigned long) + #define KCOV_DISABLE _IO('c', 101) + #define KCOV_REMOTE_ENABLE _IOW('c', 102, struct kcov_remote_arg) + + #define COVER_SIZE (64 << 10) + + #define KCOV_TRACE_PC 0 + + #define KCOV_SUBSYSTEM_COMMON (0x00ull << 56) + #define KCOV_SUBSYSTEM_USB (0x01ull << 56) + + #define KCOV_SUBSYSTEM_MASK (0xffull << 56) + #define KCOV_INSTANCE_MASK (0xffffffffull) + + static inline __u64 kcov_remote_handle(__u64 subsys, __u64 inst) + { + if (subsys & ~KCOV_SUBSYSTEM_MASK || inst & ~KCOV_INSTANCE_MASK) + return 0; + return subsys | inst; + } + + #define KCOV_COMMON_ID 0x42 + #define KCOV_USB_BUS_NUM 1 + + int main(int argc, char **argv) + { + int fd; + unsigned long *cover, n, i; + struct kcov_remote_arg *arg; + + fd =3D open("/sys/kernel/debug/kcov", O_RDWR); + if (fd =3D=3D -1) + perror("open"), exit(1); + if (ioctl(fd, KCOV_INIT_TRACE, COVER_SIZE)) + perror("ioctl"), exit(1); + cover =3D (unsigned long*)mmap(NULL, COVER_SIZE * sizeof(unsigned long), + PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if ((void*)cover =3D=3D MAP_FAILED) + perror("mmap"), exit(1); + + /* =E9=80=9A=E8=BF=87=E9=80=9A=E7=94=A8=E5=8F=A5=E6=9F=84=E5=92=8C USB = =E6=80=BB=E7=BA=BF #1 =E5=90=AF=E7=94=A8=E4=BB=A3=E7=A0=81=E8=A6=86=E7=9B= =96=E7=8E=87=E6=94=B6=E9=9B=86=E3=80=82 */ + arg =3D calloc(1, sizeof(*arg) + sizeof(uint64_t)); + if (!arg) + perror("calloc"), exit(1); + arg->trace_mode =3D KCOV_TRACE_PC; + arg->area_size =3D COVER_SIZE; + arg->num_handles =3D 1; + arg->common_handle =3D kcov_remote_handle(KCOV_SUBSYSTEM_COMMON, + KCOV_COMMON_ID); + arg->handles[0] =3D kcov_remote_handle(KCOV_SUBSYSTEM_USB, + KCOV_USB_BUS_NUM); + if (ioctl(fd, KCOV_REMOTE_ENABLE, arg)) + perror("ioctl"), free(arg), exit(1); + free(arg); + + /* + * =E5=9C=A8=E8=BF=99=E9=87=8C=E7=94=A8=E6=88=B7=E9=9C=80=E8=A6=81=E8=A7= =A6=E5=8F=91=E6=89=A7=E8=A1=8C=E4=B8=80=E4=B8=AA=E5=86=85=E6=A0=B8=E4=BB=A3= =E7=A0=81=E6=AE=B5 + * =E8=AF=A5=E4=BB=A3=E7=A0=81=E6=AE=B5=E8=A6=81=E4=B9=88=E4=BD=BF=E7=94= =A8=E9=80=9A=E7=94=A8=E5=8F=A5=E6=9F=84=E6=A0=87=E8=AF=86 + * =E8=A6=81=E4=B9=88=E8=A7=A6=E5=8F=91=E4=BA=86=E4=B8=80=E4=BA=9B USB = =E6=80=BB=E7=BA=BF #1 =E4=B8=8A=E7=9A=84=E4=B8=80=E4=BA=9B=E6=B4=BB=E5=8A= =A8=E3=80=82 + */ + sleep(2); + + n =3D __atomic_load_n(&cover[0], __ATOMIC_RELAXED); + for (i =3D 0; i < n; i++) + printf("0x%lx\n", cover[i + 1]); + if (ioctl(fd, KCOV_DISABLE, 0)) + perror("ioctl"), exit(1); + if (munmap(cover, COVER_SIZE * sizeof(unsigned long))) + perror("munmap"), exit(1); + if (close(fd)) + perror("close"), exit(1); + return 0; + } --=20 2.25.1