genassym.sh revision 259065
1153323Srodrigc#!/bin/sh 2153323Srodrigc# $FreeBSD: releng/10.0/sys/kern/genassym.sh 175449 2008-01-18 17:02:14Z julian $ 3153323Srodrigc 4153323Srodrigcusage() 5153323Srodrigc{ 6153323Srodrigc echo "usage: genassym [-o outfile] objfile" 7153323Srodrigc exit 1 8153323Srodrigc} 9153323Srodrigc 10153323Srodrigc 11153323Srodrigcwork() 12153323Srodrigc{ 13153323Srodrigc ${NM:='nm'} "$1" | ${AWK:='awk'} ' 14153323Srodrigc / C .*sign$/ { 15153323Srodrigc sign = substr($1, length($1) - 3, 4) 16153323Srodrigc sub("^0*", "", sign) 17153323Srodrigc if (sign != "") 18153323Srodrigc sign = "-" 19153323Srodrigc } 20153323Srodrigc / C .*w0$/ { 21153323Srodrigc w0 = substr($1, length($1) - 3, 4) 22153323Srodrigc } 23153323Srodrigc / C .*w1$/ { 24153323Srodrigc w1 = substr($1, length($1) - 3, 4) 25153323Srodrigc } 26153323Srodrigc / C .*w2$/ { 27153323Srodrigc w2 = substr($1, length($1) - 3, 4) 28153323Srodrigc } 29153323Srodrigc / C .*w3$/ { 30153323Srodrigc w3 = substr($1, length($1) - 3, 4) 31153323Srodrigc w = w3 w2 w1 w0 32153323Srodrigc sub("^0*", "", w) 33153323Srodrigc if (w == "") 34153323Srodrigc w = "0" 35153323Srodrigc sub("w3$", "", $3) 36153323Srodrigc # This still has minor problems representing INT_MIN, etc. 37153323Srodrigc # E.g., 38153323Srodrigc # with 32-bit 2''s complement ints, this prints -0x80000000, 39153323Srodrigc # which has the wrong type (unsigned int). 40153323Srodrigc printf("#define\t%s\t%s0x%s\n", $3, sign, w) 41153323Srodrigc } ' 42153323Srodrigc} 43153323Srodrigc 44153323Srodrigc 45153323Srodrigc# 46153323Srodrigc#MAIN PROGGRAM 47153323Srodrigc# 48153323Srodrigcuse_outfile="no" 49153323Srodrigcwhile getopts "o:" option 50153323Srodrigcdo 51153323Srodrigc case "$option" in 52153323Srodrigc o) outfile="$OPTARG" 53153323Srodrigc use_outfile="yes";; 54153323Srodrigc *) usage;; 55153323Srodrigc esac 56153323Srodrigcdone 57153323Srodrigcshift $(($OPTIND - 1)) 58153323Srodrigccase $# in 59153323Srodrigc1) ;; 60153323Srodrigc*) usage;; 61153323Srodrigcesac 62153323Srodrigc 63153323Srodrigcif [ "$use_outfile" = "yes" ] 64153323Srodrigcthen 65153323Srodrigc work $1 3>"$outfile" >&3 3>&- 66153323Srodrigcelse 67153323Srodrigc work $1 68153323Srodrigcfi 69153323Srodrigc 70153323Srodrigc