<div dir="ltr"><div>Hi,</div><div><br></div><div>thanks a lot Eli.</div><div><br></div><div>Now I see that the relocmodel is not the right piece of information needed here but the target flags (when coming from the backend) and the variant kind (when coming from the assembler). Looks like the former should be somehow lowered to the latter, does this make sense?<br></div><div><br></div><div>Kind regards,<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-07-10 20:08 GMT+02:00 Friedman, Eli <span dir="ltr"><<a href="mailto:efriedma@codeaurora.org" target="_blank">efriedma@codeaurora.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 7/10/2018 9:51 AM, Roger Ferrer Ibáñez via llvm-dev wrote:<br>
</span><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
H all,<br>
<br>
I'm looking at generating PIC code for RISC-V in the context of Linux. Not sure if anyone is working on this already, any inputs are very welcome.<br>
<br>
I'm now looking at function calls which in the RISCV backend are represented via two pseudoinstructions RISCV::TAIL and RISCV::CALL.<br>
<br>
Currently those pseudos are lowered in MCCodeEmitter. They are expanded into AUIPC and JALR instructions and the first one needs a relocation, which for a static reloc model is R_RISCV_CALL but for PIC code should be R_RISCV_CALL_PLT.<br>
</blockquote>
<br></span>
This is not really correct.  A direct call is represented using R_RISCV_CALL; a call through a PLT is represented with R_RISCV_CALL_PLT.  In a static relocation model, no calls use the PLT; with a PIC relocation model, some, but not all, calls use the PLT.<br>
<br>
In assembly, this is represented by changing the operand of the call instruction: a direct call is "call f", a call through the PLT is "call f@plt". In the MC layer, this is represented using MCSymbolRefExpr::VK_PLT.  In the LLVM backend, this is represented with a target-specifc flag (for example, X86II::MO_PLT).<span class="HOEnZb"><font color="#888888"><br>
<br>
-Eli<br>
<br>
-- <br>
Employee of Qualcomm Innovation Center, Inc.<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project<br>
<br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Roger Ferrer Ibáñez<br></div>
</div>