summaryrefslogtreecommitdiff
path: root/release
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>1997-06-24 21:08:52 +0000
committerMiles Bader <miles@gnu.org>1997-06-24 21:08:52 +0000
commitffac30068cf108c8de91643607d7ad581eb8f345 (patch)
tree69b34a77db827ec42a529962d3d8bd4eb9e22c26 /release
parent8d1d903a9a2f6822d9cbf701b611389205a752c4 (diff)
Renamed from mksmallso
Diffstat (limited to 'release')
-rwxr-xr-xrelease/mksmallso.sh48
1 files changed, 48 insertions, 0 deletions
diff --git a/release/mksmallso.sh b/release/mksmallso.sh
new file mode 100755
index 00000000..2f147bd0
--- /dev/null
+++ b/release/mksmallso.sh
@@ -0,0 +1,48 @@
+# Usage:
+# $1 : Destination merged, stripped, small shared library
+# $2 : lib*_pic.a files from which to produce the final small library
+# $3 : .so files that this library should depend on
+# ${4:$} : executables and shared libraries whos dependencies we care about
+
+while :; do
+ case "$1" in
+ -*) LDARGS="$1"; shift;;
+ *) break;;
+ esac
+done
+
+MERGED_SO="$1"; shift
+PIC_LIBS="$1"; shift
+DEPS="$1"; shift
+
+GCC=${GCC-gcc}
+LD=${LD-ld}
+OBJDUMP=${OBJDUMP-objdump}
+OBJCOPY=${OBJCOPY-objcopy}
+
+DEP_FLAGS_FILE=/tmp/,depflags.$$
+NEED_DSYMS_FILE=/tmp/,need.dyn.syms.$$
+HAVE_DSYMS_FILE=/tmp/,have.dyn.syms.$$
+MERGED_PIC_LIB=/tmp/,libmerged_pic.a.$$
+
+#trap "rm -f $DEP_FLAGS_FILE $MERGED_PIC_LIB $NEED_DSYMS_FILE $HAVE_DSYMS_FILE" 0
+
+
+$OBJDUMP --dynamic-syms "$@" 2>/dev/null \
+ | sed -n 's/^.*\*UND\*.* \([^ ]*\)$/\1/p' \
+ | sort -u > $NEED_DSYMS_FILE
+
+# 00000000 w F .text 00000000 syscall_device_write_request
+# 00000000 g F .text 0000056c __strtoq_internal
+$OBJDUMP --syms $PIC_LIBS 2>/dev/null \
+ | sed -n 's/^........ \(g \| w\) .. .* [0-9a-f]....... \([^ ]*\)$/\2/p' \
+ | sort -u > $HAVE_DSYMS_FILE
+
+# This had better be gnu diff...
+diff --unchanged-l='%L' --old-l= --new-l= $NEED_DSYMS_FILE $HAVE_DSYMS_FILE \
+ | sed 's/^/-u/' > $DEP_FLAGS_FILE
+
+$GCC $LDARGS -nostdlib -nostartfiles -shared -Wl,-soname=`basename $MERGED_SO` `cat $DEP_FLAGS_FILE` \
+ -o $MERGED_SO.uns $PIC_LIBS $DEPS \
+&& $OBJCOPY --strip-debug $MERGED_SO.uns $MERGED_SO \
+&& rm -f $MERGED_SO.uns