ES_DECRYPT is usually called with the in IV parameter equal to the out
IV parameter. Dolphin was preemptively zeroing out the out buffer,
causing it to read zeroes for the IV. (Also be more correct when those
parameters *aren't* equal.)
Dolphin now has the dubious honor of having an exploit (smashstack) work
in it. It crashes in Project M, though.
When servicing a write-register request, it wrote the contents to the
register offset plus 0x8d070000, which corresponds to the actual
hardware registers, presumably in case the application wanted to read
them directly rather than with a read-register request. WriteToHardware
doesn't handle cached writes to registers, so it decided the address was
RAM, applied RAM_MASK, and happily wrote the register contents to
0x81070000, causing random corruption. Since the PPC does not normally
have access to those registers, there is no reason to be doing this in
the first place. Use a member to store these values instead.
(Also add a proper DoState.)
Revert "Remove HLE_IPC_CreateVirtualFATFilesystem as it no longer takes 3 minutes to LLE like the comment says."
This reverts commit 5d47fd1dde3ccdc286e2248db9967c278d694f5a.
On OS X, openL2CAPChannelSync registers events on the current
thread's run loop, so Connect needs to be called on a thread that's
going to do CFRunLoopRun; this was causing all Wiimote input to be
ignored. Easiest way to do that is to use the Wiimote thread, and
have Read call CFRunLoopRun to block on events, bringing OS X's
Wiimote event loop in line with every other platform's. This also
means that the thread can't be stopped and recreated by Prepare,
so make Prepare notify it instead, which has the side effect of not
making the GUI block on Prepare. (It would be nice if the GUI also
did not block on searching for devices, because blocking the GUI
is gross, but for now...)
IOdarwin.mm was assuming that scanning was complete when the run loop
was stopped (which the scan callback does), but somebody else was
stopping the run loop first, causing the scan to be aborted. Wait until
the scan is actually complete.
Not only do debuggers catch the expected SIGSEGV by default, I'm not
sure there's a working way to configure either gdb or lldb not to. This
commit uses an OS X-specific mechanism to add an exception handler that
runs before the default one.