I've just had an "anvil of enlightenment" moment. I've been struggling for about an hour trying to boot a custom Linux kernel on a custom ARM target. When you jump to the entry point of the kernel, a few processor registers must be set accordingly for the kernel to gather initial information about the system since there is no BIOS on an embedded target. The boot loader I'm using has a very nice facility for passing arguments in the registers prior to jumping to any code... Unfortunately for me, I "forgot" about the existence of register r0 and thus the arguments I thought I was passing into registers r1 & r2 actually ended up in r0 & r1.

I think its time for a small break before I continue...