Commit 2f67a0d55aea184ec31f81df87ba4aa07c378fdb
1 parent
21664424
Script to check for missing FORCE_RET.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2308 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
47 additions
and
0 deletions
check_ops.sh
0 → 100755
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 | + ;; | ||
38 | + *) | ||
39 | + echo "Unknown machine `uname -m`" | ||
40 | + ;; | ||
41 | +esac | ||
42 | +echo $1 | ||
43 | +# op_exit_tb causes false positives on some hosts. | ||
44 | +${CROSS}objdump -dr $1 | \ | ||
45 | + sed -e '/>:$\|'"$ret"'/!d' -e 's/.*<\(.*\)>:/~\1:/' -e 's/.*'"$ret"'.*/!/' | \ | ||
46 | + sed -e ':1;N;s/\n//;t1' | sed -e 's/~/\n/g' | grep -v '^op_exit_tb' | \ | ||
47 | + grep '^op_.*!!' |