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