Awesome stuff ;3
Finally got myself a copy of IDA, are there any essentials (other than this and the RPL loader) you'd recommend? I feel like it doesn't quite know what it's looking at yet.
I have a bunch of stuff added, I'd recommend PPC2C but it doesn't cover all simplified instructions (for example I spent the last while figuring out how tf clrlslwi works), you're better off getting IDAPython working, I plan to make a script some time to make it loads easier.
I also use IDASkins to make the GUI black and then use ida-consonance to change text color for an all black layout, and I have findcrypt from
http://www.hexblog.com/?p=28, which isn't particularly useful if there aren't any crypto algorithms, and I've also been using bindiff which Google released for free to compare databases between OS versions
http://www.zynamics.com/bindiff.html
Other then that, it works fine, just make sure you're using an IDA version of something like 6.3+ since they added official opcode support for paired singles which the Gamecube, Wii, and Wii U use (and I see several chunks in the kernel that contain them), which you can find in Processor Options -> PS
~~~~~~~ General stuff ~~~~~~~
IDA likes doing stupid stuff to databases, if you're editing ppc.cfg with
these registers, you need to put it at the very top, right before the .ppc section starts, putting it as the default still doesn't make it use it for databases, so if you close and reopen it'll start using the first entry again until you go to Options -> General -> Analysis -> Processor specific options -> change device back to wiiu
clrlslwi is clear left and shift left word immediate, if you have r12, r12, a, b (eg 30, 18) it clears bits 0 up to a, so it isolates the last 2 bits, then shifts it left 18 bits
they get the value from the pir special register for which core called the function (need 2 bits for core 2), then shifts left 18 bits and adds to 0xFFE04000 to get the kernel memory region for each core, 0xFFE04000, 0xFFE440000, or 0xFFE84000. Putting this here in case someone retraces my steps. clrlwi is just clear left, so clear bits 0 to a-1.
For a python equivalent, r12 &= ((1 << (32 - 30)) - 1);r12 <<= 18, which shifts 1 left one more bit then we need, then subtracts 1 to get 1 bits on all the ones we want to keep, then AND to clear the other bits, then shift left 18 and store