If you are running with normal data in 'tightly coupled' memory, then you also want to avoid data access to the code memory during normal running as these will be slow Avalon cycles (especially if you don't have a data cache).
There are two cases where the instruction memory might end up containing data.
1) readonly data.
2) switch statement jump tables.
Readonly data is relatively easily moved by changing the linker script.
gcc3 puts the switch statement jump tables in their own segment, but the Altera build of gcc4 has them hard-coded into the text segment, this is rather fubar. I think it was done because of issues with the available relocation types for shared libraries (position independant code).
Fixing this need a compiler rebuild.