]> CyberLeo.Net >> Repos - FreeBSD/releng/7.2.git/blob - sys/kern/genassym.sh
Create releng/7.2 from stable/7 in preparation for 7.2-RELEASE.
[FreeBSD/releng/7.2.git] / sys / kern / genassym.sh
1 #!/bin/sh
2 # $FreeBSD$
3
4 # Grrr, this should use stdin and stdout, but is encrufted for compatibility.
5
6 usage()
7 {
8         echo "usage: genassym [-o outfile] objfile"
9         exit 1
10 }
11
12 outfile=/dev/stdout
13 while getopts "o:" option
14 do
15         case "$option" in
16         o)      outfile="$OPTARG";;
17         *)      usage;;
18         esac
19 done
20 shift $(($OPTIND - 1))
21 case $# in
22 1)      ;;
23 *)      usage;;
24 esac
25
26 ${NM:='nm'} "$1" | ${AWK:='awk'} '
27 / C .*sign$/ {
28         sign = substr($1, length($1) - 3, 4)
29         sub("^0*", "", sign)
30         if (sign != "")
31                 sign = "-"
32 }
33 / C .*w0$/ {
34         w0 = substr($1, length($1) - 3, 4)
35 }
36 / C .*w1$/ {
37         w1 = substr($1, length($1) - 3, 4)
38 }
39 / C .*w2$/ {
40         w2 = substr($1, length($1) - 3, 4)
41 }
42 / C .*w3$/ {
43         w3 = substr($1, length($1) - 3, 4)
44         w = w3 w2 w1 w0
45         sub("^0*", "", w)
46         if (w == "")
47                 w = "0"
48         sub("w3$", "", $3)
49         # This still has minor problems representing INT_MIN, etc.  E.g.,
50         # with 32-bit 2''s complement ints, this prints -0x80000000, which 
51         # has the wrong type (unsigned int).
52         printf("#define\t%s\t%s0x%s\n", $3, sign, w)
53 }
54 ' 3>"$outfile" >&3 3>&-