Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Aug 2010 17:05:46 +0200
From:      Jeremie Le Hen <jeremie@le-hen.org>
To:        freebsd-hackers@FreeBSD.org
Cc:        kan@FreeBSD.org
Subject:   Add -lssp_nonshared to GCC's LIB_SPEC unconditionally
Message-ID:  <20100803150545.GH14016@felucia.tataz.chchile.org>

next in thread | raw e-mail | index | archive | help
Hi,

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/libintl.so: 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 1.26.2.2
diff -u -r1.26.2.2 freebsd-spec.h
--- freebsd-spec.h      27 Dec 2009 20:39:58 -0000      1.26.2.2
+++ 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                                                      \
   "
 #endif
 #endif


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 libintl.so 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.
Regards,
-- 
Jeremie Le Hen

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100803150545.GH14016>