<div dir="ltr">Last I was aware xray's basically unmaintained - so probably the "current status" is whatever's checked in and not much more than that.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jul 1, 2021 at 11:48 AM Billie Alsup (balsup) via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></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" style="overflow-wrap: break-word;">
<div class="gmail-m_9066139023355063237WordSection1">
<p class="MsoNormal"><span style="font-size:11pt">I've come across an email thread from 2018 regarding xray support for shared libraries.  Is there a current status on this effort?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">If this is not in active development, has there been any analysis on the effort required to add such support?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I have experimented with clang-12 and see that shared library functions are still not patched automatically via patch_premain.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I have not yet looked at any APIs that might allow me to pass in a shared-library-specific table of addresses to patch.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Similarly, it is unclear how function ids should be adjusted (if necessary) to be globally unique across shared objects.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I'm not even sure what kind of APIs would be needed.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Should patch/unpatch be global in nature, or should we be able to target a specific shared library (or set of shared libraries)?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I do see an API to patch/unpatch an individual function, but it is unclear if that would actually work against a function in a shared library due to the single XrayInstrMap involved.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Should APIs take such a map as a parameter?  Should a new dynamic XrayInstrMap be computed with all preloaded shared libraries?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">How should dlopen'd libraries be handled?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I also note that even with -fxray-instrument, the shared library does not automatically get the xray support functions from compiler-rt.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">That has implications for dlopen'd libraries without an xray-enabled primary elf object.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">For example, trying to get statistics from an xray-instrumented shared library loaded from python.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">I'm guessing this is just the tip of the iceberg, and am hoping there is already a design, or perhaps some discussion about the issues involved with supporting shared libraries.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Ideally, someone would come back and say it is already being worked, and will be available in release X !<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Where might I find information related to this topic?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><a href="https://llvm.org/docs/XRay.html" target="_blank">https://llvm.org/docs/XRay.html</a> mentions a number of ongoing efforts for expanding the toolset, but doesn't link to them.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><a href="https://llvm.org/docs/XRayExample.html" target="_blank">https://llvm.org/docs/XRayExample.html</a> has some Next Steps, but doesn't mention shared libraries.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt">Is there another wiki that goes into more detail?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt"><u></u> <u></u></span></p>
</div>
</div>

_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>