From 0a3cf87745bff1647b267276759a9d8625c500db Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sat, 20 Dec 2014 15:10:54 -0800 Subject: [PATCH] Debugger: Negative PC-relative loads now properly subtract the offset --- CHANGES | 1 + src/arm/decoder.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index a27f82efd..c9e345b00 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,7 @@ Bugfixes: - GBA Memory: Don't call into GPIO write calls if GPIO devices are absent - ARM7: Extend prefetch by one stage - GBA BIOS: Fix BIOS prefetch after returning from a SWI + - Debugger: Negative PC-relative loads now properly subtract the offset Misc: - Qt: Disable sync to video by default - GBA: Exit cleanly on FATAL if the port supports it diff --git a/src/arm/decoder.c b/src/arm/decoder.c index 2c31471ec..3bf31ad7b 100644 --- a/src/arm/decoder.c +++ b/src/arm/decoder.c @@ -127,7 +127,7 @@ static int _decodeMemory(struct ARMMemoryAccess memory, int pc, char* buffer, in int written; if (memory.format & ARM_MEMORY_REGISTER_BASE) { if (memory.baseReg == ARM_PC && memory.format & ARM_MEMORY_IMMEDIATE_OFFSET) { - written = _decodePCRelative(memory.offset.immediate, pc, buffer, blen); + written = _decodePCRelative(memory.format & ARM_MEMORY_OFFSET_SUBTRACT ? -memory.offset.immediate : memory.offset.immediate, pc, buffer, blen); ADVANCE(written); } else { written = _decodeRegister(memory.baseReg, buffer, blen);