From 514a647433c71434d58cfc9b6a9251f88ae277d6 Mon Sep 17 00:00:00 2001 From: Zhizhou Yang Date: Thu, 29 Nov 2018 18:52:22 +0000 Subject: [PATCH] set default max-page-size to 4KB in lld for Android Aarch64 Summary: This patch passes an option '-z max-page-size=4096' to lld through clang driver. This is for Android on Aarch64 target. The lld default page size is too large for Aarch64, which produces larger .so files and images for arm64 device targets. In this patch we set default page size to 4KB for Android Aarch64 targets instead. Reviewers: srhines, danalbert, ruiu, chh, peter.smith Reviewed By: srhines Subscribers: javed.absar, kristof.beyls, cfe-commits, george.burgess.iv, llozano Differential Revision: https://reviews.llvm.org/D55029 llvm-svn: 347897 --- clang/lib/Driver/ToolChains/Linux.cpp | 8 ++++++++ clang/test/Driver/android-aarch64-link.cpp | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp index 79deb04..65ab9b2 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -247,6 +247,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) ExtraOpts.push_back("relro"); } + // The lld default page size is too large for Aarch64, which produces much + // larger .so files and images for arm64 device targets. Use 4KB page size + // for Android arm64 targets instead. + if (Triple.isAArch64() && Triple.isAndroid()) { + ExtraOpts.push_back("-z"); + ExtraOpts.push_back("max-page-size=4096"); + } + if (GCCInstallation.getParentLibPath().find("opt/rh/devtoolset") != StringRef::npos) // With devtoolset on RHEL, we want to add a bin directory that is relative diff --git a/clang/test/Driver/android-aarch64-link.cpp b/clang/test/Driver/android-aarch64-link.cpp index 2c4cfb9..051bcd5 100644 --- a/clang/test/Driver/android-aarch64-link.cpp +++ b/clang/test/Driver/android-aarch64-link.cpp @@ -12,6 +12,11 @@ // RUN: -mcpu=cortex-a57 -### -v %s 2> %t // RUN: FileCheck -check-prefix=CORTEX-A57 < %t %s // +// RUN: %clang -target aarch64-none-linux-android \ +// RUN: -### -v %s 2> %t +// RUN: FileCheck -check-prefix=MAX-PAGE-SIZE < %t %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 -- 2.7.4