#!/bin/sh # src/tools/find_static trap "ret=$?; rm -rf /tmp/$$; exit $ret" 0 1 2 3 15 # This script finds functions that are either never called, or # should be static. # Some functions, like library functions and debug_print functions, # should remain unchanged. # Run on a compiled source tree, from the top of the source tree # My nm utility has 9 characters of address which I strip, then a 'type' # character, with T as a text function, and U as an undefined function # symbol, then the function name. find . -name '[a-z]*.o' -type f -print | while read FILE do nm $FILE | cut -c17-100 |awk '{printf "%s\t%s\t%s\n", "'"$FILE"'",$1,$2}' done >/tmp/$$ dropdb debug createdb debug echo " create table debug (file text, scope char, func text); copy debug from '/tmp/"$$"'; select * into table debug2 from debug; create index idebug on debug(scope,func); create index idebug2 on debug2(func,scope); vacuum debug; vacuum debug2; update debug2 set scope = '_' from debug where debug2.func = debug.func and debug2.scope = 'T' and debug.scope = 'U'; delete from debug2 where scope = '_'; select * from debug2 where scope = 'T' and func != 'main' order by file, func; " |psql -X debug