48 lines
972 B
Bash
48 lines
972 B
Bash
|
#! /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'
|
||
|
;;
|
||
|
*)
|
||
|
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_.*!!'
|