mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 01:38:37 +12:00
Add PPU instruction stat dumper
Needs PPU Debug option to activate and PPU Interpreter Dumps after Resume (after Pause) Fix utils::memory_decommit, clean vm.cpp
This commit is contained in:
parent
f5d450f24c
commit
df2fc13b7a
5 changed files with 61 additions and 43 deletions
|
@ -8,21 +8,6 @@
|
|||
#include "Emu/Cell/lv2/sys_memory.h"
|
||||
#include "Emu/RSX/GSRender.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#else
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* OS X uses MAP_ANON instead of MAP_ANONYMOUS */
|
||||
#ifndef MAP_ANONYMOUS
|
||||
#define MAP_ANONYMOUS MAP_ANON
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <atomic>
|
||||
#include <deque>
|
||||
|
||||
|
@ -48,6 +33,9 @@ namespace vm
|
|||
// Auxiliary virtual memory for executable areas
|
||||
u8* const g_exec_addr = memory_reserve_4GiB((std::uintptr_t)g_base_addr);
|
||||
|
||||
// Stats for debugging
|
||||
u8* const g_stat_addr = memory_reserve_4GiB((std::uintptr_t)g_exec_addr);
|
||||
|
||||
// Memory locations
|
||||
std::vector<std::shared_ptr<block_t>> g_locations;
|
||||
|
||||
|
@ -349,16 +337,17 @@ namespace vm
|
|||
}
|
||||
}
|
||||
|
||||
void* real_addr = g_base_addr + addr;
|
||||
void* exec_addr = g_exec_addr + addr;
|
||||
utils::memory_commit(g_base_addr + addr, size);
|
||||
|
||||
#ifdef _WIN32
|
||||
auto protection = flags & page_writable ? PAGE_READWRITE : (flags & page_readable ? PAGE_READONLY : PAGE_NOACCESS);
|
||||
verify(__func__), ::VirtualAlloc(real_addr, size, MEM_COMMIT, protection);
|
||||
#else
|
||||
auto protection = flags & page_writable ? PROT_WRITE | PROT_READ : (flags & page_readable ? PROT_READ : PROT_NONE);
|
||||
verify(__func__), !::mprotect(real_addr, size, protection), !::madvise(real_addr, size, MADV_WILLNEED);
|
||||
#endif
|
||||
if (flags & page_executable)
|
||||
{
|
||||
utils::memory_commit(g_exec_addr + addr, size);
|
||||
}
|
||||
|
||||
if (g_cfg.core.ppu_debug && g_system == system_type::ps3)
|
||||
{
|
||||
utils::memory_commit(g_stat_addr + addr, size);
|
||||
}
|
||||
|
||||
for (u32 i = addr / 4096; i < addr / 4096 + size / 4096; i++)
|
||||
{
|
||||
|
@ -415,15 +404,8 @@ namespace vm
|
|||
{
|
||||
if (u32 page_size = (i - start) * 4096)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
DWORD old;
|
||||
|
||||
auto protection = start_value & page_writable ? PAGE_READWRITE : (start_value & page_readable ? PAGE_READONLY : PAGE_NOACCESS);
|
||||
verify(__func__), ::VirtualProtect(vm::base(start * 4096), page_size, protection, &old);
|
||||
#else
|
||||
auto protection = start_value & page_writable ? PROT_WRITE | PROT_READ : (start_value & page_readable ? PROT_READ : PROT_NONE);
|
||||
verify(__func__), !::mprotect(vm::base(start * 4096), page_size, protection);
|
||||
#endif
|
||||
const auto protection = start_value & page_writable ? utils::protection::rw : (start_value & page_readable ? utils::protection::ro : utils::protection::no);
|
||||
utils::memory_protect(g_base_addr + start * 4096, page_size, protection);
|
||||
}
|
||||
|
||||
start_value = new_val;
|
||||
|
@ -457,16 +439,13 @@ namespace vm
|
|||
}
|
||||
}
|
||||
|
||||
void* real_addr = g_base_addr + addr;
|
||||
void* exec_addr = g_exec_addr + addr;
|
||||
utils::memory_decommit(g_base_addr + addr, size);
|
||||
utils::memory_decommit(g_exec_addr + addr, size);
|
||||
|
||||
#ifdef _WIN32
|
||||
verify(__func__), ::VirtualFree(real_addr, size, MEM_DECOMMIT);
|
||||
verify(__func__), ::VirtualFree(exec_addr, size, MEM_DECOMMIT);
|
||||
#else
|
||||
verify(__func__), ::mmap(real_addr, size, PROT_NONE, MAP_FIXED | MAP_ANON | MAP_PRIVATE, -1, 0);
|
||||
verify(__func__), ::mmap(exec_addr, size, PROT_NONE, MAP_FIXED | MAP_ANON | MAP_PRIVATE, -1, 0);
|
||||
#endif
|
||||
if (g_cfg.core.ppu_debug && g_system == system_type::ps3)
|
||||
{
|
||||
utils::memory_decommit(g_stat_addr + addr, size);
|
||||
}
|
||||
}
|
||||
|
||||
bool check_addr(u32 addr, u32 size, u8 flags)
|
||||
|
@ -856,6 +835,7 @@ namespace vm
|
|||
|
||||
utils::memory_decommit(g_base_addr, 0x100000000);
|
||||
utils::memory_decommit(g_exec_addr, 0x100000000);
|
||||
utils::memory_decommit(g_stat_addr, 0x100000000);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue