<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:宋体;
        panose-1:2 1 6 0 3 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:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.gmail-apple-tab-span
        {mso-style-name:gmail-apple-tab-span;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
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">
<div class="WordSection1">
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Hi Kcc,<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Thank your advices.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal">>Start from switching from inline instrumentation to instrumentation with calls: <o:p></o:p></p>
<p class="MsoNormal">>With Clang that is "-mllvm -asan-instrumentation-with-call-threshold=0", gcc should have something similar. <o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I see the call-threshold option force to use the calls and have same effect as -fsanitize=kernel-address in below code. Thanks.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><a href="http://llvm.org/svn/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp">http://llvm.org/svn/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">line 1956:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">  bool UseCalls =<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">      CompileKernel ||<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">      (ClInstrumentationWithCallsThreshold >= 0 &&<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">       ToInstrument.size() > (unsigned)ClInstrumentationWithCallsThreshold);<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">>Obviously, there is a cost in performance. <o:p></o:p></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">The call cost to my firmware should be very low. (1) Not like CPU-intensive application, my firmware is
 an IO-intensive software, the boot performance bottleneck is usually because of slow IO response. If Asan instrumentation mainly bring overhead to CPU, it is not a big problem to my firmware. (2) Not like memory-intensive application, my firmware usually have
 sufficient system memory to use. If Asan mainly bring overhead to system memory consumption for shadow memory metadata, it is not a big problem for me too.
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">But my firmware usually care the code size, even in debug version. If my Asan-enabled firmware image size
 is too big, I cannot easily apply and run it on real HW.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">  <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal">>Clang (and recent gcc) also have a convenience flag -fsanitize=kernel-address:<o:p></o:p></p>
<p class="MsoNormal"><span class="gmail-apple-tab-span">>          </span>movq<span class="gmail-apple-tab-span">  
</span>%rdi, %rbx<o:p></o:p></p>
<p class="MsoNormal"><span class="gmail-apple-tab-span">>          </span>callq<span class="gmail-apple-tab-span">    
</span>__asan_load4_noabort<o:p></o:p></p>
<p class="MsoNormal"><span class="gmail-apple-tab-span">>          </span>movl<span class="gmail-apple-tab-span">   
</span>(%rbx), %eax<o:p></o:p></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I like the
</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">-fsanitize=kernel-address option, and I believe it better fit my firmware scenario rather than -fsanitize=address. I but after take a look at the current LLVM Asan implementation,
 I have some concerns that kernel-address might disable the global and stack instrumentations by default as below code. Does LLVM Asan really support -fsanitize=kernel-address to check glabal and stack buffer issues?</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><a href="http://llvm.org/svn/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp">http://llvm.org/svn/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp</a><o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">line 1723:<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">  // TODO(glider): temporarily disabled globals instrumentation for KASan.<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">  if (ClGlobals &&
</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:red">!CompileKernel</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">    Function *CtorFunc = M.getFunction(kAsanModuleCtorName);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">    assert(CtorFunc);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">    IRBuilder<> IRB(CtorFunc->getEntryBlock().getTerminator());<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">    Changed |= InstrumentGlobals(IRB, M);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">  }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Line2287:<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">  bool DoStackMalloc = ClUseAfterReturn &&
</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:red">!ASan.CompileKernel
</span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">&&<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">                       LocalStackSize <= kMaxStackMallocSize;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-align:justify;text-justify:inter-ideograph"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Thanks<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Steven<o:p></o:p></span></p>
</div>
</body>
</html>