1 //===-- MachVMMemory.h ------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  Created by Greg Clayton on 6/26/07.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef __MachVMMemory_h__
15 #define __MachVMMemory_h__
16 
17 #include "DNBDefs.h"
18 #include "DNBError.h"
19 #include <mach/mach.h>
20 
21 class MachVMMemory {
22 public:
23   MachVMMemory();
24   ~MachVMMemory();
25   nub_size_t Read(task_t task, nub_addr_t address, void *data,
26                   nub_size_t data_count);
27   nub_size_t Write(task_t task, nub_addr_t address, const void *data,
28                    nub_size_t data_count);
29   nub_size_t PageSize(task_t task);
30   nub_bool_t GetMemoryRegionInfo(task_t task, nub_addr_t address,
31                                  DNBRegionInfo *region_info);
32 #if defined(HOST_VM_INFO64_COUNT)
33   nub_bool_t GetMemoryProfile(DNBProfileDataScanType scanType, task_t task,
34                               struct task_basic_info ti, cpu_type_t cputype,
35                               nub_process_t pid, vm_statistics64_data_t &vminfo,
36                               uint64_t &physical_memory, mach_vm_size_t &rprvt,
37                               mach_vm_size_t &rsize, mach_vm_size_t &vprvt,
38                               mach_vm_size_t &vsize, mach_vm_size_t &dirty_size,
39                               mach_vm_size_t &purgeable,
40                               mach_vm_size_t &anonymous);
41 #else
42   nub_bool_t GetMemoryProfile(DNBProfileDataScanType scanType, task_t task,
43                               struct task_basic_info ti, cpu_type_t cputype,
44                               nub_process_t pid, vm_statistics_data_t &vminfo,
45                               uint64_t &physical_memory, mach_vm_size_t &rprvt,
46                               mach_vm_size_t &rsize, mach_vm_size_t &vprvt,
47                               mach_vm_size_t &vsize, mach_vm_size_t &dirty_size,
48                               mach_vm_size_t &purgeable,
49                               mach_vm_size_t &anonymous);
50 #endif
51 
52 protected:
53   nub_size_t MaxBytesLeftInPage(task_t task, nub_addr_t addr, nub_size_t count);
54 
55   uint64_t GetStolenPages(task_t task);
56   void GetRegionSizes(task_t task, mach_vm_size_t &rsize,
57                       mach_vm_size_t &dirty_size);
58   void GetMemorySizes(task_t task, cpu_type_t cputype, nub_process_t pid,
59                       mach_vm_size_t &rprvt, mach_vm_size_t &vprvt);
60 
61   nub_size_t WriteRegion(task_t task, const nub_addr_t address,
62                          const void *data, const nub_size_t data_count);
63 
64   vm_size_t m_page_size;
65   DNBError m_err;
66 };
67 
68 #endif //    #ifndef __MachVMMemory_h__
69