xemu/check_ops.sh

51 lines
1005 B
Bash
Raw Normal View History

#! /bin/sh
# Script to check for duplicate function prologues in op.o
# Typically this indicates missing FORCE_RET();
# This script does not detect other errors that may be present.
# Usage: check_ops.sh [-m machine] [op.o]
# machine and op.o are guessed if not specified.
if [ "x$1" = "x-m" ]; then
machine=$2
shift 2
else
machine=`uname -m`
fi
if [ -z "$1" ]; then
for f in `find . -name op.o`; do
/bin/sh "$0" -m $machine $f
done
exit 0
fi
case $machine in
i?86)
ret='\tret'
;;
x86_64)
ret='\tretq'
;;
arm)
ret='\tldm.*pc'
;;
ppc* | powerpc*)
ret='\tblr'
;;
mips*)
ret='\tjr.*ra'
;;
s390*)
ret='\tbr.*'
;;
*)
echo "Unknown machine `uname -m`"
;;
esac
echo $1
# op_exit_tb causes false positives on some hosts.
${CROSS}objdump -dr $1 | \
sed -e '/>:$\|'"$ret"'/!d' -e 's/.*<\(.*\)>:/~\1:/' -e 's/.*'"$ret"'.*/!/' | \
sed -e ':1;N;s/\n//;t1' | sed -e 's/~/\n/g' | grep -v '^op_exit_tb' | \
grep '^op_.*!!'