Skip to content

Commit

Permalink
move msanValidateWrite
Browse files Browse the repository at this point in the history
  • Loading branch information
malucard committed Feb 26, 2025
1 parent 34b0978 commit e857cc5
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 13 deletions.
12 changes: 0 additions & 12 deletions src/core/psxmem.cc
Original file line number Diff line number Diff line change
Expand Up @@ -935,18 +935,6 @@ uint32_t PCSX::Memory::msanRealloc(uint32_t ptr, uint32_t size) {
return newPtr + c_msanStart;
}

bool PCSX::Memory::msanValidateWrite(uint32_t addr, uint32_t size) {
uint32_t msanAddr = addr - c_msanStart;
if (!(m_msanUsableBitmap[msanAddr / 8] & (1 << msanAddr % 8))) {
return false;
}
for (uint32_t checkAddr = msanAddr; checkAddr < msanAddr + size; checkAddr++) {
m_msanWrittenBitmap[checkAddr / 8] |= 1 << checkAddr % 8;
}
[[likely]];
return true;
}

uint32_t PCSX::Memory::msanSetChainPtr(uint32_t headerAddr, uint32_t nextPtr, uint32_t wordCount) {
if (!inMsanRange(headerAddr)) {
headerAddr &= 0xffffff;
Expand Down
15 changes: 14 additions & 1 deletion src/core/psxmem.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,11 @@ class Memory {
uint32_t msanRealloc(uint32_t ptr, uint32_t size);
uint32_t msanSetChainPtr(uint32_t headerAddr, uint32_t ptrToNext, uint32_t size);
uint32_t msanGetChainPtr(uint32_t addr) const;

inline MsanStatus msanGetStatus(uint32_t addr, uint32_t size) const {
uint32_t msanAddr = addr - c_msanStart;
if (!(m_msanUsableBitmap[msanAddr / 8] & (1 << msanAddr % 8))) {
[[unlikely]];
return MsanStatus::UNUSABLE;
}
for (uint32_t checkAddr = msanAddr; checkAddr < msanAddr + size; checkAddr++) {
Expand All @@ -102,7 +104,18 @@ class Memory {
}
return MsanStatus::OK;
}
bool msanValidateWrite(uint32_t addr, uint32_t size);

inline bool msanValidateWrite(uint32_t addr, uint32_t size) {
uint32_t msanAddr = addr - c_msanStart;
if (!(m_msanUsableBitmap[msanAddr / 8] & (1 << msanAddr % 8))) {
[[unlikely]];
return false;
}
for (uint32_t checkAddr = msanAddr; checkAddr < msanAddr + size; checkAddr++) {
m_msanWrittenBitmap[checkAddr / 8] |= 1 << checkAddr % 8;
}
return true;
}

static inline bool inMsanRange(uint32_t addr) {
return addr >= c_msanStart && addr < c_msanEnd;
Expand Down

0 comments on commit e857cc5

Please sign in to comment.