<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><span class="vcard"><a class="email" href="mailto:i@maskray.me" title="Fangrui Song <i@maskray.me>"> <span class="fn">Fangrui Song</span></a>
</span> changed
          <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED INVALID - Possible mis-link of a binary when lld used as linker"
   href="https://bugs.llvm.org/show_bug.cgi?id=43618">bug 43618</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">Resolution</td>
           <td>---
           </td>
           <td>INVALID
           </td>
         </tr>

         <tr>
           <td style="text-align:right;">Status</td>
           <td>NEW
           </td>
           <td>RESOLVED
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED INVALID - Possible mis-link of a binary when lld used as linker"
   href="https://bugs.llvm.org/show_bug.cgi?id=43618#c32">Comment # 32</a>
              on <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED INVALID - Possible mis-link of a binary when lld used as linker"
   href="https://bugs.llvm.org/show_bug.cgi?id=43618">bug 43618</a>
              from <span class="vcard"><a class="email" href="mailto:i@maskray.me" title="Fangrui Song <i@maskray.me>"> <span class="fn">Fangrui Song</span></a>
</span></b>
        <pre>Works as intended.

In an as-needed case, libpthread.so is not in the DT_NEEDED list because there
is no non-weak relocation referencing it (__pthread_key_create references from
libstdc++.so.6 are weak)

Quote <a href="http://www.sco.com/developers/gabi/latest/ch4.symtab.html">http://www.sco.com/developers/gabi/latest/ch4.symtab.html</a>

<span class="quote">> The behavior of weak symbols in areas not specified by this document is implementation defined. Weak symbols are intended primarily for use in system software. Applications using weak symbols are unreliable since changes in the runtime environment might cause the execution to fail.</span >

In practice, a relocation referencing an undefined weak may or may not have a
dynamic relocation.

Arch Linux extra/clang enables -fPIE by default. The code sequence is like:

  cmpq   $0x0,__pthread_key_create@gotpcrel(%rip)

The linker will allocate a GOT entry and produce a dynamic relocation. At
runtime, if libpthread.so is loaded, the value is filled in.

With -no-pie LTO, llvm codegen (called by lld) will generate:

  movl $__pthread_key_create, %eax

The linker will resolve this at link time. At runtime, even if libpthread.so is
loaded, the value will not change.


The suggestion is already in my <a href="show_bug.cgi?id=43618#c20">comment #20</a>. Don't use unterminated
-Wl,--as-needed for -lpthread</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>