[PATCH] D108879: [Linker] Handle comdat nodeduplicate

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Aug 28 14:45:22 PDT 2021


MaskRay created this revision.
MaskRay added reviewers: phosek, rnk, wolfgangp.
Herald added a subscriber: hiraditya.
MaskRay requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Partial fix to PR51394: comdat nodeduplicate is not supported by
`ModuleLinker::run()`.

For a variable in a comdat nodeduplicate, its initializer may be significant.
E.g. its content may be implicitly referenced by another comdat member (or
required to parallel to another comdat member by the runtime when explicit
section is used). We can clone it into an unnamed private linkage variable to
preserve its content.

This partially fixes PR51394 (Sony's proprietary linker using LTO): no error
will be reported. This is partial because we do not guarantee the global
variable order if the runtime has parallel section requirement.

---

There is a similar issue for regular LTO, but unrelated to PR51394:

with lib/LTO (using either ld.lld or LLVMgold.so), linking two modules
with a weak function of the same name, can leave one weak profc and two
private profd, due to lib/LTO's current deficiency that it mixes the two
concepts together: comdat selection and symbol resolution. If the issue
is considered important, we should suppress private profd for the weak+
regular LTO case.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D108879

Files:
  llvm/lib/Linker/LinkModules.cpp
  llvm/test/Linker/comdat-nodeduplicate.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108879.369281.patch
Type: text/x-patch
Size: 5718 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210828/19150501/attachment.bin>


More information about the llvm-commits mailing list