head     1.1;
branch   1.1.1;
access   ;
symbols  UCLIBC_0_9_26:1.1.1.1 OPENCORES:1.1.1;
locks    ; strict;
comment  @# @;


1.1
date     2004.11.12.23.09.39;  author phoenix;  state Exp;
branches 1.1.1.1;
next     ;

1.1.1.1
date     2004.11.12.23.09.39;  author phoenix;  state Exp;
branches ;
next     ;


desc
@@



1.1
log
@Initial revision
@
text
@#!/usr/bin/perl -w
# vi: set ts=4:

# Libstrip - A utility to optimize libraries for specific executables
# Copyright (C) 2001  David A. Schleef <ds@@schleef.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This is a surprisingly simple script that gets a list of
# unresolved symbols in a list of executables specified on the
# command line, and then relinks the uClibc shared object file
# with only the those symbols and their dependencies.  This
# results in a shared object that is optimized for the executables
# listed, and thus may not work with other executables.
#
# Example: optimizing uClibc for BusyBox
#  Compile uClibc and BusyBox as normal.  Then, in this
#  directory, run:
#    libstrip path/to/busybox
#  After the script completes, there should be a new
#  libuClibc-0.9.5.so in the current directory, which
#  is optimized for busybox.
#
# How it works:
#  The uClibc Makefiles create libuClibc.so by first creating
#  the ar archive libc.a with all the object files, then links
#  the final libuClibc.so by using 'ld --shared --whole-archive'.
#  We take advantage of the linker command line option --undefined,
#  which pulls in a symbol and all its dependencies, and so relink
#  the library using --undefined for each symbol in place of
#  --whole-archive.  The linker script is used only to avoid
#  having very long command lines.

$topdir="../..";

# This is the name of the default ldscript for shared libs.  The
# file name will be different for other architectures.
$ldscript="/usr/lib/ldscripts/elf_i386.xs";

my @@syms;
my @@allsyms;
my $s;

while($exec = shift @@ARGV){
	#print "$exec\n";
	@@syms=`nm --dynamic $exec`;
	for $s (@@syms){
		chomp $s;
		if($s =~ m/^.{8} [BUV] (.+)/){
			my $x = $1;
			if(!grep { m/^$x$/; } @@allsyms){
				unshift @@allsyms, $x;
			}
		}
	}
}

open(LDSCRIPT, ">ldscript");
print LDSCRIPT "INCLUDE $ldscript\n";
for $s (@@allsyms) {
	print LDSCRIPT "EXTERN($s)\n";
}


`gcc -s -nostdlib -Wl,-warn-common -shared \\
	-o libuClibc-0.9.5.so \\
	-Wl,-soname,libc.so.0 -Wl,--script=ldscript \\
	$topdir/libc/libc.a \\
	$topdir/libc/tmp/libgcc-need.a`

@


1.1.1.1
log
@Initial import of uClibc-0.9.26
@
text
@@
