Increase code dump on exception

This commit is contained in:
Nanquitas 2018-07-03 15:26:27 +02:00
parent d7095ce37d
commit 2520079536
2 changed files with 6 additions and 4 deletions

View File

@ -159,7 +159,7 @@ def main(args=None):
print("{0:<15}{1:<20}Access type: {2}".format("FAR", "{0:08x}".format(registers[19]), "Write" if registers[17] & (1 << 11) != 0 else "Read")) print("{0:<15}{1:<20}Access type: {2}".format("FAR", "{0:08x}".format(registers[19]), "Write" if registers[17] & (1 << 11) != 0 else "Read"))
thumb = registers[16] & 0x20 != 0 thumb = registers[16] & 0x20 != 0
addr = registers[15] - codeDumpSize + (2 if thumb else 4) addr = registers[15] - codeDumpSize / 2 + (2 if thumb else 4)
print("\nCode dump:\n") print("\nCode dump:\n")
@ -167,8 +167,9 @@ def main(args=None):
try: try:
path = os.path.join(os.environ["DEVKITARM"], "bin", "arm-none-eabi-objdump") path = os.path.join(os.environ["DEVKITARM"], "bin", "arm-none-eabi-objdump")
if os.name == "nt" and path[0] == '/': if os.name == "nt" and path[0] == '/':
path = ''.join((path[1], ':', path[2:])) path = ''.join(('c:', path[0], path[5:]))
objdump_res = subprocess.check_output(( objdump_res = subprocess.check_output((
path, "-marm", "-b", "binary", path, "-marm", "-b", "binary",
@ -176,6 +177,7 @@ def main(args=None):
"--stop-address="+hex(addr + codeDumpSize), "-D", "-z", "-M", "--stop-address="+hex(addr + codeDumpSize), "-D", "-z", "-M",
"reg-names-std" + (",force-thumb" if thumb else ""), args.filename "reg-names-std" + (",force-thumb" if thumb else ""), args.filename
)).decode("utf-8") )).decode("utf-8")
objdump_res = '\n'.join(objdump_res[objdump_res.find('<.data+'):].split('\n')[1:]) objdump_res = '\n'.join(objdump_res[objdump_res.find('<.data+'):].split('\n')[1:])
except: objdump_res = "" except: objdump_res = ""

View File

@ -31,7 +31,7 @@
#include "globals.h" #include "globals.h"
#define REG_DUMP_SIZE 4 * 23 #define REG_DUMP_SIZE 4 * 23
#define CODE_DUMP_SIZE 48 #define CODE_DUMP_SIZE 96
bool isExceptionFatal(u32 spsr, u32 *regs, u32 index) bool isExceptionFatal(u32 spsr, u32 *regs, u32 index)
{ {
@ -96,7 +96,7 @@ void fatalExceptionHandlersMain(u32 *registerDump, u32 type, u32 cpuId)
registerDump[15] = pc; registerDump[15] = pc;
//Dump code //Dump code
u8 *instr = (u8 *)pc + ((cpsr & 0x20) ? 2 : 4) - dumpHeader.codeDumpSize; //wouldn't work well on 32-bit Thumb instructions, but it isn't much of a problem u8 *instr = (u8 *)pc + ((cpsr & 0x20) ? 2 : 4) - (dumpHeader.codeDumpSize >> 1) ; //wouldn't work well on 32-bit Thumb instructions, but it isn't much of a problem
dumpHeader.codeDumpSize = ((u32)instr & (((cpsr & 0x20) != 0) ? 1 : 3)) != 0 ? 0 : safecpy(codeDump, instr, dumpHeader.codeDumpSize); dumpHeader.codeDumpSize = ((u32)instr & (((cpsr & 0x20) != 0) ? 1 : 3)) != 0 ? 0 : safecpy(codeDump, instr, dumpHeader.codeDumpSize);
//Copy register dump and code dump //Copy register dump and code dump