GBA Serialize: Ensure program counter is aligned when loading

This commit is contained in:
Vicki Pfau 2020-10-26 21:25:49 -07:00
parent a2cd8f6cce
commit bedbaf3978
2 changed files with 6 additions and 0 deletions

View File

@ -71,6 +71,7 @@ Other fixes:
- GBA: Disable more checks when loading GS save with checks disabled (fixes mgba.io/i/1851)
- GBA: Fix endianness issues in renderer proxy
- GBA Core: Fix memory leak when loading symbols
- GBA Serialize: Ensure program counter is aligned when loading
- Qt: Force OpenGL paint engine creation thread (fixes mgba.io/i/1642)
- Qt: Fix static compilation in MinGW (fixes mgba.io/i/1769)
- Qt: Fix a race condition in the frame inspector

View File

@ -154,6 +154,11 @@ bool GBADeserialize(struct GBA* gba, const struct GBASerializedState* state) {
LOAD_32(gba->cpu->bankedSPSRs[i], i * sizeof(gba->cpu->bankedSPSRs[0]), state->cpu.bankedSPSRs);
}
gba->cpu->privilegeMode = gba->cpu->cpsr.priv;
uint32_t pcMask = (gba->cpu->executionMode == MODE_THUMB ? WORD_SIZE_THUMB : WORD_SIZE_ARM) - 1;
if (gba->cpu->gprs[ARM_PC] & pcMask) {
mLOG(GBA_STATE, WARN, "Savestate has unaligned PC and is probably corrupted");
gba->cpu->gprs[ARM_PC] &= ~pcMask;
}
gba->cpu->memory.setActiveRegion(gba->cpu, gba->cpu->gprs[ARM_PC]);
if (state->biosPrefetch) {
LOAD_32(gba->memory.biosPrefetch, 0, &state->biosPrefetch);