Open SK83RJOSH opened 5 months ago
@overdrivenpotato I've pinged you and Artyom a few times on Discord about this, but pinging you here just so you can get a nice high level overview of the issue. I think I'm going to resume looking at vfpu
support for now, since I've run into a roadblock with this one. 🙂
It seems with a recent nightly change panic/exception support has broken and resulted in any/all panics causing an invalid memory access deep within
libunwind
.I have invested a couple of weeks investigating, and unfortunately haven't been able to find an easy solution to the problem. Though I have made some findings in the process which I'll dump below:
.eh_frame
/.eh_frame_hdr
have valid dataRA
/PC
to be in a0x00000000 - PROGRAM_SIZE
rangeunwinding
/libunwinding
since they do not expect.text
to be relocatedunwinding
is to manually patchRA
/PC
by subtracting0x8804000
vaddr
to be at0x0
At this stage, I'm not sure how to proceed, as fixing up the
eh_frame
data could be done during prx generation - but is likely to be a non-trivial amount of work. Similarly, forcing the linker to set avaddr
of0x8804000
for.text
might fix this issue as well, but also means a non-trivial amount of work. I'm not familiar with how the PSP relocates executables at runtime, so I'm not confident in either of these approaches being a one-size-fits-all solution.If we're able to resolve the issue with frame data, we can also switch to unwinding as I've done here + upstream support to std similar to xous. Which will significantly reduce the complexity of panic handling, as we won't need to ship a patched
libunwind
or need nearly as much boilerplate.