[all-commits] [llvm/llvm-project] 9181ce: [Windows] Put init_seg(compiler/lib) in llvm.globa...
aeubanks via All-commits
all-commits at lists.llvm.org
Tue Aug 16 08:25:51 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 9181ce623fd8189252659da7c48de1982597b79c
https://github.com/llvm/llvm-project/commit/9181ce623fd8189252659da7c48de1982597b79c
Author: Arthur Eubanks <aeubanks at google.com>
Date: 2022-08-16 (Tue, 16 Aug 2022)
Changed paths:
M clang/include/clang/Basic/AttrDocs.td
M clang/lib/CodeGen/CGDeclCXX.cpp
M clang/test/CodeGenCXX/pragma-init_seg.cpp
M llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
M llvm/test/CodeGen/X86/ctor-priority-coff.ll
Log Message:
-----------
[Windows] Put init_seg(compiler/lib) in llvm.global_ctors
Currently we treat initializers with init_seg(compiler/lib) as similar
to any other init_seg, they simply have a global variable in the proper
section (".CRT$XCC" for compiler/".CRT$XCL" for lib) and are added to
llvm.used. However, this doesn't match with how LLVM sees normal (or
init_seg(user)) initializers via llvm.global_ctors. This
causes issues like incorrect init_seg(compiler) vs init_seg(user)
ordering due to GlobalOpt evaluating constructors, and the
ability to remove init_seg(compiler/lib) initializers at all.
Currently we use 'A' for priorities less than 200. Use 200 for
init_seg(compiler) (".CRT$XCC") and 400 for init_seg(lib) (".CRT$XCL"),
which do not append the priority to the section name. Priorities
between 200 and 400 use ".CRT$XCC${Priority}". This allows for
some wiggle room for people/future extensions that want to add
initializers between compiler and lib.
Fixes #56922
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D131910
More information about the All-commits
mailing list