In the last episode (Dec 12), Martin Stjernholm, Roxen IS @ Pike developers forum said:
Hooking onto mprotect(2) would probably help but it's not a 100% solution since afaics there's no system call that has to be issued when some previously executed memory is overwritten and executed again.
Cache flushing is machine-dependant, and I /think/ the x86 CPUs do bus snooping so caches are always valid. Just make sure there are calls to VALGRIND_DISCARD_TRANSLATIONS whenever you change code, and valgrind should be happy.