/* * Enable MaverickCrunch forwarding in any existing program by DLL injection. * * Usage (to enable Crunch forwarding in "program"): * gcc -mcpu=ep9312 -fPIC -shared -o fwden.so fwden.c * LD_PRELOAD=`pwd`/fwden.so program * * Ref: http://neworder.box.sk/newsread.php?newsid=13857 */ /* __gmon_start__ is a weak symbol defined in all C programs */ __gmon_start__() { asm("cfmv32sc mvdx0, dspsc"); /* Read status register */ asm("cfmvrdl r0, mvd0"); /* Move LSW to ARM */ asm("orr r0, r0, #0x4000"); /* Set forwarding bit */ asm("cfmvdlr mvd0, r0"); /* Move ARM to LSW */ asm("cfmvsc32 dspsc, mvdx0"); /* Write to status register */ return(0); }