https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88061
--- Comment #6 from Barry Revzin <barry.revzin at gmail dot com> --- Any action on this one? A workaround right now is to change code that would ideally look like (which is pretty clean in my opinion): template <typename T> void foo() { [[gnu::section(".meow")]] static int value = 0; } to code that looks like: template <typename T> void foo() { static int PUT_IN_MEOW_value = 0; } and add a linker script that moves these variables over: .meow : { KEEP(*(SORT(.*PUT_IN_MEOW_*))) } But this is, to put it mildly, less than ideal.