From d6aa139aefaddfda946f56f88c4e08544becbe38 Mon Sep 17 00:00:00 2001 From: julian Date: Fri, 18 Jan 2008 17:02:14 +0000 Subject: refactor code so it can run in a chroot without having to have /dev/mounted MFC After: 1 week --- sys/kern/genassym.sh | 81 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 33 deletions(-) (limited to 'sys/kern/genassym.sh') diff --git a/sys/kern/genassym.sh b/sys/kern/genassym.sh index 70ad69e..1cbc32b 100644 --- a/sys/kern/genassym.sh +++ b/sys/kern/genassym.sh @@ -1,19 +1,56 @@ #!/bin/sh # $FreeBSD$ -# Grrr, this should use stdin and stdout, but is encrufted for compatibility. - usage() { echo "usage: genassym [-o outfile] objfile" exit 1 } -outfile=/dev/stdout + +work() +{ + ${NM:='nm'} "$1" | ${AWK:='awk'} ' + / C .*sign$/ { + sign = substr($1, length($1) - 3, 4) + sub("^0*", "", sign) + if (sign != "") + sign = "-" + } + / C .*w0$/ { + w0 = substr($1, length($1) - 3, 4) + } + / C .*w1$/ { + w1 = substr($1, length($1) - 3, 4) + } + / C .*w2$/ { + w2 = substr($1, length($1) - 3, 4) + } + / C .*w3$/ { + w3 = substr($1, length($1) - 3, 4) + w = w3 w2 w1 w0 + sub("^0*", "", w) + if (w == "") + w = "0" + sub("w3$", "", $3) + # This still has minor problems representing INT_MIN, etc. + # E.g., + # with 32-bit 2''s complement ints, this prints -0x80000000, + # which has the wrong type (unsigned int). + printf("#define\t%s\t%s0x%s\n", $3, sign, w) + } ' +} + + +# +#MAIN PROGGRAM +# +use_outfile="no" while getopts "o:" option do case "$option" in - o) outfile="$OPTARG";; + o) outfile="$OPTARG" + use_outfile="yes";; *) usage;; esac done @@ -23,32 +60,10 @@ case $# in *) usage;; esac -${NM:='nm'} "$1" | ${AWK:='awk'} ' -/ C .*sign$/ { - sign = substr($1, length($1) - 3, 4) - sub("^0*", "", sign) - if (sign != "") - sign = "-" -} -/ C .*w0$/ { - w0 = substr($1, length($1) - 3, 4) -} -/ C .*w1$/ { - w1 = substr($1, length($1) - 3, 4) -} -/ C .*w2$/ { - w2 = substr($1, length($1) - 3, 4) -} -/ C .*w3$/ { - w3 = substr($1, length($1) - 3, 4) - w = w3 w2 w1 w0 - sub("^0*", "", w) - if (w == "") - w = "0" - sub("w3$", "", $3) - # This still has minor problems representing INT_MIN, etc. E.g., - # with 32-bit 2''s complement ints, this prints -0x80000000, which - # has the wrong type (unsigned int). - printf("#define\t%s\t%s0x%s\n", $3, sign, w) -} -' 3>"$outfile" >&3 3>&- +if [ "$use_outfile" = "yes" ] +then + work $1 3>"$outfile" >&3 3>&- +else + work $1 +fi + -- cgit v1.1