There is no MMU. There is an MPU, but all RAM is set to read/write. See
http://chdk.setepontos.com/index.php/topic,2139.0.html for information about the CPU configuration.
If you are loading code, you need to ensure cache coherency. If you load your code into malloc memory, the instruction cache will not reflect this.
A simple workaround for development would be to use umalloc memory instead. This is uncached, and hence will be very slow, but good enough for testing. See the arm 946e-s reference docs for cache control instructions. You can find useful links in
http://chdk.wikia.com/wiki/Developer_Technical_DocumentsI suspect that just using fPIC isn't sufficient. At the very lest, you'll need to ensure the pic register is set up correctly. To determine whether this is true, examine the disassembly of your generated binary.
I would suggest you look at how loadable binaries are done in MMU-less linux environments, particularly the ARM ports.