http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39456
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-01-02 04:25:03 UTC --- What about doing something like: #define function_def(base_section, funname, RET, ARGS) __attribute__((__section__(base_section ##funname))) RET funname ARGS #define basesect "sect1_" function_def(basesect, fct1, void, (void)); So you won't have a copy and paste error at all and it works without any real changes to the compiler.