]>
Commit | Line | Data |
---|---|---|
2f67a0d5 PB |
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 | ;; | |
76d83bde TS |
38 | s390*) |
39 | ret='\tbr.*' | |
40 | ;; | |
2f67a0d5 PB |
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_.*!!' |