2021-10-11 18:20:23 -03:00

46 lines
1.4 KiB
Bash

#!/bin/sh
# %Z%%M% %I% %E% SMI
#
# Given a preferred ordering of the object modules in the file $1, and a list
# of actual object modules in the directory $2, create a list of
# object modules for the "ld" command line. As time goes on, new modules
# get created and old ones get deleted without the preferred list getting
# updated.
#
# The algorithm here is to delete unused object modules from the preferred
# ordering and then append the new modules to the resulting list.
#
# People should not determine the preferred list. Instead, it
# should be decided by a tool which orders the modules by dynamically most
# used to least used. The idea is to get all of the "hot" object modules
# on the same page in order to reduce paging activity.
#
NEW=/tmp/sort.new.$$
OLD=/tmp/sort.old.$$
BOTH=/tmp/sort.both.$$
NEWONLY=/tmp/sort.newonly.$$
FIX=/tmp/sort.fix.$$
SAME=/tmp/sort.same.$$
SAMEORDERED=/tmp/sort.sameordered.$$
set -e
sed -e '/^#/d' $1 | sort > $OLD
cd $2
ls *.o > $NEW
cd ..
cat $OLD $NEW | sort > $BOTH
uniq -d $BOTH > $SAME
cat $SAME $NEW | sort | uniq -u > $NEWONLY
cat $SAME $OLD | sort | uniq -u | awk '{ print "/^" $1 "/d" }' > $FIX
if [ `wc -l < $FIX` = "0" ]; then
sed -e '/^#/d' $1 > $SAMEORDERED
else
sed -e '/^#/d' -f $FIX $1 > $SAMEORDERED
fi
cat $SAMEORDERED $NEWONLY | awk "{ print \"$2\" \"/\" \$1 }"
rm -f $OLD $NEW $BOTH $SAME $NEWONLY $FIX $SAMEORDERED