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>