From e46be7ffadcaf5196de9441602f40ce1a093b9e9 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Fri, 15 Jul 2005 15:21:12 +0000 Subject: [PATCH] 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. --- usr.bin/lorder/lorder.sh | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/usr.bin/lorder/lorder.sh b/usr.bin/lorder/lorder.sh index c908f761a595..958e95da31e5 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