124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- MachVMMemory.h ------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  Created by Greg Clayton on 6/26/07.
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef __MachVMMemory_h__
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define __MachVMMemory_h__
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DNBDefs.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DNBError.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <mach/mach.h>
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass MachVMMemory
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    enum { kInvalidPageSize = ~0 };
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    MachVMMemory();
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~MachVMMemory();
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_size_t Read(task_t task, nub_addr_t address, void *data, nub_size_t data_count);
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    nub_size_t Write(task_t task, nub_addr_t address, const void *data, nub_size_t data_count);
29fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda    nub_size_t PageSize(task_t task);
301308a9555ad586ff03c8f97bcfe7f3212d06bc86Greg Clayton    nub_bool_t GetMemoryRegionInfo(task_t task, nub_addr_t address, DNBRegionInfo *region_info);
3177d340f114b99ec8e2f7a48cbb674c93e237022bHan Ming Ong    nub_bool_t GetMemoryProfile(DNBProfileDataScanType scanType, task_t task, struct task_basic_info ti, cpu_type_t cputype, nub_process_t pid, vm_statistics_data_t &vm_stats, uint64_t &physical_memory, mach_vm_size_t &rprvt, mach_vm_size_t &rsize, mach_vm_size_t &vprvt, mach_vm_size_t &vsize, mach_vm_size_t &dirty_size, mach_vm_size_t &purgable, mach_vm_size_t &anonymous);
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
34fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda    nub_size_t  MaxBytesLeftInPage(task_t task, nub_addr_t addr, nub_size_t count);
35fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda
36fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda    uint64_t    GetStolenPages(task_t task);
37fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda    void        GetRegionSizes(task_t task, mach_vm_size_t &rsize, mach_vm_size_t &dirty_size);
38fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda    void        GetMemorySizes(task_t task, cpu_type_t cputype, nub_process_t pid, mach_vm_size_t &rprvt, mach_vm_size_t &vprvt);
39fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda
40fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda
41fb190f3e1ddbaf9fb72e15a96e103de2b9c0dc44Jason Molenda    nub_size_t  WriteRegion(task_t task, const nub_addr_t address, const void *data, const nub_size_t data_count);
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
43fb9cee64303d36d6fe5d87e63dd8701d1ddb70a9Han Ming Ong    vm_size_t   m_page_size;
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DNBError    m_err;
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif //    #ifndef __MachVMMemory_h__
49