Add -lssp_nonshared to GCC's LIB_SPEC unconditionally

Alexander Kabaev kabaev at gmail.com
Tue Aug 3 15:47:01 UTC 2010


On Tue, 3 Aug 2010 17:05:46 +0200
Jeremie Le Hen <jeremie at le-hen.org> wrote:

> 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
> 
> 					    Coluche

I have no objection, but think we should cave in and investigate the
possibility of using linker script wrapping libc.so in FreeBSD-9.0:

Below is Linux' counterpart:

/* GNU ld script
   Use the shared library, but some functions are only in
   the static library, so try that secondarily.  */
OUTPUT_FORMAT(elf32-i386)
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a  AS_NEEDED
( /lib/ld-linux.so.2 ) )


-- 
Alexander Kabaev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 188 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20100803/4b49080a/signature.pgp


More information about the freebsd-hackers mailing list