I don't fully understand why/what is happening, but I filed a bug report against binutils ld with a reproducer that triggers the same thing with gcc < 4.7. http://sourceware.org/bugzilla/show_bug.cgi?id=13621
The linker behavior is certainly buggy. But I also don't see off hand why __TMC_END__ needs to be global at all. If it were just a local symbol like __TMC_LIST__ is, then it would just be swallowed entirely when the section is empty.
Thanks, Roland