[PATCH] Add -lssp_nonshared to GCC's LIB_SPEC unconditionally

Kostik Belousov kostikbel at gmail.com
Mon Sep 20 19:27:15 UTC 2010


On Mon, Sep 20, 2010 at 06:29:25PM +0200, Jeremie Le Hen wrote:
> Kostik,
> 
> On Sun, Sep 19, 2010 at 09:41:46PM +0300, Kostik Belousov wrote:
> > On Sun, Sep 19, 2010 at 10:14:06AM +0200, Jeremie Le Hen wrote:
> > > Hi Alexander,
> > > 
> > > On Thu, Aug 05, 2010 at 09:14:46PM +0200, Jeremie Le Hen wrote:
> > > > On Tue, Aug 03, 2010 at 11:46:51AM -0400, Alexander Kabaev wrote:
> > > > >
> > > > > 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 ) )
> > > > 
> > > > Ok.  For now can you commit the proposed modification.  I'll try to make
> > > > a patch with your proposal.
> > > 
> > > The attached patch does two things: It modifies bsd.lib.mk to support ld
> > > scripts for shared libraries and adds such a script to replace the
> > > /usr/lib/libc.so symlink to /lib/libc.so.X.
> > > 
> > > Basically, SHLIB_LDSCRIPT is defined in lib/libc/Makefile and points to
> > > the file containing the script itself:
> > >     GROUP ( @@SHLIB@@ /usr/lib/libssp_nonshared.a )
> > > 
> > > During make install, @@SHLIB@@ will be replaced by the real path of the
> > > shared library.
> > 
> > You did not included $FreeBSD$ tag into libc.so script. I think it would be
> > useful to have.
> 
> Sure.  I will send an updated patch a little later.
> 
> > Could you, please, comment why the script is not installed during the
> > world build stage ? My question is, would the buildworld use the script
> > for linkage ?
> 
> libc.ld, the generated ldscript in ${.OBJDIR}, is built along with
> libc.so.7 which is built only once (stage 4.2 of buildworld).
> 
> In order to get buildworld use the ld script, it would require to
> generate it twice: once during stage 4.2 using
> /usr/obj/usr/src/tmp/lib/libc.so.7 and another one afterward using
> /lib/libc.so.7.
> 
> Besides I didn't see an advantage to do this because when compiling the
> base system, CFLAGS and LDFLAGS are well controlled so -fstack-protector
> will be provided when linking the program.  On the other hand, the patch
> I propose is required for the numerous ports for which we do not control
> linking flags; lang/perl comes into my mind.  If you want to compile it
> with SSP, you have to patch its build infrastructure (see ports/138228).

You make the script only useful for the stack protection. If build process
does not use libc.so script, but installed system does, you
- require to maintain two places where (not much) hypothetical libc
  changes should go;
- make it very puzzling to debug the issues with the build of the usermode.

Please, do this in the consistent manner, so that the script can be adopted
for other uses.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20100920/a2d83e3f/attachment.pgp


More information about the freebsd-hackers mailing list