[all-commits] [llvm/llvm-project] 011526: [Linker] Handle comdat nodeduplicate

Fangrui Song via All-commits all-commits at lists.llvm.org
Tue Aug 31 22:32:33 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 01152626ab87c6a9e76207a4a77b86a8a4ce6bbd
      https://github.com/llvm/llvm-project/commit/01152626ab87c6a9e76207a4a77b86a8a4ce6bbd
  Author: Fangrui Song <i at maskray.me>
  Date:   2021-08-31 (Tue, 31 Aug 2021)

  Changed paths:
    M llvm/lib/Linker/LinkModules.cpp
    M llvm/test/Linker/comdat-nodeduplicate.ll

  Log Message:
  -----------
  [Linker] Handle comdat nodeduplicate

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.

Reviewed By: phosek

Differential Revision: https://reviews.llvm.org/D108879




More information about the All-commits mailing list