diff --git a/Core/ELF/ElfReader.cpp b/Core/ELF/ElfReader.cpp index dcba8b789ae9..2eec38aa869b 100644 --- a/Core/ELF/ElfReader.cpp +++ b/Core/ELF/ElfReader.cpp @@ -533,17 +533,19 @@ int ElfReader::LoadInto(u32 loadAddress, bool fromTop) u32 srcSize = p->p_filesz; u32 dstSize = p->p_memsz; u8 *dst = Memory::GetPointerWriteRange(writeAddr, dstSize); + if (dst) { + if (srcSize < dstSize) { + memset(dst + srcSize, 0, dstSize - srcSize); //zero out bss + NotifyMemInfo(MemBlockFlags::WRITE, writeAddr + srcSize, dstSize - srcSize, "ELFZero"); + } - if (srcSize < dstSize) - { - memset(dst + srcSize, 0, dstSize - srcSize); //zero out bss - NotifyMemInfo(MemBlockFlags::WRITE, writeAddr + srcSize, dstSize - srcSize, "ELFZero"); + memcpy(dst, src, srcSize); + std::string tag = StringFromFormat("ELFLoad/%08x", writeAddr); + NotifyMemInfo(MemBlockFlags::WRITE, writeAddr, srcSize, tag.c_str(), tag.size()); + DEBUG_LOG(LOADER, "Loadable Segment Copied to %08x, size %08x", writeAddr, (u32)p->p_memsz); + } else { + ERROR_LOG(LOADER, "Bad ELF segment. Trying to write %d bytes to %08x", dstSize, writeAddr); } - - memcpy(dst, src, srcSize); - std::string tag = StringFromFormat("ELFLoad/%08x", writeAddr); - NotifyMemInfo(MemBlockFlags::WRITE, writeAddr, srcSize, tag.c_str(), tag.size()); - DEBUG_LOG(LOADER,"Loadable Segment Copied to %08x, size %08x", writeAddr, (u32)p->p_memsz); } } memblock.ListBlocks(); diff --git a/Core/HW/Display.cpp b/Core/HW/Display.cpp index 1831ee3f23e7..0759d8a9ee0f 100644 --- a/Core/HW/Display.cpp +++ b/Core/HW/Display.cpp @@ -243,12 +243,12 @@ void DisplayFireVblankStart() { } void DisplayFireVblankEnd() { - std::vector toCall = [] { - std::lock_guard guard(listenersLock); - return vblankListeners; - }(); - isVblank = 0; + std::vector toCall; + { + std::lock_guard guard(listenersLock); + toCall = vblankListeners; + } for (VblankCallback cb : toCall) { cb();