Skip site navigation (1)Skip section navigation (2)
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>