1#!/bin/sh 2 3filter() { 4 # sed removes " address: " prefixes which mess up diff 5 sed $'s/^\\(\t*\\)[ ]*[0-9a-f][0-9a-f]*:[ \t]*/\\1/' \ 6 | sed 's/__GI_//g' 7} 8 9test -d "$1" || exit 1 10test -d "$2" || exit 1 11 12{ 13 ( 14 cd "$1" || exit 1 15 find -name '*.o' -o -name '*.os' # -o -name '*.so' 16 ) 17 ( 18 cd "$2" || exit 1 19 find -name '*.o' -o -name '*.os' # -o -name '*.so' 20 ) 21} | sed 's:^\./::' | sort | uniq | \ 22tee LST | \ 23( 24IFS='' 25while read -r oname; do 26 if ! test -f "$1/$oname"; then 27 echo "Only $2/$oname" 28 continue 29 fi 30 if ! test -f "$2/$oname"; then 31 echo "Only $1/$oname" 32 continue 33 fi 34 diff -q -- "$1/$oname" "$2/$oname" >/dev/null && continue 35 (cd "$1"; objdump -dr "$oname" | filter >"$oname.disasm") 36 (cd "$2"; objdump -dr "$oname" | filter >"$oname.disasm") 37 diff -u "$1/$oname.disasm" "$2/$oname.disasm" 38done 39) 40