Date: Tue, 3 Aug 2010 11:46:51 -0400 From: Alexander Kabaev <kabaev@gmail.com> To: Jeremie Le Hen <jeremie@le-hen.org> Cc: kan@FreeBSD.org, freebsd-hackers@FreeBSD.org Subject: Re: Add -lssp_nonshared to GCC's LIB_SPEC unconditionally Message-ID: <20100803114651.651e0ea4@kan.dnsalias.net> In-Reply-To: <20100803150545.GH14016@felucia.tataz.chchile.org> References: <20100803150545.GH14016@felucia.tataz.chchile.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/0t_hMcEHU0cI.CHRt8b+CRZ Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Tue, 3 Aug 2010 17:05:46 +0200 Jeremie Le Hen <jeremie@le-hen.org> wrote: > Hi, >=20 > 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: >=20 > 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' >=20 > Since world is now compiled by default with -fstack-protector, this > may happen to everyone naively compiling a source file like above. >=20 > 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. >=20 > Index: freebsd-spec.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > 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 >=20 >=20 > 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. >=20 > Thank you. > Regards, > --=20 > Jeremie Le Hen >=20 > 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 ) ) --=20 Alexander Kabaev --Sig_/0t_hMcEHU0cI.CHRt8b+CRZ Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.15 (FreeBSD) iD8DBQFMWDnwQ6z1jMm+XZYRAttCAJ4ukd9FnlO98RZ4tqlNSTvRQnMcVACgoof4 Xo6xjP6GIF/cfSacFtOxx4o= =X8/a -----END PGP SIGNATURE----- --Sig_/0t_hMcEHU0cI.CHRt8b+CRZ--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100803114651.651e0ea4>