1275970Scy#!/bin/sh 2275970Scy# $FreeBSD: releng/10.2/sys/kern/genassym.sh 175449 2008-01-18 17:02:14Z julian $ 3275970Scy 4275970Scyusage() 5275970Scy{ 6275970Scy echo "usage: genassym [-o outfile] objfile" 7275970Scy exit 1 8275970Scy} 9275970Scy 10275970Scy 11275970Scywork() 12275970Scy{ 13275970Scy ${NM:='nm'} "$1" | ${AWK:='awk'} ' 14275970Scy / C .*sign$/ { 15275970Scy sign = substr($1, length($1) - 3, 4) 16275970Scy sub("^0*", "", sign) 17275970Scy if (sign != "") 18275970Scy sign = "-" 19275970Scy } 20275970Scy / C .*w0$/ { 21275970Scy w0 = substr($1, length($1) - 3, 4) 22275970Scy } 23275970Scy / C .*w1$/ { 24275970Scy w1 = substr($1, length($1) - 3, 4) 25275970Scy } 26275970Scy / C .*w2$/ { 27275970Scy w2 = substr($1, length($1) - 3, 4) 28275970Scy } 29275970Scy / C .*w3$/ { 30275970Scy w3 = substr($1, length($1) - 3, 4) 31275970Scy w = w3 w2 w1 w0 32275970Scy sub("^0*", "", w) 33275970Scy if (w == "") 34275970Scy w = "0" 35275970Scy sub("w3$", "", $3) 36275970Scy # This still has minor problems representing INT_MIN, etc. 37275970Scy # E.g., 38275970Scy # with 32-bit 2''s complement ints, this prints -0x80000000, 39275970Scy # which has the wrong type (unsigned int). 40275970Scy printf("#define\t%s\t%s0x%s\n", $3, sign, w) 41275970Scy } ' 42275970Scy} 43275970Scy 44275970Scy 45275970Scy# 46275970Scy#MAIN PROGGRAM 47275970Scy# 48275970Scyuse_outfile="no" 49275970Scywhile getopts "o:" option 50275970Scydo 51275970Scy case "$option" in 52275970Scy o) outfile="$OPTARG" 53275970Scy use_outfile="yes";; 54275970Scy *) usage;; 55275970Scy esac 56275970Scydone 57275970Scyshift $(($OPTIND - 1)) 58275970Scycase $# in 59275970Scy1) ;; 60275970Scy*) usage;; 61275970Scyesac 62275970Scy 63275970Scyif [ "$use_outfile" = "yes" ] 64275970Scythen 65275970Scy work $1 3>"$outfile" >&3 3>&- 66275970Scyelse 67275970Scy work $1 68275970Scyfi 69275970Scy 70275970Scy