[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