Skip to content

Commit

Permalink
[WiiU] Exception handler: fix coreinit handles, add opcode to DSIs
Browse files Browse the repository at this point in the history
Coreinit seems to get special handles, so adding a special case should
make its relative addresses actually become helpful again. Let's just
hope __PPCExit stays at 0x180!
Also added the violating opcode to the DSI message; may have to move it
in case it pushes stuff off the end of the screen.

Untested at time of commit. Hopefully this should make debugging libretro#5357 a
bit easier...
  • Loading branch information
ashquarky committed Nov 30, 2017
1 parent abfb9ec commit a79d3aa
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions wiiu/system/exception_handler.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,8 @@ void __attribute__((__noreturn__)) exception_cb(OSContext* ctx, OSExceptionType

/* First up, the pretty header that tells you wtf just happened */
if (type == OS_EXCEPTION_TYPE_DSI) {
/* Exception type and offending instruction location
Also initializes exception_msgbuf, use buf_add from now on */
buf_add("DSI: Instr at %08" PRIX32, ctx->srr0);
/* Exception type and offending instruction location + opcode */
buf_add("DSI: Instr at %08" PRIX32 " (%08 " PRIX32 ")", ctx->srr0, *(unsigned int*)(ctx->srr0));
/* Was this a read or a write? */
if (ctx->dsisr & DSISR_WRITE_ATTEMPTED) {
buf_add(" bad write to");
Expand Down Expand Up @@ -216,6 +215,12 @@ void exception_print_symbol(uint32_t addr) {
/* Try for a base address */
void* libAddr;
OSDynLoad_Acquire(symbolName, &libAddr);
/* Special case for coreinit; which has broken handles */
if (strcmp(symbolName, "coreinit.rpl")) {
void* PPCExit_addr;
OSDynLoad_FindExport(libAddr, 0, "__PPCExit", &PPCExit_addr);
libAddr = PPCExit_addr - 0x180;
}
*seperator = '|';
/* We got one! */
if (libAddr) {
Expand Down

0 comments on commit a79d3aa

Please sign in to comment.