| #!/bin/sh |
| |
| # src/tools/find_static |
| |
| trap "rm -f /tmp/$$" 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 -c10-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 debug |