all repos — mgba @ bedbaf39789c61494f5d91d98c4f50696ab7ce1d

mGBA Game Boy Advance Emulator

GBA Serialize: Ensure program counter is aligned when loading
Vicki Pfau vi@endrift.com
Mon, 26 Oct 2020 21:25:49 -0700
commit

bedbaf39789c61494f5d91d98c4f50696ab7ce1d

parent

a2cd8f6cce7b2ee7da52d603d0877b291dc4c693

2 files changed, 6 insertions(+), 0 deletions(-)

jump to
M CHANGESCHANGES

@@ -71,6 +71,7 @@ - FFmpeg: Fix encoding of time base

- 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
M src/gba/serialize.csrc/gba/serialize.c

@@ -154,6 +154,11 @@ }

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);