Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Apr 2006 11:02:17 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Jeremie Le Hen <jeremie@le-hen.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: [fbsd] Re: Symbol weirdness with static linking
Message-ID:  <20060421080216.GB1446@deviant.kiev.zoral.com.ua>
In-Reply-To: <20060420221623.GD68951@obiwan.tataz.chchile.org>
References:  <20060420114822.GB35261@obiwan.tataz.chchile.org> <20060420124829.GA1446@deviant.kiev.zoral.com.ua> <20060420221623.GD68951@obiwan.tataz.chchile.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--NMuMz9nt05w80d4+
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Apr 21, 2006 at 12:16:23AM +0200, Jeremie Le Hen wrote:
> Hi, Kostik,
>=20
> > > For the sake of completeness, I added the output of some objdump(1)
> > > outputs here :
> > >=20
> > > /usr/obj/usr/src/bin/echo/echo.o:
> > > http://tataz.chchile.org/~tataz/symbol_weirdness/objdump-t_echo.txt.gz
> > >=20
> > > /usr/obj/usr/src/tmp/usr/lib/libc.a:
> > > http://tataz.chchile.org/~tataz/symbol_weirdness/objdump-t_libc.txt.gz
> > >=20
> > > /usr/obj/usr/src/tmp/usr/lib/libssp.a:
> > > http://tataz.chchile.org/~tataz/symbol_weirdness/objdump-t_libssp.txt=
.gz
> >=20
> > It seems that you rebuilt world with CFLAGS -fstack-protector,
> > since your libc has references to the symbols like __stack_smash_handle=
r.
> > As result, when linking with sequence -lgcc -lssp -lc -lgcc -lssp,
> > and no references from the main object,
> > references from libc causes objects from _second_ instance of -lssp to
> > be pulled into the link. Since libraries are scanned sequentially,
> > this object from libssp has no way to get required dependencies
> > from libc.
>=20
> Yes, I understand that.  But I can't see what's the difference between
> "syslog" and "sigfillset" symbols from this standpoint.  The fact the
> former requires ProPolice/SSP doesn't interfere IMHO.
>=20
> > What makes syslog(3) special is that corresponding object from libc,
> > syslog.o, requires __stack_smash_handler, while objects for mentioned
> > syscalls do not.
>=20
> How does it prevent the "syslog" symbol from being found ?  Libc
> undefined symbols implies the second libssp to be pulled in which in
> turn has undefined symbol.  But since there is no more libc after this,
> "sigfillset" should be missing either.
>=20
> I would understand if echo.o needed some symbols provided by the same
> archive than "sigfillset" (sigsetops.o) but this is not the case.
>=20
You are absolutely right, my error. "Explanation" with syslog dependency
on stack_smash is wrong. In fact, building bin/echo on CURRENT with
-DNO_SHARED gives

deviant% objdump -t echo | grep sigfillset
08056dc0 g     F .text  00000021 sigfillset

It seems that at least the following dependency
chain is present (for 6-STABLE):

malloc -> abort -> sigfillset,

and malloc is referenced by echo.

For CURRENT, (possibly, another) dependency also pulls
sig* from libc.

Sorry for misinformation, I was innacurate when looking at issue.

--NMuMz9nt05w80d4+
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (FreeBSD)

iD8DBQFESJGHC3+MBN1Mb4gRAgJiAJ9gxwu6Yq4CCc5ohDivBMVvWmBFsgCfdi1O
4110x28RkZ6EfhheptEOPCc=
=yrs0
-----END PGP SIGNATURE-----

--NMuMz9nt05w80d4+--



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