diff options
author | Fangrui Song <maskray@google.com> | 2019-12-11 21:48:59 -0800 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-12-12 10:32:56 -0800 |
commit | b2b5cac3ec07782b917b2816f175da682723cd49 (patch) | |
tree | a724b239b5dd0e06305faecf206023363f04a82b /clang/lib/Driver/ToolChains/OpenBSD.cpp | |
parent | 61f5ba5c32fae2726d3ead5e7360c084720f4692 (diff) | |
download | bcm5719-llvm-b2b5cac3ec07782b917b2816f175da682723cd49.tar.gz bcm5719-llvm-b2b5cac3ec07782b917b2816f175da682723cd49.zip |
Default to -fuse-init-array
Very few ELF platforms still use .ctors/.dtors now. Linux (glibc: 1999-07),
DragonFlyBSD, FreeBSD (2012-03) and Solaris have supported .init_array
for many years. Some architectures like AArch64/RISC-V default to
.init_array . GNU ld and gold can even convert .ctors to .init_array .
It makes more sense to flip the CC1 default, and only uses
-fno-use-init-array on platforms that don't support .init_array .
For example, OpenBSD did not support DT_INIT_ARRAY before Aug 2016
(https://github.com/openbsd/src/commit/86fa57a2792c6374b0849dd7b818a11e676e60ba)
I may miss some ELF platforms that still use .ctors, but their
maintainers can easily diagnose such problems.
Reviewed By: rnk
Differential Revision: https://reviews.llvm.org/D71393
Diffstat (limited to 'clang/lib/Driver/ToolChains/OpenBSD.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChains/OpenBSD.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChains/OpenBSD.cpp b/clang/lib/Driver/ToolChains/OpenBSD.cpp index e93f5fcc3d8..80343c0394c 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.cpp +++ b/clang/lib/Driver/ToolChains/OpenBSD.cpp @@ -267,3 +267,12 @@ Tool *OpenBSD::buildAssembler() const { } Tool *OpenBSD::buildLinker() const { return new tools::openbsd::Linker(*this); } + +void OpenBSD::addClangTargetOptions(const ArgList &DriverArgs, + ArgStringList &CC1Args, + Action::OffloadKind) const { + // Support for .init_array is still new (Aug 2016). + if (!DriverArgs.hasFlag(options::OPT_fuse_init_array, + options::OPT_fno_use_init_array, false)) + CC1Args.push_back("-fno-use-init-array"); +} |