From d71cc7b9f698d5e0edd9d57b3d9bd9975670f144 Mon Sep 17 00:00:00 2001 From: Lionel Sambuc Date: Tue, 4 Dec 2012 13:14:52 +0100 Subject: [PATCH] Importing lorder Change-Id: I0043c56a40a69ea809c909285c06de0273bada9f --- distrib/sets/lists/minix/mi | 2 + docs/UPDATING | 5 ++ releasetools/nbsd_ports | 2 + tools/Makefile | 2 +- tools/lorder/Makefile | 28 ++++++++++ usr.bin/Makefile | 2 +- usr.bin/lorder/Makefile | 8 +++ usr.bin/lorder/lorder.1 | 71 +++++++++++++++++++++++++ usr.bin/lorder/lorder.sh | 102 ++++++++++++++++++++++++++++++++++++ 9 files changed, 220 insertions(+), 2 deletions(-) create mode 100644 tools/lorder/Makefile create mode 100644 usr.bin/lorder/Makefile create mode 100644 usr.bin/lorder/lorder.1 create mode 100644 usr.bin/lorder/lorder.sh diff --git a/distrib/sets/lists/minix/mi b/distrib/sets/lists/minix/mi index 60a5dbc51..66cba42c3 100644 --- a/distrib/sets/lists/minix/mi +++ b/distrib/sets/lists/minix/mi @@ -276,6 +276,7 @@ ./usr/bin/logger minix-sys ./usr/bin/login minix-sys ./usr/bin/look minix-sys +./usr/bin/lorder minix-sys ./usr/bin/lpd minix-sys ./usr/bin/lp minix-sys ./usr/bin/lspci minix-sys @@ -1291,6 +1292,7 @@ ./usr/man/man1/logger.1 minix-sys ./usr/man/man1/login.1 minix-sys ./usr/man/man1/look.1 minix-sys +./usr/man/man1/lorder.1 minix-sys ./usr/man/man1/lp.1 minix-sys ./usr/man/man1/ls.1 minix-sys ./usr/man/man1/lspci.1 minix-sys diff --git a/docs/UPDATING b/docs/UPDATING index 7216c3d4c..841663ed5 100644 --- a/docs/UPDATING +++ b/docs/UPDATING @@ -1,3 +1,8 @@ +20121205: + lorder requires a newer version of sort, so to ensure it is present + do the following: + # make -C usr.bin/sort clean all install + 20121127: /etc/mtab is now obsoleted by /proc/mounts. You need to create a symlink: diff --git a/releasetools/nbsd_ports b/releasetools/nbsd_ports index 2914f32ac..3f558b623 100644 --- a/releasetools/nbsd_ports +++ b/releasetools/nbsd_ports @@ -54,6 +54,7 @@ 2012/10/17 12:00:00,tools/headerlist 2012/10/17 12:00:00,tools/host-mkdep 2012/10/17 12:00:00,tools/lex +2012/10/17 12:00:00,tools/lorder 2012/10/17 12:00:00,tools/Makefile 2012/10/17 12:00:00,tools/Makefile.gnuhost 2012/10/17 12:00:00,tools/Makefile.host @@ -66,6 +67,7 @@ 2012/10/17 12:00:00,tools/tic 2012/10/17 12:00:00,usr.bin/gzip/Makefile 2012/10/17 12:00:00,usr.bin/indent +2012/10/17 12:00:00,usr.bin/lorder 2012/10/17 12:00:00,usr.bin/Makefile 2012/10/17 12:00:00,usr.bin/Makefile.inc 2012/10/17 12:00:00,usr.bin/passwd/Makefile diff --git a/tools/Makefile b/tools/Makefile index aaf768004..9eabe1902 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -61,7 +61,7 @@ LINT_BITS= lint lint2 SUBDIR= host-mkdep .WAIT compat .WAIT \ binstall .WAIT mktemp .WAIT sed .WAIT \ genassym \ - makewhatis mkdep mtree .WAIT \ + lorder makewhatis mkdep mtree .WAIT \ m4 \ .WAIT mkfs.mfs \ .WAIT yacc \ diff --git a/tools/lorder/Makefile b/tools/lorder/Makefile new file mode 100644 index 000000000..b64d0ada4 --- /dev/null +++ b/tools/lorder/Makefile @@ -0,0 +1,28 @@ +# $NetBSD: Makefile,v 1.11 2008/10/25 22:15:28 apb Exp $ + +.include + +COMPATOBJ!= cd ${.CURDIR}/../compat && ${PRINTOBJDIR} +.-include "${COMPATOBJ}/defs.mk" + +TIMESTAMP= ${TOOLDIR}/bin/${_TOOL_PREFIX}lorder + +CLEANFILES+= lorder + +.PATH: ${.CURDIR}/../../usr.bin/lorder + +.include + +install: ${TIMESTAMP} +${TIMESTAMP}: lorder + ${HOST_INSTALL_FILE} -m ${BINMODE} ${.ALLSRC} ${.TARGET} + +lorder: lorder.sh + ${TOOL_SED} -e "s,/bin/sh,"${HOST_BSHELL:Q}",g" \ + -e "s,{JOIN:=.*},{JOIN:="${TOOL_JOIN:Q}"}," \ + -e "s,{MKTEMP:=.*},{MKTEMP:="${TOOL_MKTEMP:Q}"}," \ + -e "s,{NM:=.*},{NM:="${NM:Q}"}," \ + -e "s,{SED:=.*},{SED:="${TOOL_SED:Q}"}," \ + < ${.ALLSRC} > ${.TARGET} + +realall: lorder diff --git a/usr.bin/Makefile b/usr.bin/Makefile index fbfcea4b6..174191110 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -12,7 +12,7 @@ SUBDIR= \ genassym \ indent \ ldd \ - login m4 \ + login lorder m4 \ make man \ mkdep mktemp \ newgrp \ diff --git a/usr.bin/lorder/Makefile b/usr.bin/lorder/Makefile new file mode 100644 index 000000000..761bec705 --- /dev/null +++ b/usr.bin/lorder/Makefile @@ -0,0 +1,8 @@ +# $NetBSD: Makefile,v 1.11 1997/03/24 21:59:43 christos Exp $ +# @(#)Makefile 8.1 (Berkeley) 6/6/93 + +MAN= lorder.1 + +SCRIPTS=lorder.sh + +.include diff --git a/usr.bin/lorder/lorder.1 b/usr.bin/lorder/lorder.1 new file mode 100644 index 000000000..19b47ad17 --- /dev/null +++ b/usr.bin/lorder/lorder.1 @@ -0,0 +1,71 @@ +.\" $NetBSD: lorder.1,v 1.8 2012/03/22 07:58:19 wiz Exp $ +.\" +.\" Copyright (c) 1990, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)lorder.1 8.2 (Berkeley) 4/28/95 +.\" +.Dd April 28, 1995 +.Dt LORDER 1 +.Os +.Sh NAME +.Nm lorder +.Nd list dependencies for object files +.Sh SYNOPSIS +.Nm +.Ar +.Sh DESCRIPTION +The +.Nm +utility uses +.Xr nm 1 +to determine interdependencies in the list of object files +specified on the command line. +.Nm +outputs a list of file names where the first file contains a symbol +which is defined by the second file. +.Pp +The output is normally used with +.Xr tsort 1 +when a library is created to determine the optimum ordering of the +object modules so that all references may be resolved in a single +pass of the loader. +.Sh EXAMPLES +.Bd -literal -offset indent +ar cr library.a `lorder ${OBJS} | tsort` +.Ed +.Sh SEE ALSO +.Xr ar 1 , +.Xr ld 1 , +.Xr nm 1 , +.Xr ranlib 1 , +.Xr tsort 1 +.Sh HISTORY +An +.Nm +utility appeared in +.At v7 . diff --git a/usr.bin/lorder/lorder.sh b/usr.bin/lorder/lorder.sh new file mode 100644 index 000000000..5fe5a178f --- /dev/null +++ b/usr.bin/lorder/lorder.sh @@ -0,0 +1,102 @@ +#!/bin/sh - +# $NetBSD: lorder.sh,v 1.15 2007/01/14 16:29:35 apb Exp $ +# +# Copyright (c) 1990, 1993 +# The Regents of the University of California. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the University of +# California, Berkeley and its contributors. +# 4. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# @(#)lorder.sh 8.1 (Berkeley) 6/6/93 +# + +# If the user has set ${NM} then we use it, otherwise we use 'nm'. +# Similarly for JOIN, MKTEMP, SED, and SORT. +# +# For each of these, we try to find the command in the user's path, and +# if that fails we try to find it in the default path. If we can't +# find it, we punt. Once we find it, we canonicalize its name and set +# the path to the default path so that other commands we use are picked +# properly. + +: ${JOIN:=join} +: ${MKTEMP:=mktemp} +: ${NM:=nm} +: ${SED:=sed} +: ${SORT:=sort} +for var in JOIN MKTEMP NM SED SORT ; do + if ! eval type "\$${var}" >/dev/null 2>&1 ; then + PATH=/bin:/usr/bin + export PATH + if ! eval type "\$${var}" > /dev/null 2>&1; then + eval echo "lorder: \$${var}: not found" >&2 + exit 1 + fi + fi + cmd='set $(eval type "\$${var}") ; eval echo \$$#' + eval "${var}=\$(eval \${cmd})" +done + +# only one argument is a special case, just output the name twice +case $# in + 0) + echo "usage: lorder file ..." >&2; + exit ;; + 1) + echo $1 $1; + exit ;; +esac + +# temporary files +N=$("${MKTEMP}" /tmp/_nm_.XXXXXX) || exit 1 +R=$("${MKTEMP}" /tmp/_reference_.XXXXXX) || exit 1 +S=$("${MKTEMP}" /tmp/_symbol_.XXXXXX) || exit 1 + +# remove temporary files on exit +trap "rm -f $N $R $S; exit 0" 0 +trap "rm -f $N $R $S; exit 1" HUP INT QUIT PIPE TERM 2>/dev/null || \ + trap "rm -f $N $R $S; exit 1" 1 2 3 13 15 + +# if the line ends in a colon, assume it's the first occurrence of a new +# object file. Echo it twice, just to make sure it gets into the output. +# +# if the line has " T " or " D " 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. +(for file in $* ; do echo $file":" ; done ; $NM -go $*) >$N +"${SED}" -ne '/:$/{s/://;s/.*/& &/;p;}' <$N +"${SED}" -ne 's/:.* [TDGR] / /p' <$N >$S +"${SED}" -ne 's/:.* U / /p' <$N >$R + +# sort symbols and references on the second field (the symbol) +# join on that field, and print out the file names. +"${SORT}" -k2 $R -o $R +"${SORT}" -k2 $S -o $S +"${JOIN}" -j 2 -o 1.1,2.1 $R $S -- 2.44.0