X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=devtools%2Fcheck-symbol-maps.sh;h=32e1fa5c8f658e01e1789bc1f587241a2c3c6a1f;hb=7767b849ab028db51474dcbd2a51bff3b5f4f81d;hp=c3cbcaf7208bc53ccf8d40b71ad29e5432c6a592;hpb=e253c33dee10eef8124097222c0c79d02bc5e86f;p=dpdk.git diff --git a/devtools/check-symbol-maps.sh b/devtools/check-symbol-maps.sh index c3cbcaf720..32e1fa5c8f 100755 --- a/devtools/check-symbol-maps.sh +++ b/devtools/check-symbol-maps.sh @@ -7,12 +7,16 @@ cd $(dirname $0)/.. # speed up by ignoring Unicode details export LC_ALL=C +if [ $# = 0 ] ; then + set -- $(find lib drivers -name '*.map') +fi + ret=0 find_orphan_symbols () { - for map in $(find lib drivers -name '*.map') ; do - for sym in $(sed -rn 's,^([^}]*_.*);,\1,p' $map) ; do + for map in $@ ; do + for sym in $(sed -rn 's,^([^}]*_.*);.*$,\1,p' $map) ; do if echo $sym | grep -q '^per_lcore_' ; then symsrc=${sym#per_lcore_} elif echo $sym | grep -q '^__rte_.*_trace_' ; then @@ -20,38 +24,39 @@ find_orphan_symbols () else symsrc=$sym fi - if ! grep -q -r --exclude=$(basename $map) \ - -w $symsrc $(dirname $map) ; then + if [ -z "$(grep -rlw $symsrc $(dirname $map) | grep -v $map)" ] ; then echo "$map: $sym" fi done done } -orphan_symbols=$(find_orphan_symbols) +orphan_symbols=$(find_orphan_symbols $@) if [ -n "$orphan_symbols" ] ; then echo "Found only in symbol map file:" echo "$orphan_symbols" | sed 's,^,\t,' ret=1 fi -find_orphan_windows_symbols () +find_duplicate_symbols () { - for def in $(find lib drivers -name '*_exports.def') ; do - if echo $def | grep -q 'common_mlx5' ; then - continue # mlx5 exports different symbols per OS - fi - map=$(dirname $def)/version.map - for sym in $(grep -v ^EXPORTS $def); do - grep -q $sym $map || echo $sym - done + for map in $@ ; do + buildtools/map-list-symbol.sh $map | \ + sort | uniq -c | grep -v " 1 $map" || true done } -orphan_windows_symbols=$(find_orphan_windows_symbols) -if [ -n "$orphan_windows_symbols" ] ; then - echo "Found only in Windows export file:" - echo "$orphan_windows_symbols" | sed 's,^,\t,' +duplicate_symbols=$(find_duplicate_symbols $@) +if [ -n "$duplicate_symbols" ] ; then + echo "Found duplicates in symbol map file:" + echo "$duplicate_symbols" + ret=1 +fi + +local_miss_maps=$(grep -L 'local: \*;' $@ || true) +if [ -n "$local_miss_maps" ] ; then + echo "Found maps without local catch-all:" + echo "$local_miss_maps" ret=1 fi