http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29963
--- Comment #3 from Oleg Endo <olegendo at gcc dot gnu.org> 2012-11-13 00:53:45 UTC --- (In reply to comment #2) > But it is not uncommon to load the program into RAM before executing, > e.g. because the ROM it's stored in is too slow. Newer SH2A devices with on-chip flash have some facilities to fix that ;) > > In that case, you could indeed only do this optimization for constant > variables / arrays. > True. For example in such cases as: const char* test (void) { return "test"; } .file "sh_tmp.cpp" .text .little .section .rodata.str1.4,"aMS",@progbits,1 .align 2 .LC0: .string "test" .text .align 1 .global __Z4testv .type __Z4testv, @function __Z4testv: mov.l .L2,r0 rts nop .L3: .align 2 .L2: .long .LC0 .size __Z4testv, .-__Z4testv .ident "GCC: (GNU) 4.8.0 20121112 (experimental)" The string constant could be placed in .text instead of .rodata, even without link time relaxation: __Z4testv: mova .L2,r0 rts nop .L3: .align 2 .L2: .string "test" However, it might have negative effects on the overall constant pool usage. I guess there should be a limit on the size (and the number of) elements that are moved from .rodata to .text.