I once wrote a dynamic-doce loader for the ARM3... worked perfectly in the debugger, but intermittantly crashed in release. I was tearing my hair out for days - I was fresh out of uni then, and I couldn't use the debugger (since that hid the bug). In the end, turns out you have to explicitly flush the I-cache on an ARM if you want to load-and-execute code.