pbrook | 2f67a0d | 2007-01-07 19:38:08 +0000 | [diff] [blame] | 1 | #! /bin/sh |
| 2 | # Script to check for duplicate function prologues in op.o |
| 3 | # Typically this indicates missing FORCE_RET(); |
| 4 | # This script does not detect other errors that may be present. |
| 5 | |
| 6 | # Usage: check_ops.sh [-m machine] [op.o] |
| 7 | # machine and op.o are guessed if not specified. |
| 8 | |
| 9 | if [ "x$1" = "x-m" ]; then |
| 10 | machine=$2 |
| 11 | shift 2 |
| 12 | else |
| 13 | machine=`uname -m` |
| 14 | fi |
| 15 | if [ -z "$1" ]; then |
| 16 | for f in `find . -name op.o`; do |
| 17 | /bin/sh "$0" -m $machine $f |
| 18 | done |
| 19 | exit 0 |
| 20 | fi |
| 21 | |
| 22 | case $machine in |
| 23 | i?86) |
| 24 | ret='\tret' |
| 25 | ;; |
| 26 | x86_64) |
| 27 | ret='\tretq' |
| 28 | ;; |
| 29 | arm) |
| 30 | ret='\tldm.*pc' |
| 31 | ;; |
| 32 | ppc* | powerpc*) |
| 33 | ret='\tblr' |
| 34 | ;; |
| 35 | mips*) |
| 36 | ret='\tjr.*ra' |
| 37 | ;; |
ths | 76d83bd | 2007-11-18 21:22:10 +0000 | [diff] [blame] | 38 | s390*) |
| 39 | ret='\tbr.*' |
| 40 | ;; |
pbrook | 2f67a0d | 2007-01-07 19:38:08 +0000 | [diff] [blame] | 41 | *) |
| 42 | echo "Unknown machine `uname -m`" |
| 43 | ;; |
| 44 | esac |
| 45 | echo $1 |
| 46 | # op_exit_tb causes false positives on some hosts. |
| 47 | ${CROSS}objdump -dr $1 | \ |
| 48 | sed -e '/>:$\|'"$ret"'/!d' -e 's/.*<\(.*\)>:/~\1:/' -e 's/.*'"$ret"'.*/!/' | \ |
| 49 | sed -e ':1;N;s/\n//;t1' | sed -e 's/~/\n/g' | grep -v '^op_exit_tb' | \ |
| 50 | grep '^op_.*!!' |