summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2005-07-15 15:21:12 +0000
committerru <ru@FreeBSD.org>2005-07-15 15:21:12 +0000
commit5d733fb21be407890790d3b80879b213d9cef946 (patch)
treeac3c73368f35783b9ea16945a3c5985c271b9c6b /usr.bin
parent31b14305721bc7628636caa27ddcfe8e3858db38 (diff)
downloadFreeBSD-src-5d733fb21be407890790d3b80879b213d9cef946.zip
FreeBSD-src-5d733fb21be407890790d3b80879b213d9cef946.tar.gz
Fix loder(1) to work with libraries. This can be useful to
sort long DPADD lists automatically. While here, recognize `W' as the global symbol. This has been tested since 2004.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/lorder/lorder.sh19
1 files changed, 14 insertions, 5 deletions
diff --git a/usr.bin/lorder/lorder.sh b/usr.bin/lorder/lorder.sh
index c908f76..958e95d 100644
--- a/usr.bin/lorder/lorder.sh
+++ b/usr.bin/lorder/lorder.sh
@@ -52,21 +52,21 @@ S=$(mktemp -t _symbol_)
NM=${NM:-nm}
# remove temporary files on HUP, INT, QUIT, PIPE, TERM
-trap "rm -f $R $S; exit 1" 1 2 3 13 15
+trap "rm -f $R $S $T; exit 1" 1 2 3 13 15
# make sure all the files get into the output
for i in $*; do
echo $i $i
done
-# if the line has " T " or " D " it's a globally defined symbol, put it
+# if the line has " [TDW] " it's a globally defined symbol, put it
# into the symbol file.
#
# if the line has " U " it's a globally undefined symbol, put it into
# the reference file.
${NM} -go $* | sed "
- / [TD] / {
- s/:.* [TD] / /
+ / [TDW] / {
+ s/:.* [TDW] / /
w $S
d
}
@@ -77,7 +77,16 @@ ${NM} -go $* | sed "
d
"
-# sort symbols and references on the first field (the symbol)
+# eliminate references that can be resolved by the same library.
+if [ $(expr "$*" : '.*\.a[[:>:]]') -ne 0 ]; then
+ sort -u -o $S $S
+ sort -u -o $R $R
+ T=$(mktemp -t _temp_)
+ comm -23 $R $S >$T
+ mv $T $R
+fi
+
+# sort references and symbols on the second field (the symbol),
# join on that field, and print out the file names.
sort -k 2 -o $R $R
sort -k 2 -o $S $S
OpenPOWER on IntegriCloud