<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: "Courier New", monospace; font-size: 10pt; color: rgb(0, 0, 0);">
Fangrui,</div>
<div style="font-family: "Courier New", monospace; font-size: 10pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: "Courier New", monospace; font-size: 10pt; color: rgb(0, 0, 0);">
Thanks for the info.  I had made a change to llvm to emit the call to __tls_get_addr but wanted to see if lld could accommodate the current baseline.  I will revisit the llvm change.</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Fangrui Song <maskray@google.com><br>
<b>Sent:</b> Friday, December 27, 2019 11:48 AM<br>
<b>To:</b> Sid Manning <sidneym@quicinc.com><br>
<b>Cc:</b> ruiu@google.com <ruiu@google.com>; llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> [EXT] Re: [LLD][ELF] Symbol/Relocation manipulation.</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">On 2019-12-27, Sid Manning wrote:<br>
>I'd like to convert the following<br>
>call A@GDPLT  //R_HEX_GD_PLT_B22_PCREL<br>
><br>
>to <br>
>call __tls_get_addr  //R_HEX_B22_PCREL<br>
><br>
>"A" is a TLS variable and preceding code has prepared for the call.<br>
><br>
>When the R_HEX_GD_PLT_B22_PCREL is found it will initially point to the TLS<br>
>variable so at that point I'd like to define a __tls_get_addr symbol and update<br>
>the relocation's type and symbol to point to it.<br>
><br>
>Is there an existing mechanism to do this?  It would happen during relaxation I<br>
>guess.<br>
><br>
>Thanks,<br>
<br>
For newer psABI, it is recommended implementing TLSDESC directly. It is<br>
strictly superior to the traditional General Dynamic and Local Dynamic<br>
TLS models. This applies to RISC-V<br>
<a href="https://github.com/riscv/riscv-elf-psabi-doc/issues/94">https://github.com/riscv/riscv-elf-psabi-doc/issues/94</a> as well, which<br>
seems to copy from ARM or MIPS.<br>
<br>
<br>
If you have to implement the traditional General Dynamic and Local Dynamic TLS models (__tls_get_addr):<br>
<br>
call A@GDPLT  //R_HEX_GD_PLT_B22_PCREL<br>
-><br>
call __tls_get_addr  //R_HEX_B22_PCREL<br>
<br>
IMO the generated assembly should mention __tls_get_addr directly, i.e.<br>
the assembler should create an undefined symbol __tls_get_addr and<br>
create call-typed relocations which reference it.<br>
<br>
The linker should not be responsible for synthesizing a symbol called<br>
__tls_get_addr. No existing architecture (AFAIK) does this.<br>
</div>
</span></font></div>
</body>
</html>