llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-driver

Author: Kalesh Singh (Kalesh-Singh)

<details>
<summary>Changes</summary>

Android now supports both 4kB and 16kB page sizes. The vast majority of android 
apps are developed on x86_64 machines. In order to provide emulators that 
support larger page sizes, Android emulates the page-size in x86_64 to support 
testing apps for large page size support.

For this reason, update Android x86_64 ELFs default max-page-size to 16384 to 
support both 4kB and 16kB page-size devices.

Increase max-page-size raises concerns of increased disk space and extra VMA 
slab memory.

In Android, RO partitions use sparse images, so that the holes on ELFs don't 
allocate blocks on disk; and PackageManager ensures to punch holes in 
ELF-paddings on the /data partition when apps are installed.

Extra VMA slab memory is addressed by the bionic loader, which extends segment 
VMAs to cover the gaps between consecutive segment mappings, to avoid the extra 
VMAs needed for the gap PROT_NONE mappings (---p). This optimization is done in 
the crt_pad_segment note [1] is present in the ELF.

[1] 
https://cs.android.com/android/platform/superproject/main/+/189e480390ef13199d59e1fb54078e8b78ea6f79:bionic/libc/arch-common/bionic/crt_pad_segment.S

---
Full diff: https://github.com/llvm/llvm-project/pull/87413.diff


1 Files Affected:

- (modified) clang/lib/Driver/ToolChains/Linux.cpp (+2-1) 


``````````diff
diff --git a/clang/lib/Driver/ToolChains/Linux.cpp 
b/clang/lib/Driver/ToolChains/Linux.cpp
index 6c2f23e57bce05..fb65881061effc 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -244,8 +244,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, 
const ArgList &Args)
       // Android ARM uses max-page-size=4096 to reduce VMA usage.
       ExtraOpts.push_back("-z");
       ExtraOpts.push_back("max-page-size=4096");
-    } else if (Triple.isAArch64()) {
+    } else if (Triple.isAArch64() || Triple.getArch() == llvm::Triple::x86_64) 
{
       // Android AArch64 uses max-page-size=16384 to support 4k/16k page sizes.
+      // Android emulates a 16k page size for app testing on x86_64 machines.
       ExtraOpts.push_back("-z");
       ExtraOpts.push_back("max-page-size=16384");
     }

``````````

</details>


https://github.com/llvm/llvm-project/pull/87413
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to