From ca7d127adc06613a3fefeef41f029f6b967bace5 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 2 Feb 2021 00:44:35 -0800 Subject: [PATCH] Debugger: Notate more cases of memory clears. --- Core/ELF/ElfReader.cpp | 3 ++- Core/HLE/sceKernelMemory.cpp | 5 ++++- Core/HLE/sceKernelModule.cpp | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Core/ELF/ElfReader.cpp b/Core/ELF/ElfReader.cpp index 17bf1f4263..f3a3d1bcb2 100644 --- a/Core/ELF/ElfReader.cpp +++ b/Core/ELF/ElfReader.cpp @@ -475,10 +475,11 @@ int ElfReader::LoadInto(u32 loadAddress, bool fromTop) if (srcSize < dstSize) { memset(dst + srcSize, 0, dstSize - srcSize); //zero out bss + NotifyMemInfo(MemBlockFlags::WRITE, writeAddr + srcSize, dstSize - srcSize, "ELFZero"); } memcpy(dst, src, srcSize); - NotifyMemInfo(MemBlockFlags::WRITE, writeAddr, dstSize, "ELFLoad"); + NotifyMemInfo(MemBlockFlags::WRITE, writeAddr, srcSize, "ELFLoad"); DEBUG_LOG(LOADER,"Loadable Segment Copied to %08x, size %08x", writeAddr, (u32)p->p_memsz); } } diff --git a/Core/HLE/sceKernelMemory.cpp b/Core/HLE/sceKernelMemory.cpp index 05e4a7d8e7..50439e5d2b 100644 --- a/Core/HLE/sceKernelMemory.cpp +++ b/Core/HLE/sceKernelMemory.cpp @@ -1965,6 +1965,7 @@ int __KernelFreeTls(TLSPL *tls, SceUID threadID) // Whenever freeing a block, clear it (even if it's not going to wake anyone.) Memory::Memset(freedAddress, 0, tls->ntls.blockSize); + NotifyMemInfo(MemBlockFlags::WRITE, freedAddress, tls->ntls.blockSize, "TlsFree"); // First, let's remove the end check for the freeing thread. auto freeingLocked = tlsplThreadEndChecks.equal_range(threadID); @@ -2239,8 +2240,10 @@ int sceKernelGetTlsAddr(SceUID uid) NotifyMemInfo(MemBlockFlags::SUB_ALLOC, allocAddress, tls->ntls.blockSize, "TlsAddr"); // We clear the blocks upon first allocation (and also when they are freed, both are necessary.) - if (needsClear) + if (needsClear) { Memory::Memset(allocAddress, 0, tls->ntls.blockSize); + NotifyMemInfo(MemBlockFlags::WRITE, allocAddress, tls->ntls.blockSize, "TlsAddr"); + } return allocAddress; } diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 5ea2a721c1..5faa9ea6ef 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -857,6 +857,7 @@ void PSPModule::Cleanup() { Memory::Write_U32(MIPS_MAKE_BREAK(1), nm.text_addr + i); } Memory::Memset(nm.text_addr + nm.text_size, -1, nm.data_size + nm.bss_size); + NotifyMemInfo(MemBlockFlags::WRITE, nm.text_addr + nm.text_size, nm.data_size + nm.bss_size, "ModuleClear"); // Let's also invalidate, just to make sure it's cleared out for any future data. currentMIPS->InvalidateICache(memoryBlockAddr, memoryBlockSize);