<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:PMingLiU;
        panose-1:2 1 6 1 0 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"\@PMingLiU";
        panose-1:2 1 6 1 0 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><a id="OWAAM770F79210BFA408D940A739B673F2963" href="mailto:spbrogan@outlook.com"><span style="font-family:"Calibri",sans-serif;text-decoration:none">@Sean Brogan</span></a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I go through the code <a href="https://github.com/microsoft/mu_basecore/commit/f6af51f856747faec5a9f78f5604a69211b5af2d#diff-52e599c27ab877ef616f244e8b26826a53853872acb894df4aeff99f48df373d">
Merged PR 5008: Initial implementation or code coverage on basecore u… · microsoft/mu_basecore@f6af51f (github.com)</a><o:p></o:p></p>
<p class="MsoNormal">It looks good from my view point.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a id="OWAAMB09408BA558D451496207A31EAC2CF76" href="mailto:michael.d.kinney@intel.com"><span style="font-family:"Calibri",sans-serif;text-decoration:none">@Kinney, Michael D</span></a><br>
<br>
Does that pytool plugin support viewing the code coverage visually in C source files?
<span style="background:yellow;mso-highlight:yellow">Yes</span><br>
<br>
Either HTML or preferably an Visual Studio Code plugin? <span style="background:yellow;mso-highlight:yellow">
I think it can be supported by both based on below change. Due to VScode plugin is auto scan *.</span><span style="background:yellow;mso-highlight:yellow">gcda and show the result in VScode source tree.</span><br>
<span style="background:yellow;mso-highlight:yellow"><a href="https://github.com/microsoft/mu_basecore/commit/f6af51f856747faec5a9f78f5604a69211b5af2d#diff-52e599c27ab877ef616f244e8b26826a53853872acb894df4aeff99f48df373d">Merged PR 5008: Initial implementation
 or code coverage on basecore u… · microsoft/mu_basecore@f6af51f (github.com)</a></span><span style="background:yellow;mso-highlight:yellow"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow">Flow for stuart_ci_build: (a) -> (b) -> (c) -> (d) -> (e) -> (f)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow">Flow for vscode extension
<a href="https://marketplace.visualstudio.com/items?itemName=JacquesLucke.gcov-viewer">
Gcov Viewer - Visual Studio Marketplace</a>:  (a) -> (b) -> (c) -> (d) -> (g)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow"><br>
(a) stuart_ci_build -p XXXPkg<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow">(b) Call Edk2/.pytool/Plugin/HostUnitTestCompilerPlugin/HostUnitTestCompilerPlugin.py<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow">(c) Call Edk2/BaseTools/Plugin/HostBasedUnitTestRunner/HostBasedUnitTestRunner.py<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow">(d)       execute Build/XXXPkg/**/*Test* -> generate *.gcda files<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow">(e)       use “lcov” tool to parse *.gcda<o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow">(f)        use “pycobertura” tool to generate index.html<br>
<br>
</span><span style="background:yellow;mso-highlight:yellow"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="background:yellow;mso-highlight:yellow">(g) vscode extension to parse *.gcda and show it on source code directly.</span><o:p></o:p></p>
<p class="MsoNormal"><br>
Can it be updated to support VS compilers tool? <span style="background:yellow;mso-highlight:yellow">
No, currently I don’t find a good way to generate code coverage for MSVC compiler</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Gua<o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Kinney, Michael D <michael.d.kinney@intel.com> <br>
<b>Sent:</b> Wednesday, September 14, 2022 9:52 AM<br>
<b>To:</b> Sean Brogan <spbrogan@outlook.com>; devel@edk2.groups.io; Guo, Gua <gua.guo@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com><br>
<b>Cc:</b> Sean Brogan <sean.brogan@microsoft.com>; Michael Kubacki <mikuback@linux.microsoft.com><br>
<b>Subject:</b> RE: [edk2-devel] [PATCH v2] UnitTestFrameworkPkg: Add code coverage support for GCC<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Does that pytool plugin support viewing the code coverage visually in C source files?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Either HTML or preferably an Visual Studio Code plugin?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Can it be updated to support VS compilers tool?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Mie<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Sean Brogan <<a href="mailto:spbrogan@outlook.com">spbrogan@outlook.com</a>>
<br>
<b>Sent:</b> Tuesday, September 13, 2022 6:18 PM<br>
<b>To:</b> <a href="mailto:devel@edk2.groups.io">devel@edk2.groups.io</a>; Guo, Gua <<a href="mailto:gua.guo@intel.com">gua.guo@intel.com</a>><br>
<b>Cc:</b> Kinney, Michael D <<a href="mailto:michael.d.kinney@intel.com">michael.d.kinney@intel.com</a>>; Sean Brogan <<a href="mailto:sean.brogan@microsoft.com">sean.brogan@microsoft.com</a>>; Michael Kubacki <<a href="mailto:mikuback@linux.microsoft.com">mikuback@linux.microsoft.com</a>><br>
<b>Subject:</b> Re: [edk2-devel] [PATCH v2] UnitTestFrameworkPkg: Add code coverage support for GCC<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>Hi Gua Guo,<o:p></o:p></p>
<p>I would propose that we make this easier for both the local user and the CI system to get coverage metrics. 
<o:p></o:p></p>
<p>Can you review this commit as it uses the same Edk2 plugins but adds code coverage support with GCC5:<o:p></o:p></p>
<p><a href="https://github.com/microsoft/mu_basecore/commit/f6af51f856747faec5a9f78f5604a69211b5af2d#diff-52e599c27ab877ef616f244e8b26826a53853872acb894df4aeff99f48df373d">Merged PR 5008: Initial implementation or code coverage on basecore u… · microsoft/mu_basecore@f6af51f
 (github.com)</a><o:p></o:p></p>
<p><o:p> </o:p></p>
<p>Thanks<o:p></o:p></p>
<p>Sean<o:p></o:p></p>
<p><o:p> </o:p></p>
<p> <o:p></o:p></p>
<div>
<p class="MsoNormal">On 9/13/2022 6:01 PM, Guo, Gua wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>From: Gua Guo <a href="mailto:gua.guo@intel.com"><gua.guo@intel.com></a><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>In order to collect code coverage after running executable<o:p></o:p></pre>
<pre>file, generate *.gcda and *.gcno file that require by lcov tool<o:p></o:p></pre>
<pre>to generate code coverage report.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Cc: Michael D Kinney <a href="mailto:michael.d.kinney@intel.com"><michael.d.kinney@intel.com></a><o:p></o:p></pre>
<pre>Cc: Sean Brogan <a href="mailto:sean.brogan@microsoft.com"><sean.brogan@microsoft.com></a><o:p></o:p></pre>
<pre>Cc: Bret Barkelew <a href="mailto:Bret.Barkelew@microsoft.com"><Bret.Barkelew@microsoft.com></a><o:p></o:p></pre>
<pre>Cc: Michael Kubacki <a href="mailto:mikuback@linux.microsoft.com"><mikuback@linux.microsoft.com></a><o:p></o:p></pre>
<pre>Signed-off-by: Gua Guo <a href="mailto:gua.guo@intel.com"><gua.guo@intel.com></a><o:p></o:p></pre>
<pre>---<o:p></o:p></pre>
<pre> UnitTestFrameworkPkg/ReadMe.md                        | 116 +++++++++++++++++++-<o:p></o:p></pre>
<pre> UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc |   2 +-<o:p></o:p></pre>
<pre> 2 files changed, 116 insertions(+), 2 deletions(-)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>diff --git a/UnitTestFrameworkPkg/ReadMe.md b/UnitTestFrameworkPkg/ReadMe.md<o:p></o:p></pre>
<pre>index e696412cb3..93fdacfc4a 100644<o:p></o:p></pre>
<pre>--- a/UnitTestFrameworkPkg/ReadMe.md<o:p></o:p></pre>
<pre>+++ b/UnitTestFrameworkPkg/ReadMe.md<o:p></o:p></pre>
<pre>@@ -361,7 +361,7 @@ RUNNING TEST SUITE: Int Safe Conversions Test Suite<o:p></o:p></pre>
<pre> ```<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> You can also, if you are so inclined, read the output from the exact instance of the test that was run during<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>-`stuart_ci_build`. The ouput file can be found on a path that looks like:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+`stuart_ci_build`. The output file can be found on a path that looks like:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> `Build/<Package>/HostTest/<Arch>/<TestName>.<TestSuiteName>.<Arch>.result.xml`<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>@@ -399,6 +399,120 @@ CMOCKA_XML_FILE=<absolute or relative path to output file><o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> This mode is used by the test running plugin to aggregate the results for CI test status reporting in the web view.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+### Enable Code Coverage for GCC host-based tests<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+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 running a particular test case. The extension consists of a set of scripts which build on the textual GCOV output to implement it.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Documentation for LCOV can be found here:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+https://lcov.readthedocs.io/<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+You can follow below steps to generate your code coverage report.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+```bash<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+user@linux_machine:~/_uefi$stuart_ci_build -c .pytool/CISettings.py TOOL_CHAIN_TAG=GCC5 -p MdePkg -t NOOPT<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+...<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+user@linux_machine:~/_uefi$lcov -c --rc lcov_branch_coverage=1 -o UnitTest.info -d Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Capturing coverage data from Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Found gcov version: 9.4.0<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Using intermediate gcov format<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Scanning Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/ for .gcda files ...<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Found 38 data files in Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/RShiftU64.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/Math64.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/SafeString.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/SwapBytes32.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/CpuDeadLoop.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/MultU64x64.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/LongJump.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/SetJump.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/BitField.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/String.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/DivU64x32Remainder.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/X64/GccInline.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/MultU64x32.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/MultS64x64.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/LinkedList.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/LShiftU64.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/DivU64x32.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/SwapBytes16.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/Unaligned.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseLib/UnitTestHostBaseLib/OUTPUT/CheckSum.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/CopyMem.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/MemLibGuid.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/CompareMemWrapper.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/SetMemWrapper.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/SetMem64Wrapper.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/MemLibGeneric.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/CopyMemWrapper.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/SetMem.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseMemoryLib/BaseMemoryLib/OUTPUT/ZeroMemWrapper.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BasePrintLib/BasePrintLib/OUTPUT/PrintLibInternal.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BasePrintLib/BasePrintLib/OUTPUT/PrintLib.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseSafeIntLib/BaseSafeIntLib/OUTPUT/SafeIntLib64.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Library/BaseSafeIntLib/BaseSafeIntLib/OUTPUT/SafeIntLib.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Test/UnitTest/Library/BaseLib/BaseLibUnitTestsHost/OUTPUT/Base64UnitTest.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Test/UnitTest/Library/BaseLib/BaseLibUnitTestsHost/OUTPUT/AutoGen.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLibHost/OUTPUT/SafeIntLibUintnIntnUnitTests64.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLibHost/OUTPUT/TestBaseSafeIntLib.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLibHost/OUTPUT/AutoGen.gcda<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+user@linux_machine:~/_uefi$genhtml UnitTest.info --branch-coverage -o Build/UnitTestReport<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Reading data file UnitTest.info<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Found 38 entries.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Found common filename prefix "~/_uefi/MdePkg/Library"<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Writing .css and .png files.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Generating output.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file ~/_uefi/Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/Test/UnitTest/Library/BaseLib/BaseLibUnitTestsHost/DEBUG/AutoGen.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file ~/_uefi/Build/MdePkg/HostTest/NOOPT_GCC5/X64/MdePkg/Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLibHost/DEBUG/AutoGen.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/Unaligned.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/CheckSum.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/BitField.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/DivU64x32.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/CpuDeadLoop.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/LongJump.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/MultU64x64.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/RShiftU64.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/SwapBytes32.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/SwapBytes16.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/SetJump.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/LinkedList.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/LShiftU64.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/SafeString.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/String.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/DivU64x32Remainder.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/MultS64x64.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/MultU64x32.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/Math64.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseLib/X64/GccInline.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/SetMemWrapper.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/CompareMemWrapper.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/SetMem64Wrapper.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/ZeroMemWrapper.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/CopyMemWrapper.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/CopyMem.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/SetMem.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/MemLibGuid.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseMemoryLib/MemLibGeneric.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BasePrintLib/PrintLib.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BasePrintLib/PrintLibInternal.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseSafeIntLib/SafeIntLib64.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file BaseSafeIntLib/SafeIntLib.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file ~/_uefi/MdePkg/Test/UnitTest/Library/BaseLib/Base64UnitTest.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file ~/_uefi/MdePkg/Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Processing file ~/_uefi/MdePkg/Test/UnitTest/Library/BaseSafeIntLib/SafeIntLibUintnIntnUnitTests64.c<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Writing directory view page.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+Overall coverage rate:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+  lines......: 58.6% (2688 of 4589 lines)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+  functions..: 57.1% (249 of 436 functions)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+  branches...: 25.3% (1062 of 4195 branches)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+...<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+```<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> ### Important Note<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> This works on both Windows and Linux, but is currently limited to x64 architectures. Working on getting others, but we<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>diff --git a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc<o:p></o:p></pre>
<pre>index 4dd8d4ac67..8623aecb33 100644<o:p></o:p></pre>
<pre>--- a/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc<o:p></o:p></pre>
<pre>+++ b/UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc<o:p></o:p></pre>
<pre>@@ -19,7 +19,7 @@<o:p></o:p></pre>
<pre>   MemoryAllocationLib|UnitTestFrameworkPkg/Library/Posix/MemoryAllocationLibPosix/MemoryAllocationLibPosix.inf<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> <o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> [BuildOptions]<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>-  GCC:*_*_*_CC_FLAGS = -fno-pie<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>+  GCC:*_*_*_CC_FLAGS = -fno-pie -ftest-coverage -fprofile-arcs<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre> !ifdef $(UNIT_TESTING_DEBUG)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>   MSFT:*_*_*_CC_FLAGS  = -D UNIT_TESTING_DEBUG=1<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>   GCC:*_*_*_CC_FLAGS   = -D UNIT_TESTING_DEBUG=1<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
</blockquote>
</div>
</div>
</body>
</html>


 <div width="1" style="color:white;clear:both">_._,_._,_</div> <hr>   Groups.io Links:<p>   You receive all messages sent to this group.    <p> <a target="_blank" href="https://edk2.groups.io/g/devel/message/93735">View/Reply Online (#93735)</a> |    |  <a target="_blank" href="https://groups.io/mt/93669135/1813853">Mute This Topic</a>  | <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>    <a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> | <a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |  <a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>  [edk2-devel-archive@redhat.com]<br> <div width="1" style="color:white;clear:both">_._,_._,_</div>