mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Debugger: Allow currently-invalid memory reference.
This commit is contained in:
1 parent
8cefb98e97
commit
0a98ac43fa
2 files changed
+19
-32
No files matched your search
@@ -159,37 +159,25 @@ public:
|
||||
return EXPR_TYPE_UINT;
|
||||
}
|
||||
|
||||
bool getMemoryValue(uint32_t address, int size, uint32_t& dest, char* error) override
|
||||
{
|
||||
switch (size)
|
||||
{
|
||||
case 1: case 2: case 4:
|
||||
break;
|
||||
default:
|
||||
sprintf(error,"Invalid memory access size %d",size);
|
||||
return false;
|
||||
}
|
||||
bool getMemoryValue(uint32_t address, int size, uint32_t& dest, char* error) override {
|
||||
// We allow, but ignore, bad access.
|
||||
// If we didn't, log/condition statements that reference registers couldn't be configured.
|
||||
bool valid = Memory::IsValidRange(address, size);
|
||||
|
||||
if (address % size)
|
||||
{
|
||||
sprintf(error,"Invalid memory access (unaligned)");
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (size)
|
||||
{
|
||||
switch (size) {
|
||||
case 1:
|
||||
dest = Memory::Read_U8(address);
|
||||
break;
|
||||
dest = valid ? Memory::Read_U8(address) : 0;
|
||||
return true;
|
||||
case 2:
|
||||
dest = Memory::Read_U16(address);
|
||||
break;
|
||||
dest = valid ? Memory::Read_U16(address) : 0;
|
||||
return true;
|
||||
case 4:
|
||||
dest = Memory::Read_U32(address);
|
||||
break;
|
||||
dest = valid ? Memory::Read_U32(address) : 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
sprintf(error, "Unexpected memory access size %d", size);
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -916,20 +916,19 @@ ExpressionType GEExpressionFunctions::getFieldType(GECmdFormat fmt, GECmdField f
|
||||
}
|
||||
|
||||
bool GEExpressionFunctions::getMemoryValue(uint32_t address, int size, uint32_t &dest, char *error) {
|
||||
if (!Memory::IsValidRange(address, size)) {
|
||||
sprintf(error, "Invalid address or size %08x + %d", address, size);
|
||||
return false;
|
||||
}
|
||||
// We allow, but ignore, bad access.
|
||||
// If we didn't, log/condition statements that reference registers couldn't be configured.
|
||||
bool valid = Memory::IsValidRange(address, size);
|
||||
|
||||
switch (size) {
|
||||
case 1:
|
||||
dest = Memory::Read_U8(address);
|
||||
dest = valid ? Memory::Read_U8(address) : 0;
|
||||
return true;
|
||||
case 2:
|
||||
dest = Memory::Read_U16(address);
|
||||
dest = valid ? Memory::Read_U16(address) : 0;
|
||||
return true;
|
||||
case 4:
|
||||
dest = Memory::Read_U32(address);
|
||||
dest = valid ? Memory::Read_U32(address) : 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user