Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Apr 2006 15:17:32 +0200
From:      Jeremie Le Hen <jeremie@le-hen.org>
To:        Kostik Belousov <kostikbel@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: [fbsd] Re: Symbol weirdness with static linking
Message-ID:  <20060420131732.GA68951@obiwan.tataz.chchile.org>
In-Reply-To: <20060420124829.GA1446@deviant.kiev.zoral.com.ua>
References:  <20060420114822.GB35261@obiwan.tataz.chchile.org> <20060420124829.GA1446@deviant.kiev.zoral.com.ua>

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

On Thu, Apr 20, 2006 at 03:48:29PM +0300, Kostik Belousov wrote:
> It seems that you rebuilt world with CFLAGS -fstack-protector,
> since your libc has references to the symbols like __stack_smash_handler.
> 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.
> 
> What makes syslog(3) special is that corresponding object from libc,
> syslog.o, requires __stack_smash_handler, while objects for mentioned
> syscalls do not.
> 
> Probably, another -lc after -lssp will change the situation. But
> I'm not sure would it be enough or not.

You got the point.  If I add another -lc after the second -lssp,
this solves the problem :

/usr/bin/ld -V -Bstatic -o echo /usr/obj/usr/src/tmp/usr/lib/crt1.o /usr/obj/usr/src/tmp//usr/lib/crti.o /usr/obj/usr/src/tmp/usr/lib/crtbegin.o -L/usr/obj/usr/src/tmp/usr/lib echo.o -lgcc -lssp -lc /usr/obj/usr/src/tmp/usr/lib/crtend.o /usr/obj/usr/src/tmp/usr/lib/crtn.o

Another way to solve this is to group libraries using "-(" and "-)" ld(1)
options :

/usr/bin/ld -V -Bstatic -o echo /usr/obj/usr/src/tmp/usr/lib/crt1.o /usr/obj/usr/src/tmp/usr/lib/crti.o /usr/obj/usr/src/tmp/usr/lib/crtbegin.o -L/usr/obj/usr/src/tmp/usr/lib echo.o -lgcc -lssp -\( -lc -lgcc -lssp -\) /usr/obj/usr/src/tmp/usr/lib/crtend.o /usr/obj/usr/src/tmp/usr/lib/crtn.o

Thank you for your answer.
Best regards,
-- 
Jeremie Le Hen
< jeremie at le-hen dot org >< ttz at chchile dot org >



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