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_.*!!' | ... | ... |