@@ -791,21 +791,39 @@ ssize_t PCSX::Memory::MemoryAsFile::writeAt(const void *src, size_t size, size_t
791
791
return ret;
792
792
}
793
793
794
- void PCSX::Memory::MemoryAsFile::readBlock (void *dest, size_t size, size_t ptr) {
794
+ void PCSX::Memory::MemoryAsFile::readBlock (void *dest_, size_t size, size_t ptr) {
795
+ auto dest = reinterpret_cast <uint8_t *>(dest_);
795
796
auto block = m_memory->m_readLUT [ptr / c_blockSize];
796
797
if (!block) {
797
798
memset (dest, 0 , size);
799
+ if (m_memory->msanInitialized ()) {
800
+ for (size_t i = 0 ; i < size; ++i) {
801
+ size_t msanPtr = ptr + i;
802
+ if (inMsanRange (msanPtr) && (m_memory->msanGetStatus <1 >(msanPtr) == MsanStatus::OK)) {
803
+ dest[i] = m_memory->m_msanRAM [msanPtr - c_msanStart];
804
+ }
805
+ }
806
+ }
798
807
return ;
799
808
}
800
809
auto offset = ptr % c_blockSize;
801
810
auto toCopy = std::min (size, c_blockSize - offset);
802
811
memcpy (dest, block + offset, toCopy);
803
812
}
804
813
805
- void PCSX::Memory::MemoryAsFile::writeBlock (const void *src , size_t size, size_t ptr) {
814
+ void PCSX::Memory::MemoryAsFile::writeBlock (const void *src_ , size_t size, size_t ptr) {
806
815
// Yes. That's not a bug nor a typo.
816
+ auto src = reinterpret_cast <const uint8_t *>(src_);
807
817
auto block = m_memory->m_readLUT [ptr / c_blockSize];
808
818
if (!block) {
819
+ if (m_memory->msanInitialized ()) {
820
+ for (size_t i = 0 ; i < size; ++i) {
821
+ size_t msanPtr = ptr + i;
822
+ if (inMsanRange (msanPtr)) {
823
+ m_memory->m_msanRAM [msanPtr - c_msanStart] = src[i];
824
+ }
825
+ }
826
+ }
809
827
return ;
810
828
}
811
829
auto offset = ptr % c_blockSize;
0 commit comments