On Fri, Apr 17, 2015 at 04:48:48AM -0700, H.J. Lu wrote: > > I don't like it. Nonshared libgcc is libgcc.a, period. No sense in > > creating yet another library for that. > > So, IMHO beyond making the __cpu* entrypoints compat symbols only (@ instead > > of @@ symbol versions) the right fix is simply tweak init_gcc_spec, so that > > static_name is always linked in, in the switch combinations that it isn't > > right now of course after shared_name rather than before that. > > I thought we've fixed that years ago... > > > > We never pass -lgcc to linker when building C++ DSO: > > /usr/libexec/gcc/x86_64-redhat-linux/4.9.2/collect2 -plugin > /usr/libexec/gcc/x86_64-redhat-linux/4.9.2/liblto_plugin.so > -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/4.9.2/lto-wrapper > -plugin-opt=-fresolution=/tmp/ccZC7iqy.res > -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc > -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed > --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -shared > /usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../lib64/crti.o > /usr/lib/gcc/x86_64-redhat-linux/4.9.2/crtbeginS.o > -L/usr/lib/gcc/x86_64-redhat-linux/4.9.2 > -L/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../lib64 > -L/lib/../lib64 -L/usr/lib/../lib64 > -L/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../.. x.o -lstdc++ -lm > -lgcc_s -lc -lgcc_s /usr/lib/gcc/x86_64-redhat-linux/4.9.2/crtendS.o > /usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../lib64/crtn.o > [hjl@gnu-32 tmp]$ > > That is why libgcc_nonshared.a is needed.
See what I wrote. I think it is a bug that we don't do that, in your case we should pass -lgcc_s -lgcc -lc -lgcc_s -lgcc. Or, if you don't want to change that, as the multi-versioning change is i386/x86_64 only change, just ensure that those targets have t-slibgcc-libgcc in libgcc/config.host and thus behave like most other linux targets where -lgcc is linked in always after -lgcc_s. Jakub