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