|
@@ -1,72 +0,0 @@
|
|
-#!/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`
|
|
|
|
-
|
|
|