From 58e14082f9c0dcc94990bb41da84574d1070565b 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 13f5455f4..e50fe01b5 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,7 @@ Bugfixes: - ARM7: Fix LDM writeback to a register already written - GBA Memory: Don't call into GPIO write calls if GPIO devices are absent - 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);