[llvm] r282451 - [CodeGen] Add support for emitting .init_array instead of .ctors on FreeBSD.
Ed Maste via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 29 13:40:03 PDT 2016
On 26 September 2016 at 18:53, Davide Italiano via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: davide
> Date: Mon Sep 26 17:53:15 2016
> New Revision: 282451
>
> URL: http://llvm.org/viewvc/llvm-project?rev=282451&view=rev
> Log:
> [CodeGen] Add support for emitting .init_array instead of .ctors on FreeBSD.
This needs to be based on the FreeBSD version - there's no .init_array
support in rtld in FreeBSD 9. FreeBSD 10 and 11 support .init_array
but the default toolchains use .ctors, so we could end up with hard to
track down changes in static ctor ordering.
I tried the change below in Clang, which is how I found in PR30494
that -fuse-init-array does nothing on certain targets.
commit 35620dc26267407da73f5d82777398ad6552facc
Author: Ed Maste <emaste at freebsd.org>
Date: Thu Sep 22 12:49:27 2016 -0400
Request init/fini array on FreeBSD 12 and later
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index 06cb227..e41f917 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -2827,6 +2827,8 @@ void Generic_ELF::addClangTargetOptions(const
ArgList &DriverArgs,
bool UseInitArrayDefault =
getTriple().getArch() == llvm::Triple::aarch64 ||
getTriple().getArch() == llvm::Triple::aarch64_be ||
+ (getTriple().getOS() == llvm::Triple::FreeBSD &&
+ getTriple().getOSMajorVersion() >= 12) ||
(getTriple().getOS() == llvm::Triple::Linux &&
(!V.isOlderThan(4, 7, 0) || getTriple().isAndroid())) ||
getTriple().getOS() == llvm::Triple::NaCl ||
diff --git a/test/Driver/constructors.c b/test/Driver/constructors.c
index cd14ed7..fb6ea31 100644
--- a/test/Driver/constructors.c
+++ b/test/Driver/constructors.c
@@ -74,3 +74,11 @@
// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
// RUN: -target arm64-none-none-eabi \
// RUN: | FileCheck --check-prefix=CHECK-INIT-ARRAY %s
+
+// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
+// RUN: -target i386-unknown-freebsd11 \
+// RUN: | FileCheck --check-prefix=CHECK-NO-INIT-ARRAY %s
+
+// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
+// RUN: -target i386-unknown-freebsd12 \
+// RUN: | FileCheck --check-prefix=CHECK-INIT-ARRAY %s
More information about the llvm-commits
mailing list