<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 26, 2016 at 7:42 AM, Shi, Steven <span dir="ltr"><<a href="mailto:steven.shi@intel.com" target="_blank">steven.shi@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_-5462166272057945765m_-1318851623204417530WordSection1">
<p class="MsoNormal">Hi Kcc,<u></u><u></u></p>
<p class="MsoNormal">I’m trying enabling the Asan in my firmware, but I find the asan instrumentation code size impact is too big for me. I just implement necessary firmware version runtime library functions (e.g. __asan_report_load8) with blank body firstly
 to pass the asan enabled build, but I find the new binary code size is already ~2.5 times as original one with asan disabled in GCC. I know Linux kernel already enabled the asan (a.k.a Kasan), and is there any magic of asan for Linux to control its code size
 impact?</p></div></div></blockquote><div><br></div><div>I don't think there is much magic. </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div class="gmail-m_-5462166272057945765m_-1318851623204417530WordSection1"><p class="MsoNormal"> Please advise how to mitigate the asan code size overhead.</p></div></div></blockquote><div><br></div><div>First, need to figure out what parts of instrumentation increase the code size the most. </div><div>Start from switching from inline instrumentation to instrumentation with calls: </div><div>With Clang that is "-mllvm -asan-instrumentation-with-call-threshold=0", gcc should have something similar. </div><div>W/o this flag the instrumentation will look like this:</div><div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>.cfi_def_cfa_offset 16</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>movq<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>%rdi, %rax</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>shrq<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>$3, %rax</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>movb<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>2147450880(%rax), %al</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>testb<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>%al, %al</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>jne<span class="gmail-Apple-tab-span" style="white-space:pre">   </span>.LBB0_1</div><div>.LBB0_3:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>movl<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>(%rdi), %eax</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>popq<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>%rcx</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>retq</div><div>.LBB0_1:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">    </span>movl<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>%edi, %ecx</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>andl<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>$7, %ecx</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>addl<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>$3, %ecx</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>cmpb<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>%al, %cl</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>jl<span class="gmail-Apple-tab-span" style="white-space:pre">    </span>.LBB0_3</div><div># BB#2:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>callq<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>__asan_report_load4</div></div><div><br></div><div>With this flag it will look like this:</div><div><div><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>movq<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>%rdi, %rbx</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>callq<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>__asan_load4</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>movl<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>(%rbx), %eax</div></div><div><br></div><div>Obviously, there is a cost in performance. </div><div><br></div><div>Clang (and recent gcc) also have a convenience flag -fsanitize=kernel-address:</div><div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>movq<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>%rdi, %rbx</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>callq<span class="gmail-Apple-tab-span" style="white-space:pre"> </span>__asan_load4_noabort</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">   </span>movl<span class="gmail-Apple-tab-span" style="white-space:pre">  </span>(%rbx), %eax</div></div><div><br></div><div>If that does not solve your code size problem, let's look at it more. </div><div><br></div><div>--kcc </div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div class="gmail-m_-5462166272057945765m_-1318851623204417530WordSection1"><p class="MsoNormal"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:arial,sans-serif">Steven Shi</span></b><b><span style="font-size:10pt;font-family:arial,sans-serif"><u></u><u></u></span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:arial,sans-serif">Intel\SSG\STO\UEFI Firmware</span></b><b><span style="font-size:12pt;font-family:arial,sans-serif"><u></u><u></u></span></b></p>
<p class="MsoNormal"><b><span style="font-family:arial,sans-serif"><u></u> <u></u></span></b></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9pt;font-family:arial,sans-serif">Tel: <a href="tel:+86%2021%206116%206522" value="+862161166522" target="_blank">+86 021-61166522</a><u></u><u></u></span></p>
<p class="MsoNormal" style="text-align:justify"><span style="font-size:9pt;font-family:arial,sans-serif">iNet: 821-6522<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

</blockquote></div><br></div></div>