[PATCH] D61931: [Driver] Use --android-tls for Android ARM/AArch64 when lld is used
Fangrui Song via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed May 15 03:38:12 PDT 2019
MaskRay updated this revision to Diff 199574.
MaskRay added a comment.
Use Args.MakeArgString(ToolChain.GetLinkerPath());
Repository:
rC Clang
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D61931/new/
https://reviews.llvm.org/D61931
Files:
lib/Driver/ToolChains/Gnu.cpp
test/Driver/android-aarch64-link.cpp
test/Driver/android-arm-link.cpp
Index: test/Driver/android-arm-link.cpp
===================================================================
--- /dev/null
+++ test/Driver/android-arm-link.cpp
@@ -0,0 +1,6 @@
+// RUN: %clang -target arm-linux-androideabi -### %s 2>&1 | \
+// RUN: FileCheck --implicit-check-not=--android-tls /dev/null
+// RUN: %clang -target arm-linux-androideabi -fuse-ld=lld -### %s 2>&1 | \
+// RUN: FileCheck --check-prefix=TLS %s
+
+// TLS: --android-tls
Index: test/Driver/android-aarch64-link.cpp
===================================================================
--- test/Driver/android-aarch64-link.cpp
+++ test/Driver/android-aarch64-link.cpp
@@ -16,7 +16,13 @@
// RUN: -### -v %s 2> %t
// RUN: FileCheck -check-prefix=MAX-PAGE-SIZE < %t %s
//
+// RUN: %clang -target aarch64-linux-android -### %s 2>&1 | \
+// RUN: FileCheck --implicit-check-not=--android-tls /dev/null
+// RUN: %clang -target aarch64-linux-android -fuse-ld=lld -### %s 2>&1 | \
+// RUN: FileCheck --check-prefix=TLS %s
+//
// GENERIC-ARM: --fix-cortex-a53-843419
// CORTEX-A53: --fix-cortex-a53-843419
// CORTEX-A57-NOT: --fix-cortex-a53-843419
// MAX-PAGE-SIZE: max-page-size=4096
+// TLS: --android-tls
Index: lib/Driver/ToolChains/Gnu.cpp
===================================================================
--- lib/Driver/ToolChains/Gnu.cpp
+++ lib/Driver/ToolChains/Gnu.cpp
@@ -390,10 +390,22 @@
CmdArgs.push_back("--fix-cortex-a53-843419");
}
- // Android does not allow shared text relocations. Emit a warning if the
- // user's code contains any.
- if (isAndroid)
- CmdArgs.push_back("--warn-shared-textrel");
+ if (isAndroid) {
+ // Android does not allow shared text relocations. Emit a warning if the
+ // user's code contains any.
+ CmdArgs.push_back("--warn-shared-textrel");
+
+ // FIXME In lld, --android-tls is a temporary option that makes its TLS
+ // layout compatible with Android Bionic on ARM/AArch64. Delete once the
+ // reservation of extra TLS slots is done in a proper layer (e.g.
+ // crtbegin_{dynamic,static}.o).
+ if (Triple.isARM() || Triple.isAArch64()) {
+ const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
+ if (llvm::sys::path::filename(Exec).equals_lower("ld.lld") ||
+ llvm::sys::path::stem(Exec).equals_lower("ld.lld"))
+ CmdArgs.push_back("--android-tls");
+ }
+ }
for (const auto &Opt : ToolChain.ExtraOpts)
CmdArgs.push_back(Opt.c_str());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D61931.199574.patch
Type: text/x-patch
Size: 2462 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190515/4bf79a73/attachment.bin>
More information about the cfe-commits
mailing list