From nobody Sat Apr 20 11:49:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+93730+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93730+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1663117289; cv=none; d=zohomail.com; s=zohoarc; b=W89Szxjf0vUHZlWPOEUR+rl0riS85iMVv73HJqvjI1rz812tNWLtn/n7ePDgu4uDEX36lSgubgVWqQ72s7UWdFxTzjIydYXnsss/jkmRCQSLOng0Q58FRX6k9zP/foOgYqgDejGlxIaUqQMu4WxcSBsj5N/H7lkfkOWXC4r8Fvs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1663117289; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To; bh=hgjs8kX5lSwuo2ZDjFjFuW/EJTz1USh1z7Phm2PnET4=; b=iIfmOZMC9KUgWMbIpLlqmAmsv07EheFcCEg5xFj6iQTHlSM9vbxn0IbqrSLRCoBn2sMUB7ZvoCiHE6TsogAEr1uGLPwDJGBqa06ujQvD+cZ9azLBmSvq56lQFdrSOYhGmWMfnuN0S2c2bJ3YIogsJnMgI3hL1EBSDTsRI+o2fjY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93730+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1663117289017848.7309350417603; Tue, 13 Sep 2022 18:01:29 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id kOJoYY1788612xCzWfIGOtUh; Tue, 13 Sep 2022 18:01:27 -0700 X-Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web09.1020.1663117286868446793 for ; Tue, 13 Sep 2022 18:01:27 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10469"; a="384593109" X-IronPort-AV: E=Sophos;i="5.93,313,1654585200"; d="scan'208";a="384593109" X-Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Sep 2022 18:01:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,313,1654585200"; d="scan'208";a="619131154" X-Received: from gguo-desk.gar.corp.intel.com ([10.5.215.23]) by fmsmga007.fm.intel.com with ESMTP; 13 Sep 2022 18:01:24 -0700 From: "Guo, Gua" To: devel@edk2.groups.io Cc: Gua Guo , Michael D Kinney , Sean Brogan , Bret Barkelew , Michael Kubacki Subject: [edk2-devel] [PATCH v2] UnitTestFrameworkPkg: Add code coverage support for GCC Date: Wed, 14 Sep 2022 09:01:18 +0800 Message-Id: <20220914010118.1643-1-gua.guo@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,gua.guo@intel.com X-Gm-Message-State: CtvjeB7wg7lnbwKE3CxlkqV9x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1663117287; bh=wqliQyih+uAsfcmcmAWLWawcx8gsjVkwAaT1gn2Sgdc=; h=Cc:Date:From:Reply-To:Subject:To; b=p8A1q1u51rmbHkNz4U/FrkQDRhUpMfio7pFIe2julM0YR2/QqPhHXQ5szd+COWauHdt 0+8ahVqj/fI+xB3AxelKebukybd59drY80X3+AXufbez2pz077aMXIzY0rSVE6U4YnqRX X0GqSM5JLXJTFBr99WY20aopbThGsdrqzyA= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1663117290564100002 Content-Type: text/plain; charset="utf-8" From: Gua Guo In order to collect code coverage after running executable file, generate *.gcda and *.gcno file that require by lcov tool to generate code coverage report. Cc: Michael D Kinney Cc: Sean Brogan Cc: Bret Barkelew Cc: Michael Kubacki Signed-off-by: Gua Guo --- UnitTestFrameworkPkg/ReadMe.md | 116 ++++++++++++++= +++++- UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc | 2 +- 2 files changed, 116 insertions(+), 2 deletions(-) diff --git a/UnitTestFrameworkPkg/ReadMe.md b/UnitTestFrameworkPkg/ReadMe.md index e696412cb3..93fdacfc4a 100644 --- a/UnitTestFrameworkPkg/ReadMe.md +++ b/UnitTestFrameworkPkg/ReadMe.md @@ -361,7 +361,7 @@ RUNNING TEST SUITE: Int Safe Conversions Test Suite ``` =20 You can also, if you are so inclined, read the output from the exact insta= nce of the test that was run during -`stuart_ci_build`. The ouput file can be found on a path that looks like: +`stuart_ci_build`. The output file can be found on a path that looks like: =20 `Build//HostTest//...result.= xml` =20 @@ -399,6 +399,120 @@ CMOCKA_XML_FILE=3D =20 This mode is used by the test running plugin to aggregate the results for = CI test status reporting in the web view. =20 +### Enable Code Coverage for GCC host-based tests + +LCOV is an extension of GCOV, a GNU tool which provides information about = what parts of a program are actually executed (i.e. "covered") while runnin= g a particular test case. The extension consists of a set of scripts which = build on the textual GCOV output to implement it. + +Documentation for LCOV can be found here: +https://lcov.readthedocs.io/ + +You can follow below steps to generate your code coverage report. + + + +```bash +user@linux_machine:~/_uefi$stuart_ci_build -c .pytool/CISettings.py TOOL_C= HAIN_TAG=3DGCC5 -p MdePkg -t NOOPT +... +user@linux_machine:~/_uefi$lcov -c --rc lcov_branch_coverage=3D1 -o UnitTe= st.info -d Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/ +Capturing coverage data from Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/ +Found gcov version: 9.4.0 +Using intermediate gcov format +Scanning Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/ for .gcda files ... +Found 38 data files in Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/ +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/RShiftU64.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/Math64.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/SafeString.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/SwapBytes32.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/CpuDeadLoop.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/MultU64x64.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/LongJump.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/SetJump.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/BitField.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/String.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/DivU64x32Remainder.g= cda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/X64/GccInline.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/MultU64x32.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/MultS64x64.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/LinkedList.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/LShiftU64.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/DivU64x32.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/SwapBytes16.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/Unaligned.gcda +Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/CheckSum.gcda +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/CopyMem.gcda +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/MemLibGuid.gcda +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/CompareMemWrapper.gc= da +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/SetMemWrapper.gcda +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/SetMem64Wrapper.gcda +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/MemLibGeneric.gcda +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/CopyMemWrapper.gcda +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/SetMem.gcda +Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/ZeroMemWrapper.gcda +Processing Library/BasePrintLib/BasePrintLib/OUTPUT/PrintLibInternal.gcda +Processing Library/BasePrintLib/BasePrintLib/OUTPUT/PrintLib.gcda +Processing Library/BaseSafeIntLib/BaseSafeIntLib/OUTPUT/SafeIntLib64.gcda +Processing Library/BaseSafeIntLib/BaseSafeIntLib/OUTPUT/SafeIntLib.gcda +Processing Test/UnitTest/Library/BaseLib/BaseLibUnitTestsHost/OUTPUT/Base6= 4UnitTest.gcda +Processing Test/UnitTest/Library/BaseLib/BaseLibUnitTestsHost/OUTPUT/AutoG= en.gcda +Processing Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLibHost/OUT= PUT/SafeIntLibUintnIntnUnitTests64.gcda +Processing Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLibHost/OUT= PUT/TestBaseSafeIntLib.gcda +Processing Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLibHost/OUT= PUT/AutoGen.gcda + +user@linux_machine:~/_uefi$genhtml UnitTest.info --branch-coverage -o Buil= d/UnitTestReport + +Reading data file UnitTest.info +Found 38 entries. +Found common filename prefix "~/_uefi/MdePkg/Library" +Writing .css and .png files. +Generating output. +Processing file ~/_uefi/Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/Test/U= nitTest/Library/BaseLib/BaseLibUnitTestsHost/DEBUG/AutoGen.c +Processing file ~/_uefi/Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/Test/U= nitTest/Library/BaseSafeIntLib/TestBaseSafeIntLibHost/DEBUG/AutoGen.c +Processing file BaseLib/Unaligned.c +Processing file BaseLib/CheckSum.c +Processing file BaseLib/BitField.c +Processing file BaseLib/DivU64x32.c +Processing file BaseLib/CpuDeadLoop.c +Processing file BaseLib/LongJump.c +Processing file BaseLib/MultU64x64.c +Processing file BaseLib/RShiftU64.c +Processing file BaseLib/SwapBytes32.c +Processing file BaseLib/SwapBytes16.c +Processing file BaseLib/SetJump.c +Processing file BaseLib/LinkedList.c +Processing file BaseLib/LShiftU64.c +Processing file BaseLib/SafeString.c +Processing file BaseLib/String.c +Processing file BaseLib/DivU64x32Remainder.c +Processing file BaseLib/MultS64x64.c +Processing file BaseLib/MultU64x32.c +Processing file BaseLib/Math64.c +Processing file BaseLib/X64/GccInline.c +Processing file BaseMemoryLib/SetMemWrapper.c +Processing file BaseMemoryLib/CompareMemWrapper.c +Processing file BaseMemoryLib/SetMem64Wrapper.c +Processing file BaseMemoryLib/ZeroMemWrapper.c +Processing file BaseMemoryLib/CopyMemWrapper.c +Processing file BaseMemoryLib/CopyMem.c +Processing file BaseMemoryLib/SetMem.c +Processing file BaseMemoryLib/MemLibGuid.c +Processing file BaseMemoryLib/MemLibGeneric.c +Processing file BasePrintLib/PrintLib.c +Processing file BasePrintLib/PrintLibInternal.c +Processing file BaseSafeIntLib/SafeIntLib64.c +Processing file BaseSafeIntLib/SafeIntLib.c +Processing file ~/_uefi/MdePkg/Test/UnitTest/Library/BaseLib/Base64UnitTes= t.c +Processing file ~/_uefi/MdePkg/Test/UnitTest/Library/BaseSafeIntLib/TestBa= seSafeIntLib.c +Processing file ~/_uefi/MdePkg/Test/UnitTest/Library/BaseSafeIntLib/SafeIn= tLibUintnIntnUnitTests64.c +Writing directory view page. +Overall coverage rate: + lines......: 58.6% (2688 of 4589 lines) + functions..: 57.1% (249 of 436 functions) + branches...: 25.3% (1062 of 4195 branches) + +... + +``` + ### Important Note =20 This works on both Windows and Linux, but is currently limited to x64 arch= itectures. Working on getting others, but we diff --git a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc b/UnitTe= stFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc index 4dd8d4ac67..8623aecb33 100644 --- a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc +++ b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc @@ -19,7 +19,7 @@ MemoryAllocationLib|UnitTestFrameworkPkg/Library/Posix/MemoryAllocationL= ibPosix/MemoryAllocationLibPosix.inf =20 [BuildOptions] - GCC:*_*_*_CC_FLAGS =3D -fno-pie + GCC:*_*_*_CC_FLAGS =3D -fno-pie -ftest-coverage -fprofile-arcs !ifdef $(UNIT_TESTING_DEBUG) MSFT:*_*_*_CC_FLAGS =3D -D UNIT_TESTING_DEBUG=3D1 GCC:*_*_*_CC_FLAGS =3D -D UNIT_TESTING_DEBUG=3D1 --=20 2.31.1.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#93730): https://edk2.groups.io/g/devel/message/93730 Mute This Topic: https://groups.io/mt/93669135/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-