On ELF one can easily create two sections with the same name in different comdats: --------------------------------------------- .section foo,"axG",@progbits,f,comdat .globl f f: ret .section foo,"axG",@progbits,g,comdat .globl g g: ret --------------------------------------------- on COFF that is not possible since the .section directive doesn't include the comdat information (that is part of the .linkonce directive). This means that a compiler using gas needs to produce unique names, producing more complex .obj files than the ones produced by msvc, which, for example, have all c++ inline functions in sections named .text. The assembler included in LLVM solved this by allowing the information normally passed to .linkonce to be passed to .section itself: http://llvm.org/docs/Extensions.html#section-directive