<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 26, 2017 at 1:45 AM, Renato Golin <span dir="ltr"><<a href="mailto:renato.golin@linaro.org" target="_blank">renato.golin@linaro.org</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">On 26 January 2017 at 00:08, Kostya Serebryany via llvm-dev<br>
<span class="gmail-"><<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
> I want implement an instrumentation that gets the current PC.<br>
> On x86_64 I can do it using inline asm (something like "lea (%%rip),%0"),<br>
> but I wonder if there is some more LLVM-ish way to do it, e.g. an intrinsic?<br>
<br>
</span>Hi Kostya,<br>
<br>
I'd also want something that GCC understands, as this code could end<br>
up there, too.<br>
<br>
The read_register intrinsic can be lowered by Clang from a number of<br>
different builtins, so we could easily "support" some already-existing<br>
GCC builtin for reading the PC, if you need to get it from C code.<br>
<br>
Right now, the read_register is locked at the stack pointer as a<br>
design decision. We do not know, nor we discussed the implications of<br>
that intrinsic for any other register on purpose. If you want to read<br>
the PC via a builtin, then we'll have to have that conversation one<br>
way or another.<br>
<br>
I strongly recommend you to use read_register, since support is<br>
already there (you only need to add "PC" to the list and everything<br>
works), and it's documented and the semantics are clear.<br></blockquote><div><br></div><div>hmm. I am not sure I understood you. The last two paragraphs seem to contradict each other. </div><div>So, you recommend to extend read_register to read the PC, or </div><div>"read_register is locked at the stack pointer as a design decision"?</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">
<br>
A way to convince people that reading the PC in certain cases is not<br>
just ok, but meaningful, is to create a piece of inline asm and show<br>
your case. It will certainly help the discussion to understand the<br>
constraints and limit support for the cases we know are safe.<br>
<br>
These are the original threads:<br>
<br>
<a href="http://lists.llvm.org/pipermail/llvm-dev/2014-March/071472.html" rel="noreferrer" target="_blank">http://lists.llvm.org/<wbr>pipermail/llvm-dev/2014-March/<wbr>071472.html</a><br>
<br>
<a href="http://lists.llvm.org/pipermail/llvm-dev/2014-March/071530.html" rel="noreferrer" target="_blank">http://lists.llvm.org/<wbr>pipermail/llvm-dev/2014-March/<wbr>071530.html</a><br>
<br>
cheers,<br>
--renato<br>
</blockquote></div><br></div></div>