Commit 2f67a0d55aea184ec31f81df87ba4aa07c378fdb

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