1#!/usr/bin/env bash 2set -u 3set -e 4 5function first() 6{ 7 echo $1 8} 9 10function next() 11{ 12 shift 13 echo $* 14} 15 16pushd ../../src/Infrastructure/src/Emulator/Cores/ > /dev/null 17 18WEAKS=weaks.tmp 19IMPLEMENTATIONS=implementations.tmp 20CALLBACKS_BIN=callbacks.tmp 21PATHS_TO_BIN="renode/renode_callbacks.c renode/renode_memory.c" 22 23ARCHS="arm ppc sparc" 24PATHS_WEAK="tlib/callbacks.c tlib/arch/arm/arch_callbacks.c tlib/arch/ppc/arch_callbacks.c tlib/arch/sparc/arch_callbacks.c" 25PATHS_IMPLEMENTATION="$CALLBACKS_BIN renode/arch/arm/renode_arm_callbacks.c renode/arch/ppc/renode_ppc_callbacks.c renode/arch/sparc/renode_sparc_callbacks.c" 26 27RESULT=0 28 29for PATH_TO_BIN in $PATHS_TO_BIN 30do 31 cat $PATH_TO_BIN >> $CALLBACKS_BIN 32done 33 34for PATH_WEAK in $PATHS_WEAK 35do 36 PATH_IMPLEMENTATION=`first $PATHS_IMPLEMENTATION` 37 PATHS_IMPLEMENTATION=`next $PATHS_IMPLEMENTATION` 38 # We search for tlib_... instead of tlib... because the latter would match 39 # the word "tlib" itself (as in "../tlib/unwind.h") which makes BSD/macOS grep 40 # report that all lines match. 41 ${CC:-gcc} -I tlib/include -E $PATH_WEAK | grep weak | grep -o tlib_[_A-Za-z]* | sort | uniq > $WEAKS 42 # Sort in reverse order to avoid a bug with partial matches in FreeBSD grep <2.6.0 43 cat $PATH_IMPLEMENTATION | grep -o tlib_[_A-Za-z]* | sort -r | uniq > $IMPLEMENTATIONS 44 if grep -vwF -f $IMPLEMENTATIONS $WEAKS 45 then 46 echo $PATH_WEAK 47 echo "-----------------------" 48 RESULT=1 49 fi 50done 51 52rm $WEAKS 53rm $IMPLEMENTATIONS 54rm $CALLBACKS_BIN 55 56popd > /dev/null 57 58exit $RESULT 59