<div dir="ltr"><div class="gmail_default"><div class="gmail_default">Should we have two versions of `__gcov_flush`?</div><div class="gmail_default"><br></div><div class="gmail_default">One version is visible outside a .so file,</div><div class="gmail_default">we use dlsym to find and call it to dump</div><div class="gmail_default">profile data of .so files, like Android.</div><div class="gmail_default"><br></div><div class="gmail_default">One version is hidden and must be called from another</div><div class="gmail_default">wrapper function in a .so file. An application that</div><div class="gmail_default">wants to flush .so file profile data will need to call</div><div class="gmail_default">those wrapper functions.</div><div class="gmail_default" style="font-size:small"><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 11, 2018 at 12:31 PM, Xinliang David Li <span dir="ltr"><<a href="mailto:xinliangli@gmail.com" target="_blank">xinliangli@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Wed, Apr 11, 2018 at 11:31 AM, Chih-Hung Hsieh via Phabricator via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">chh added a comment.<br>
<br>
Yes, calling `__gcov_flush` within .so files are different,<br>
but it's a revert of <a href="https://reviews.llvm.org/D38124" rel="noreferrer" target="_blank">https://reviews.llvm.org/D3812<wbr>4</a>.<br>
I think  <a href="https://bugs.llvm.org/show_bug.cgi?id=27224" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug<wbr>.cgi?id=27224</a><br>
can be fixed by hiding only llvm_gcda_* functions,<br>
without any change to `__gcov_flush`.<br>
<br></blockquote><div><br></div></span><div>The coverage dumping behavior for shared libraries (not dlopened) was also wrong before D38124. D38124 fixed the crash as well as the dumping bug.  </div><div><br></div><div>David </div><div><br></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
(1) Before <a href="https://reviews.llvm.org/D38124" rel="noreferrer" target="_blank">https://reviews.llvm.org/D3812<wbr>4</a>:<br>
<br>
- Calling `__gcov_flush` within .so or main function dumps to main gcda file.<br>
- Android's dlsym() lookup/call of `__gcov_flush` dumps to .so file specific gcda files.<br>
<br>
(2) After <a href="https://reviews.llvm.org/D38124" rel="noreferrer" target="_blank">https://reviews.llvm.org/D3812<wbr>4</a>:<br>
<br>
- Android's dlsym() cannot find/call `__gcov_flush`.<br>
- Calling `__gcov_flush` from main works as in (1).<br>
- Calling `__gcov_flush` from .so works differently; it will dump to .so specific gcda file, not the main one.<br>
<br>
(3) With this change, we revert `__gcov_flush` behavior back to (1).<br>
<br>
Is there any application that needs to call `__gcov_flush` within .so<br>
and expects the output to .so specific gcda file like in (2)?<br>
I think the behavior of (1) is more desirable.<br>
If a main program wants to dump to .so specific gcda file, like Android,<br>
it can use dlsym() to look up .so specific `__gcov_flush`.<br>
</span><div class="m_657533098261869455HOEnZb"><div class="m_657533098261869455h5"><br>
<br>
<a href="https://reviews.llvm.org/D45454" rel="noreferrer" target="_blank">https://reviews.llvm.org/D4545<wbr>4</a><br>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div></div>
</blockquote></div><br></div>