Commit 475e3d5b authored by Bill Budge's avatar Bill Budge Committed by Commit Bot

[page_allocator] Restrict ASLR range on 64-bit ARM Android

- This is a speculative fix to address a large performance regression
  on Android WebView.
- Restricts the range on 64 bit ARM Android to 0x20000000 - 0x60000000.

Bug: chromium:837640
Change-Id: I913ed62a9d360ae96aeaab80f468c18f357f956f
Reviewed-on: https://chromium-review.googlesource.com/1062012Reviewed-by: default avatarChris Palmer <palmer@chromium.org>
Commit-Queue: Bill Budge <bbudge@chromium.org>
Cr-Commit-Position: refs/heads/master@{#559255}
parent dcc93383
...@@ -88,11 +88,22 @@ constexpr uintptr_t AslrMask(uintptr_t bits) { ...@@ -88,11 +88,22 @@ constexpr uintptr_t AslrMask(uintptr_t bits) {
#elif defined(ARCH_CPU_ARM64) #elif defined(ARCH_CPU_ARM64)
#if defined(OS_ANDROID)
// Restrict the address range on Android to avoid a large performance
// regression in single-process WebViews. See https://crbug.com/837640.
constexpr uintptr_t kASLRMask = AslrMask(30);
constexpr uintptr_t kASLROffset = AslrAddress(0x20000000ULL);
#else
// ARM64 on Linux has 39-bit user space. Use 38 bits since kASLROffset // ARM64 on Linux has 39-bit user space. Use 38 bits since kASLROffset
// could cause a carry. // could cause a carry.
constexpr uintptr_t kASLRMask = AslrMask(38); constexpr uintptr_t kASLRMask = AslrMask(38);
constexpr uintptr_t kASLROffset = AslrAddress(0x1000000000ULL); constexpr uintptr_t kASLROffset = AslrAddress(0x1000000000ULL);
#endif
#elif defined(ARCH_CPU_PPC64) #elif defined(ARCH_CPU_PPC64)
#if defined(OS_AIX) #if defined(OS_AIX)
...@@ -167,7 +178,8 @@ constexpr uintptr_t AslrMask(uintptr_t bits) { ...@@ -167,7 +178,8 @@ constexpr uintptr_t AslrMask(uintptr_t bits) {
#endif // !defined(OS_SOLARIS) && !defined(OS_AIX) #endif // !defined(OS_SOLARIS) && !defined(OS_AIX)
#endif // !defined(ARCH_CPU_X86_64) && !defined(ARCH_CPU_PPC64) && !defined(ARCH_CPU_S390X) && !defined(ARCH_CPU_S390) #endif // !defined(ARCH_CPU_X86_64) && !defined(ARCH_CPU_PPC64) &&
// !defined(ARCH_CPU_S390X) && !defined(ARCH_CPU_S390)
#endif // defined(OS_POSIX) #endif // defined(OS_POSIX)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment