parent
e54d1538ea
commit
97da4a0b9f
@ -1,112 +0,0 @@
|
|||||||
--- a/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h
|
|
||||||
+++ b/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h
|
|
||||||
@@ -100,21 +100,21 @@
|
|
||||||
// other constant values, we pack _all_ `PartitionRoot::Alloc` sizes perfectly
|
|
||||||
// up against the end of a system page.
|
|
||||||
|
|
||||||
-#if defined(_MIPS_ARCH_LOONGSON) || defined(ARCH_CPU_LOONGARCH64)
|
|
||||||
+#if (BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS)) || \
|
|
||||||
+ defined(PARTITION_ALLOCATOR_CONSTANTS_POSIX_NONCONST_PAGE_SIZE)
|
|
||||||
PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR size_t
|
|
||||||
PartitionPageShift() {
|
|
||||||
- return 16; // 64 KiB
|
|
||||||
+ return PageAllocationGranularityShift() + 2;
|
|
||||||
}
|
|
||||||
-#elif defined(ARCH_CPU_PPC64)
|
|
||||||
+#elif defined(_MIPS_ARCH_LOONGSON) || defined(ARCH_CPU_LOONGARCH64)
|
|
||||||
PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR size_t
|
|
||||||
PartitionPageShift() {
|
|
||||||
- return 18; // 256 KiB
|
|
||||||
+ return 16; // 64 KiB
|
|
||||||
}
|
|
||||||
-#elif (BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS)) || \
|
|
||||||
- defined(PARTITION_ALLOCATOR_CONSTANTS_POSIX_NONCONST_PAGE_SIZE)
|
|
||||||
+#elif defined(ARCH_CPU_PPC64)
|
|
||||||
PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR size_t
|
|
||||||
PartitionPageShift() {
|
|
||||||
- return PageAllocationGranularityShift() + 2;
|
|
||||||
+ return 18; // 256 KiB
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR size_t
|
|
||||||
--- a/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h
|
|
||||||
+++ b/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h
|
|
||||||
@@ -26,7 +26,8 @@
|
|
||||||
#define PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR __attribute__((const))
|
|
||||||
|
|
||||||
#elif (BUILDFLAG(IS_ANDROID) && defined(ARCH_CPU_64_BITS)) || \
|
|
||||||
- (BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64))
|
|
||||||
+ (BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64)) || \
|
|
||||||
+ (BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_PPC64))
|
|
||||||
// This should work for all POSIX (if needed), but currently all other
|
|
||||||
// supported OS/architecture combinations use either hard-coded values
|
|
||||||
// (such as x86) or have means to determine these values without needing
|
|
||||||
@@ -86,17 +87,7 @@
|
|
||||||
|
|
||||||
PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR size_t
|
|
||||||
PageAllocationGranularityShift() {
|
|
||||||
-#if BUILDFLAG(IS_WIN) || defined(ARCH_CPU_PPC64)
|
|
||||||
- // Modern ppc64 systems support 4kB (shift = 12) and 64kB (shift = 16) page
|
|
||||||
- // sizes. Since 64kB is the de facto standard on the platform and binaries
|
|
||||||
- // compiled for 64kB are likely to work on 4kB systems, 64kB is a good choice
|
|
||||||
- // here.
|
|
||||||
- return 16; // 64kB
|
|
||||||
-#elif defined(_MIPS_ARCH_LOONGSON) || defined(ARCH_CPU_LOONGARCH64)
|
|
||||||
- return 14; // 16kB
|
|
||||||
-#elif BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS)
|
|
||||||
- return static_cast<size_t>(vm_page_shift);
|
|
||||||
-#elif defined(PARTITION_ALLOCATOR_CONSTANTS_POSIX_NONCONST_PAGE_SIZE)
|
|
||||||
+#if defined(PARTITION_ALLOCATOR_CONSTANTS_POSIX_NONCONST_PAGE_SIZE)
|
|
||||||
// arm64 supports 4kb (shift = 12), 16kb (shift = 14), and 64kb (shift = 16)
|
|
||||||
// page sizes. Retrieve from or initialize cache.
|
|
||||||
size_t shift = page_characteristics.shift.load(std::memory_order_relaxed);
|
|
||||||
@@ -106,6 +97,16 @@
|
|
||||||
page_characteristics.shift.store(shift, std::memory_order_relaxed);
|
|
||||||
}
|
|
||||||
return shift;
|
|
||||||
+#elif BUILDFLAG(IS_WIN) || defined(ARCH_CPU_PPC64)
|
|
||||||
+ // Modern ppc64 systems support 4kB (shift = 12) and 64kB (shift = 16) page
|
|
||||||
+ // sizes. Since 64kB is the de facto standard on the platform and binaries
|
|
||||||
+ // compiled for 64kB are likely to work on 4kB systems, 64kB is a good choice
|
|
||||||
+ // here.
|
|
||||||
+ return 16; // 64kB
|
|
||||||
+#elif defined(_MIPS_ARCH_LOONGSON) || defined(ARCH_CPU_LOONGARCH64)
|
|
||||||
+ return 14; // 16kB
|
|
||||||
+#elif BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS)
|
|
||||||
+ return static_cast<size_t>(vm_page_shift);
|
|
||||||
#else
|
|
||||||
return 12; // 4kB
|
|
||||||
#endif
|
|
||||||
--- a/base/allocator/partition_allocator/src/partition_alloc/address_space_randomization.h
|
|
||||||
+++ b/base/allocator/partition_allocator/src/partition_alloc/address_space_randomization.h
|
|
||||||
@@ -180,10 +180,10 @@
|
|
||||||
#else // !BUILDFLAG(IS_AIX) && !defined(ARCH_CPU_BIG_ENDIAN)
|
|
||||||
|
|
||||||
// Little-endian Linux PPC has 48 bits of virtual addressing. Use 46.
|
|
||||||
- PA_ALWAYS_INLINE constexpr uintptr_t ASLRMask() {
|
|
||||||
+ PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR uintptr_t ASLRMask() {
|
|
||||||
return AslrMask(46);
|
|
||||||
}
|
|
||||||
- PA_ALWAYS_INLINE constexpr uintptr_t ASLROffset() {
|
|
||||||
+ PA_ALWAYS_INLINE PAGE_ALLOCATOR_CONSTANTS_DECLARE_CONSTEXPR uintptr_t ASLROffset() {
|
|
||||||
return AslrAddress(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
--- a/base/allocator/partition_allocator/src/partition_alloc/partition_page_constants.h
|
|
||||||
+++ b/base/allocator/partition_allocator/src/partition_alloc/partition_page_constants.h
|
|
||||||
@@ -17,10 +17,15 @@
|
|
||||||
// PartitionPageSize() is 4 times the OS page size.
|
|
||||||
static constexpr size_t kMaxSlotsPerSlotSpan = 4 * (1 << 14) / kSmallestBucket;
|
|
||||||
#elif defined(PARTITION_ALLOCATOR_CONSTANTS_POSIX_NONCONST_PAGE_SIZE)
|
|
||||||
+#if defined(ARCH_CPU_PPC64)
|
|
||||||
+// System page size can be 4 or 64 kiB on Linux on ppc64. Use 64 kiB maximum.
|
|
||||||
+static constexpr size_t kMaxSlotsPerSlotSpan = 4 * (1 << 16) / kSmallestBucket;
|
|
||||||
+#else
|
|
||||||
// System page size can be 4, 16, or 64 kiB on Linux on arm64. 64 kiB is
|
|
||||||
// currently (kMaxSlotsPerSlotSpanBits == 13) not supported by the code,
|
|
||||||
// so we use the 16 kiB maximum (64 kiB will crash).
|
|
||||||
static constexpr size_t kMaxSlotsPerSlotSpan = 4 * (1 << 14) / kSmallestBucket;
|
|
||||||
+#endif
|
|
||||||
#elif BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_PPC64)
|
|
||||||
// System page size is not a constant on OpenPOWER systems, but is either 4kiB
|
|
||||||
// or 64kiB (1 << 12 or 1 << 16)
|
|
Loading…
Reference in new issue