Add -lssp_nonshared to GCC's LIB_SPEC unconditionally

Jeremie Le Hen jeremie at
Tue Aug 3 15:22:00 UTC 2010


Currenty, -lssp_nonshared is appended at the link stage only when
-fstack-protector is used on the gcc command-line.  The problem I would
like to fix is a library (static or shared) compiled with
-fstack-protector being linked in without using the same flag:

  mygeeto# cc -I /usr/local/include -L /usr/local/lib -lintl conftest.c
  /usr/local/lib/ undefined reference to `__stack_chk_fail_local'

Since world is now compiled by default with -fstack-protector, this may
happen to everyone naively compiling a source file like above.

I therefore propose the following change to always link in
libssp_nonshared.a.  I think this change is harmless when the symbol is
not needed in one of the objects linked together since the linker won't
pull in the library member "ssp-local.o" in the target object.

Index: freebsd-spec.h
RCS file: /data/repos/freebsd-cvsroot/src/contrib/gcc/config/freebsd-spec.h,v
retrieving revision
diff -u -r1.26.2.2 freebsd-spec.h
--- freebsd-spec.h      27 Dec 2009 20:39:58 -0000
+++ freebsd-spec.h      3 Aug 2010 10:18:08 -0000
@@ -168,7 +168,7 @@
     %{pg:  %{pthread:-lpthread_p} -lc_p}}                              \
   %{shared:                                                            \
     %{pthread:-lpthread} -lc}                                          \
-  %{fstack-protector|fstack-protector-all:-lssp_nonshared}             \
+  -lssp_nonshared                                                      \

This change is also important because I've submitted a PR (138228) to
compile ports with SSP.  Of course many of them (although relatively
few) break.  If we eventually want this feature to reach the ports tree,
it is necessary to fix as much problems as possible.  I've already
provided a few patches in the PR, but sometimes it is exaggeratedly
difficult to fix the problem.  For instance, devel/p5-Locale-gettext
tests the existence of with a naively compiled source file
which doesn't link because of this error.  The easiest way after the one
proposed above would be to apply a patch conditionnaly.

Thank you.
Jeremie Le Hen

Humans are born free and equal.  But some are more equal than others.

More information about the freebsd-hackers mailing list