https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57982
--- Comment #3 from Kai Tietz <ktietz at gcc dot gnu.org> --- The problem here is the use of weak on pe-coff. The change you see on gcc is just addressing the fact that for 64-bit the weak symbol never can get 0 due relocation-limitations. We try to address this. On the other hand we have here to work-a-round a binutils quirk that default-implementation of a weak is used in its definition TU always, even if a none-weak symbol is present in a different TU. This can be worked-a-round by moving default-implementation into different TU. Hope this answered some of your questions. (anyway IMHO, in general we should have used here a variant without any weak-symbol)