Commit 05dba1f2 authored by Elly Fong-Jones's avatar Elly Fong-Jones Committed by Commit Bot

base: fix ScopedMachVMTest under Rosetta

These tests all use the PAGE_SIZE macro, which isn't correct under
Rosetta until the 11.0 SDK; have them use base::SystemPageSize()
instead.

Bug: 1102194
Change-Id: I752462b38fc7cd33f45678e3708d6b16b23b7fc2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2469224
Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
Reviewed-by: default avatarMark Mentovai <mark@chromium.org>
Cr-Commit-Position: refs/heads/master@{#817029}
parent 96954536
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <mach/mach.h> #include <mach/mach.h>
#include "base/allocator/partition_allocator/page_allocator_constants.h"
#include "base/test/gtest_util.h" #include "base/test/gtest_util.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -32,7 +33,7 @@ void GetRegionInfo(vm_address_t* region_address, vm_size_t* region_size) { ...@@ -32,7 +33,7 @@ void GetRegionInfo(vm_address_t* region_address, vm_size_t* region_size) {
TEST(ScopedMachVMTest, Basic) { TEST(ScopedMachVMTest, Basic) {
vm_address_t address; vm_address_t address;
vm_size_t size = PAGE_SIZE; vm_size_t size = base::SystemPageSize();
kern_return_t kr = kern_return_t kr =
vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE); vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE);
ASSERT_EQ(KERN_SUCCESS, kr); ASSERT_EQ(KERN_SUCCESS, kr);
...@@ -47,7 +48,7 @@ TEST(ScopedMachVMTest, Basic) { ...@@ -47,7 +48,7 @@ TEST(ScopedMachVMTest, Basic) {
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(KERN_SUCCESS, kr); EXPECT_EQ(KERN_SUCCESS, kr);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(1u * PAGE_SIZE, region_size); EXPECT_EQ(1u * base::SystemPageSize(), region_size);
{ {
ScopedMachVM scoper2; ScopedMachVM scoper2;
...@@ -72,7 +73,7 @@ TEST(ScopedMachVMTest, Basic) { ...@@ -72,7 +73,7 @@ TEST(ScopedMachVMTest, Basic) {
TEST(ScopedMachVMTest, Reset) { TEST(ScopedMachVMTest, Reset) {
vm_address_t address; vm_address_t address;
vm_size_t size = PAGE_SIZE; vm_size_t size = base::SystemPageSize();
kern_return_t kr = kern_return_t kr =
vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE); vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE);
ASSERT_EQ(KERN_SUCCESS, kr); ASSERT_EQ(KERN_SUCCESS, kr);
...@@ -85,7 +86,7 @@ TEST(ScopedMachVMTest, Reset) { ...@@ -85,7 +86,7 @@ TEST(ScopedMachVMTest, Reset) {
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(KERN_SUCCESS, kr); EXPECT_EQ(KERN_SUCCESS, kr);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(1u * PAGE_SIZE, region_size); EXPECT_EQ(1u * base::SystemPageSize(), region_size);
scoper.reset(); scoper.reset();
...@@ -98,12 +99,12 @@ TEST(ScopedMachVMTest, Reset) { ...@@ -98,12 +99,12 @@ TEST(ScopedMachVMTest, Reset) {
TEST(ScopedMachVMTest, ResetSmallerAddress) { TEST(ScopedMachVMTest, ResetSmallerAddress) {
vm_address_t address; vm_address_t address;
vm_size_t size = 2 * PAGE_SIZE; vm_size_t size = 2 * base::SystemPageSize();
kern_return_t kr = kern_return_t kr =
vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE); vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE);
ASSERT_EQ(KERN_SUCCESS, kr); ASSERT_EQ(KERN_SUCCESS, kr);
ScopedMachVM scoper(address, PAGE_SIZE); ScopedMachVM scoper(address, base::SystemPageSize());
// Test the initial region. // Test the initial region.
vm_address_t region_address = address; vm_address_t region_address = address;
...@@ -111,21 +112,22 @@ TEST(ScopedMachVMTest, ResetSmallerAddress) { ...@@ -111,21 +112,22 @@ TEST(ScopedMachVMTest, ResetSmallerAddress) {
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(KERN_SUCCESS, kr); EXPECT_EQ(KERN_SUCCESS, kr);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(2u * PAGE_SIZE, region_size); EXPECT_EQ(2u * base::SystemPageSize(), region_size);
// This will free address..PAGE_SIZE that is currently in the scoper. // This will free address..base::SystemPageSize() that is currently in the
scoper.reset(address + PAGE_SIZE, PAGE_SIZE); // scoper.
scoper.reset(address + base::SystemPageSize(), base::SystemPageSize());
// Verify that the region is now only one page. // Verify that the region is now only one page.
region_address = address; region_address = address;
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(address + PAGE_SIZE, region_address); EXPECT_EQ(address + base::SystemPageSize(), region_address);
EXPECT_EQ(1u * PAGE_SIZE, region_size); EXPECT_EQ(1u * base::SystemPageSize(), region_size);
} }
TEST(ScopedMachVMTest, ResetLargerAddressAndSize) { TEST(ScopedMachVMTest, ResetLargerAddressAndSize) {
vm_address_t address; vm_address_t address;
vm_size_t size = 3 * PAGE_SIZE; vm_size_t size = 3 * base::SystemPageSize();
kern_return_t kr = kern_return_t kr =
vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE); vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE);
ASSERT_EQ(KERN_SUCCESS, kr); ASSERT_EQ(KERN_SUCCESS, kr);
...@@ -136,9 +138,10 @@ TEST(ScopedMachVMTest, ResetLargerAddressAndSize) { ...@@ -136,9 +138,10 @@ TEST(ScopedMachVMTest, ResetLargerAddressAndSize) {
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(KERN_SUCCESS, kr); EXPECT_EQ(KERN_SUCCESS, kr);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(3u * PAGE_SIZE, region_size); EXPECT_EQ(3u * base::SystemPageSize(), region_size);
ScopedMachVM scoper(address + 2 * PAGE_SIZE, PAGE_SIZE); ScopedMachVM scoper(address + 2 * base::SystemPageSize(),
base::SystemPageSize());
// Expand the region to be larger. // Expand the region to be larger.
scoper.reset(address, size); scoper.reset(address, size);
...@@ -146,12 +149,12 @@ TEST(ScopedMachVMTest, ResetLargerAddressAndSize) { ...@@ -146,12 +149,12 @@ TEST(ScopedMachVMTest, ResetLargerAddressAndSize) {
region_address = address; region_address = address;
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(3u * PAGE_SIZE, region_size); EXPECT_EQ(3u * base::SystemPageSize(), region_size);
} }
TEST(ScopedMachVMTest, ResetLargerAddress) { TEST(ScopedMachVMTest, ResetLargerAddress) {
vm_address_t address; vm_address_t address;
vm_size_t size = 6 * PAGE_SIZE; vm_size_t size = 6 * base::SystemPageSize();
kern_return_t kr = kern_return_t kr =
vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE); vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE);
ASSERT_EQ(KERN_SUCCESS, kr); ASSERT_EQ(KERN_SUCCESS, kr);
...@@ -162,24 +165,25 @@ TEST(ScopedMachVMTest, ResetLargerAddress) { ...@@ -162,24 +165,25 @@ TEST(ScopedMachVMTest, ResetLargerAddress) {
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(KERN_SUCCESS, kr); EXPECT_EQ(KERN_SUCCESS, kr);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(6u * PAGE_SIZE, region_size); EXPECT_EQ(6u * base::SystemPageSize(), region_size);
ScopedMachVM scoper(address + 3 * PAGE_SIZE, 3 * PAGE_SIZE); ScopedMachVM scoper(address + 3 * base::SystemPageSize(),
3 * base::SystemPageSize());
// Shift the region by three pages; the last three pages should be // Shift the region by three pages; the last three pages should be
// deallocated, while keeping the first three. // deallocated, while keeping the first three.
scoper.reset(address, 3 * PAGE_SIZE); scoper.reset(address, 3 * base::SystemPageSize());
// Verify that the region is just three pages. // Verify that the region is just three pages.
region_address = address; region_address = address;
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(3u * PAGE_SIZE, region_size); EXPECT_EQ(3u * base::SystemPageSize(), region_size);
} }
TEST(ScopedMachVMTest, ResetUnaligned) { TEST(ScopedMachVMTest, ResetUnaligned) {
vm_address_t address; vm_address_t address;
vm_size_t size = 2 * PAGE_SIZE; vm_size_t size = 2 * base::SystemPageSize();
kern_return_t kr = kern_return_t kr =
vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE); vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE);
ASSERT_EQ(KERN_SUCCESS, kr); ASSERT_EQ(KERN_SUCCESS, kr);
...@@ -191,34 +195,36 @@ TEST(ScopedMachVMTest, ResetUnaligned) { ...@@ -191,34 +195,36 @@ TEST(ScopedMachVMTest, ResetUnaligned) {
vm_size_t region_size; vm_size_t region_size;
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(2u * PAGE_SIZE, region_size); EXPECT_EQ(2u * base::SystemPageSize(), region_size);
// Initialize with unaligned size. // Initialize with unaligned size.
scoper.reset_unaligned(address + PAGE_SIZE, PAGE_SIZE - 3); scoper.reset_unaligned(address + base::SystemPageSize(),
base::SystemPageSize() - 3);
// Reset with another unaligned size. // Reset with another unaligned size.
scoper.reset_unaligned(address + PAGE_SIZE, PAGE_SIZE - 11); scoper.reset_unaligned(address + base::SystemPageSize(),
base::SystemPageSize() - 11);
// The entire unaligned page gets deallocated. // The entire unaligned page gets deallocated.
region_address = address; region_address = address;
GetRegionInfo(&region_address, &region_size); GetRegionInfo(&region_address, &region_size);
EXPECT_EQ(address, region_address); EXPECT_EQ(address, region_address);
EXPECT_EQ(1u * PAGE_SIZE, region_size); EXPECT_EQ(1u * base::SystemPageSize(), region_size);
// Reset with the remaining page. // Reset with the remaining page.
scoper.reset_unaligned(address, PAGE_SIZE); scoper.reset_unaligned(address, base::SystemPageSize());
} }
#if DCHECK_IS_ON() #if DCHECK_IS_ON()
TEST(ScopedMachVMTest, ResetMustBeAligned) { TEST(ScopedMachVMTest, ResetMustBeAligned) {
vm_address_t address; vm_address_t address;
vm_size_t size = 2 * PAGE_SIZE; vm_size_t size = 2 * base::SystemPageSize();
kern_return_t kr = kern_return_t kr =
vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE); vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE);
ASSERT_EQ(KERN_SUCCESS, kr); ASSERT_EQ(KERN_SUCCESS, kr);
ScopedMachVM scoper; ScopedMachVM scoper;
EXPECT_DCHECK_DEATH(scoper.reset(address, PAGE_SIZE + 1)); EXPECT_DCHECK_DEATH(scoper.reset(address, base::SystemPageSize() + 1));
} }
#endif // DCHECK_IS_ON() #endif // DCHECK_IS_ON()
......
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