1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/mac/scoped_mach_vm.h"
6
7namespace base {
8namespace mac {
9
10void ScopedMachVM::reset(vm_address_t address, vm_size_t size) {
11  DCHECK(address % PAGE_SIZE == 0);
12  DCHECK(size % PAGE_SIZE == 0);
13
14  if (size_) {
15    if (address_ < address) {
16      vm_deallocate(mach_task_self(),
17                    address_,
18                    std::min(size_, address - address_));
19    }
20    if (address_ + size_ > address + size) {
21      vm_address_t deallocate_start = std::max(address_, address + size);
22      vm_deallocate(mach_task_self(),
23                    deallocate_start,
24                    address_ + size_ - deallocate_start);
25    }
26  }
27
28  address_ = address;
29  size_ = size;
30}
31
32}  // namespace mac
33}  // namespace base
34