111497Sphk: 211497Sphk# 311497Sphk# ---------------------------------------------------------------------------- 411497Sphk# "THE BEER-WARE LICENSE" (Revision 42): 593151Sphk# <phk@FreeBSD.org> wrote this file. As long as you retain this notice you 611497Sphk# can do whatever you want with this stuff. If we meet some day, and you think 711497Sphk# this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 811497Sphk# ---------------------------------------------------------------------------- 911497Sphk# 10108605Sphk# Sort options by "Matthew Emmerton" <matt@gsicomp.on.ca> 11108605Sphk# 1250477Speter# $FreeBSD$ 1311497Sphk# 14108605Sphk# This shell script will make a cross reference of the symbols of a kernel. 15108605Sphk# 1611497Sphk 17103392SphkCOMPILEDIR=/sys/`uname -m`/compile 1841594SarchieKERNELNAME=LINT 19108605SphkSORTORDER=-k1 2041594Sarchie 21108605Sphkargs=`getopt h?k:s: $*`; 22108605Sphkif [ $? != 0 ] 23108605Sphkthen 24108605Sphk args="-h"; 25103392Sphkfi 26108605Sphkset -- $args; 27108605Sphkfor i 28108605Sphkdo 29108605Sphk case "$i" 30108605Sphk in 31108605Sphk -h|-\?) 32108605Sphk echo "Usage: $0 [ -k <kernelname> ] [ -s [ 'symbol' | 'filename' ] ]"; 33108605Sphk exit 0; 34108605Sphk ;; 35108605Sphk -k) 36108605Sphk KERNELNAME=$2 37108605Sphk if [ -d ${COMPILEDIR}/${KERNELNAME} ]; 38108605Sphk then 39108605Sphk shift; shift; 40108605Sphk continue; 41108605Sphk fi 42108605Sphk echo "Kernel '$KERNELNAME' does not exist in ${COMPILEDIR}!"; 43108605Sphk exit 1; 44108605Sphk ;; 45108605Sphk -s) 46108605Sphk if [ "x$2" = "xsymbol" ] 47108605Sphk then 48108605Sphk SORTORDER=-k1 49108605Sphk shift; shift; 50108605Sphk continue; 51108605Sphk fi 52108605Sphk if [ "x$2" = "xfilename" ] 53108605Sphk then 54108605Sphk SORTORDER=-k2 55108605Sphk shift; shift; 56108605Sphk continue; 57108605Sphk fi 58108605Sphk echo "Invalid selection for -s: $2"; 59108605Sphk exit 1; 60108605Sphk ;; 61108605Sphk --) 62108605Sphk shift; 63108605Sphk break; 64108605Sphk ;; 65108605Sphk esac 66108605Sphkdone 67103392Sphk 6841594Sarchiecd ${COMPILEDIR}/${KERNELNAME} 6941594Sarchie 70141640SphkMOD_OBJS=`find modules -name \*.o` 71103392Sphk 72141640Sphkfor i in *.o $MOD_OBJS 73141640Sphkdo 74141640Sphk nm -gon $i 75141640Sphkdone | sed ' 76141640Sphk/aicasm.*:/d 77141640Sphk/genassym.*:/d 78141640Sphks/.*\/// 79141640Sphks/:/ / 80141640Sphk' | awk ' 8111497SphkNF > 1 { 8211497Sphk if ($2 == "t") 8311497Sphk next 8411497Sphk if ($2 == "F") 8511497Sphk next 8611497Sphk if ($2 == "U") { 8711497Sphk ref[$3]=ref[$3]" "$1 88141640Sphk nm[$3]++ 89141640Sphk } else if ($3 == "D" || $3 == "T" || $3 == "B" || $3 == "R" || $3 == "A") { 90141640Sphk if (def[$4] != "") 91141640Sphk def[$4]=def[$4]" "$1 9211497Sphk else 93141640Sphk def[$4]=$1 94141640Sphk nm[$4]++ 9511497Sphk } else if ($2 == "?") { 9611497Sphk if (def[$3] == "S") 9711497Sphk i++ 9811497Sphk else if (def[$3] != "") 9911497Sphk def[$3]=def[$3]",S" 10011497Sphk else 10111497Sphk def[$3]="S" 10211497Sphk ref[$3]=ref[$3]" "$1 103141640Sphk nm[$3]++ 10411497Sphk } else if ($2 == "C") { 10511497Sphk if (def[$3] == $2) 10611497Sphk i++ 10712814Sphk else if (def[$3] == "") 10812814Sphk def[$3]=$1 10911497Sphk else 11012814Sphk ref[$3]=ref[$3]" "$1 111141640Sphk nm[$3]++ 11211497Sphk } else { 11311497Sphk print ">>>",$0 11411497Sphk } 11511497Sphk } 11611497SphkEND { 11711497Sphk for (i in nm) { 11811497Sphk printf "%s {%s} %s\n",i,def[i],ref[i] 11911497Sphk } 12011497Sphk } 121108605Sphk' | sort $SORTORDER | awk ' 12211497Sphk { 12311497Sphk if ($2 == "{S}") 12411497Sphk $2 = "<Linker set>" 12511497Sphk if (length($3) == 0) { 126141640Sphk printf "%-31s %d %s\tUNREF\n",$1,0, $2 12712870Sphk N1++ 12811497Sphk } else if ($2 == "{}") { 129141640Sphk printf "%-31s %d {UNDEF}\n",$1, NF-2 13012870Sphk N2++ 13111497Sphk } else { 132141640Sphk printf "%-31s %d %s",$1,NF-2,$2 13312870Sphk p = 80; 13412870Sphk for (i = 3 ; i <= NF; i++) { 135141640Sphk if (p+length ($i)+1 > 48) { 136141640Sphk printf "\n\t\t\t\t\t%s", $i 13712870Sphk p = 7; 13812870Sphk } else { 13912870Sphk printf " %s", $i 14012870Sphk } 14112870Sphk p += 1 + length ($i) 14212870Sphk } 14312870Sphk printf "\n" 14412870Sphk N3++ 14512870Sphk if (NF-2 == 1) 14612870Sphk N4++ 14712870Sphk if (NF-2 == 2) 14812870Sphk N5++ 14911497Sphk } 15011497Sphk } 15112870SphkEND { 15212870Sphk printf "Total symbols: %5d\n",N1+N2+N3 15312875Sbde printf "unref symbols: %5d\n",N1 15412875Sbde printf "undef symbols: %5d\n",N2 15512870Sphk printf "1 ref symbols: %5d\n",N4 15612870Sphk printf "2 ref symbols: %5d\n",N5 15712870Sphk } 15811497Sphk' 159