Increase code dump on exception
This commit is contained in:
parent
d7095ce37d
commit
2520079536
@ -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 = ""
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user