Subject: Re: Shrinking NetBSD - deep final distribution re-linker
To: Brian Rose <lists@brianrose.net>
From: Brian Grayson <bgrayson@freescale.com>
List: tech-embed
Date: 10/19/2004 09:51:49
  I could be wrong, but I thought if you had a library with a
hundred .o files, and you only accessed symbols from one .o
file, ld only pulled in the one .o file.  This is (IIRC) one of the
advantages of making a whole bunch of little .o files in your libraries, as
NetBSD does -- strcmp() is in a separate object file from gettimeofday(), etc.

  So one thing that could be done is to make sure that there is
only a single symbol in every .o file.  But that can be a source-code
maintenance nightmare even moreso than the current libc setup.  :)

  Brian Grayson

On Tue, Oct 19, 2004 at 09:42:43AM -0400, Brian Rose wrote:
> But I think what Ian is looking for is a way to strip out all the unused 
> portions of a library. For example the library 'widget' is composed of two 
> exported routines, 'foo' and 'bar'. 'Program1' uses only the 'foo' 
> function, but when linked, the code for 'bar' is included in the final 
> image.
> 
> While it may be possible to create a tool that extracts the code from a 
> library and creates a new custom library, I think the better approach is to 
> have a script that builds a custom C library from the libc source, based on 
> the requirements of the program.
> 
> I have not looked into this, but another possible solution would be if the 
> linker could notice that a particular object file was not used and discard 
> it. That way, you could simply link against all the .o files used to build 
> libc and the linker would toss out the ones that were not needed.
> 
> Sorry I can't offer any real solutions. But the time to develop this would 
> be considerable, and for my applications, several hundred kilobytes was 
> just not worth it. Maybe the next time I get laid off, I'll look at it. ;-).