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