http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48200
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |NEW CC| |hubicka at gcc dot gnu.org --- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-03-22 10:02:24 UTC --- Confirmed. I think what happens is that the symver global asms get partitioned away from the function definitions. With -flto-partition=none it works for me. > grep pci_fill_info libpci.so.3.1.7.ltrans?.s libpci.so.3.1.7.ltrans0.s: .symver pci_fill_info_v30,pci_fill_info@LIBPCI_3.0 libpci.so.3.1.7.ltrans0.s: .symver pci_fill_info_v31,pci_fill_info@@LIBPCI_3.1 libpci.so.3.1.7.ltrans1.s: call pci_fill_info_v31@PLT libpci.so.3.1.7.ltrans1.s: .globl pci_fill_info_v31 libpci.so.3.1.7.ltrans1.s: .type pci_fill_info_v31, @function libpci.so.3.1.7.ltrans1.s:pci_fill_info_v31: libpci.so.3.1.7.ltrans1.s: .size pci_fill_info_v31, .-pci_fill_info_v31 libpci.so.3.1.7.ltrans1.s: .globl pci_fill_info_v30 libpci.so.3.1.7.ltrans1.s: .set pci_fill_info_v30,pci_fill_info_v31 libpci.so.3.1.7.ltrans2.s: call pci_fill_info_v31@PLT so indeed that is what happens (-save-temps appended to the link command produces those intermediate files). We can't really know better (we do not parse asm strings), -flto-partition=none is a workaround. A fix would be to not use toplevel asms, but I'm not sure a different way for the symvers exists (maybe it's possible to do entirely in the linker script ...).