<div dir="ltr">Hi Johan,<div><br></div><div>Right, per the bug this is fixed in lld (and was already handled in gold-plugin), but I guess not in ld64. Note that lld and gold-plugin use the new LTO API, while ld64 (and probably other linkers) are still using the legacy libLTO (which is what ThinLTOCodeGenerator.cpp is part of). Fixing it in the location you propose could work for all legacy libLTO users. But I don't think that adding just the size will (always) be enough to disambiguate (couldn't the 2 same named members have the same size?) - although lld is doing the same thing so this may be as good as what is done there. For gold-plugin we add the byte offset into the archive where the member starts, which will be unique.</div><div>+davide for thoughts since he fixed it on the lld side.</div><div><br></div><div>Teresa</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 5, 2017 at 1:09 PM, Johan Engelen via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi all,</div><div>  I have a static library with object files with the same name (not the same full path, but the archive made with llvm-ar does not store the full path). The library contains object files that have been compiled with `-flto=thin` (compiled with LDC, not clang, but that shouldn't matter).</div><div>When linking to that static library, I get the error:</div><div>Assertion failed: (ModuleMap.find(ModuleBuffer.<wbr>getBufferIdentifier()) == ModuleMap.end() && "Expect unique Buffer Identifier"), function generateModuleMap, file ../lib/LTO/<wbr>ThinLTOCodeGenerator.cpp, line 138.</div><div><br></div><div>The error occurs because the buffer identifier uses the filename of the objects inside the archive, and those are identical for the two files with different source path.</div><div><br></div><div>This problem appears to be fixed for LLD here:</div><div><a href="https://reviews.llvm.org/D25495" target="_blank">https://reviews.llvm.org/<wbr>D25495</a></div><div><a href="https://bugs.llvm.org/show_bug.cgi?id=30665" target="_blank">https://bugs.llvm.org/show_<wbr>bug.cgi?id=30665</a></div><div><br></div><div>But it persists for linking with the system linker on OSX (while manually passing libLTO.dylib to the linker).</div><div><br></div><div>If I modify lib/LTO/ThinLTOCodeGenerator.<wbr>cpp to do a poor-man's uniquefying of the buffer identifier:</div><div>```</div><div>void ThinLTOCodeGenerator::<wbr>addModule(StringRef Identifier, StringRef Data) {</div><div>-  ThinLTOBuffer Buffer(Data, Identifier.str()));</div><div>+  ThinLTOBuffer Buffer(Data, Identifier.str() + utostr(Data.size()));</div><div>```</div><div>then the problem is solved.</div><div><br></div><div>What would be a proper way to fix this issue?</div><div>Can it be fixed in lib/LTO, or should I not create an (afaict valid) archive containing duplicate object file names?</div><div><br></div><div>(Note: this issue makes it impossible to use an LTO version of the standard library with LDC)</div><div><br></div><div>Thanks,</div><div>  Johan</div><div><br></div></div>
<br>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px">Teresa Johnson |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"> Software Engineer |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"> 408-460-2413</td></tr></tbody></table></span></div>
</div>