1#! /bin/sh -e 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright 2018 Mellanox Technologies, Ltd 4 5cd $(dirname $0)/.. 6 7# speed up by ignoring Unicode details 8export LC_ALL=C 9 10if [ $# = 0 ] ; then 11 set -- $(find lib drivers -name '*.map' -a ! -path drivers/version.map) 12fi 13 14ret=0 15 16find_orphan_symbols () 17{ 18 for map in $@ ; do 19 for sym in $(sed -rn 's,^([^}]*_.*);.*$,\1,p' $map) ; do 20 if echo $sym | grep -q '^per_lcore_' ; then 21 symsrc=${sym#per_lcore_} 22 elif echo $sym | grep -q '^__rte_.*_trace_' ; then 23 symsrc=${sym#__} 24 else 25 symsrc=$sym 26 fi 27 if [ -z "$(grep -rlw $symsrc $(dirname $map) | grep -v $map)" ] ; then 28 echo "$map: $sym" 29 fi 30 done 31 done 32} 33 34orphan_symbols=$(find_orphan_symbols $@) 35if [ -n "$orphan_symbols" ] ; then 36 echo "Found only in symbol map file:" 37 echo "$orphan_symbols" | sed 's,^,\t,' 38 ret=1 39fi 40 41find_duplicate_symbols () 42{ 43 for map in $@ ; do 44 buildtools/map-list-symbol.sh $map | \ 45 sort | uniq -c | grep -v " 1 $map" || true 46 done 47} 48 49duplicate_symbols=$(find_duplicate_symbols $@) 50if [ -n "$duplicate_symbols" ] ; then 51 echo "Found duplicates in symbol map file:" 52 echo "$duplicate_symbols" 53 ret=1 54fi 55 56local_miss_maps=$(grep -L 'local: \*;' $@ || true) 57if [ -n "$local_miss_maps" ] ; then 58 echo "Found maps without local catch-all:" 59 echo "$local_miss_maps" 60 ret=1 61fi 62 63find_empty_maps () 64{ 65 for map in $@ ; do 66 [ $(buildtools/map-list-symbol.sh $map | wc -l) != '0' ] || echo $map 67 done 68} 69 70empty_maps=$(find_empty_maps $@) 71if [ -n "$empty_maps" ] ; then 72 echo "Found empty maps:" 73 echo "$empty_maps" 74 ret=1 75fi 76 77find_bad_format_maps () 78{ 79 abi_version=$(cut -d'.' -f 1 ABI_VERSION) 80 next_abi_version=$((abi_version + 1)) 81 for map in $@ ; do 82 cat $map | awk ' 83 /^(DPDK_('$abi_version'|'$next_abi_version')|EXPERIMENTAL|INTERNAL) \{$/ { next; } # start of a section 84 /^}( DPDK_'$abi_version')?;$/ { next; } # end of a section 85 /^$/ { next; } # empty line 86 /^\t(global:|local: \*;)$/ { next; } # qualifiers 87 /^\t[a-zA-Z_0-9]*;( # WINDOWS_NO_EXPORT)?$/ { next; } # symbols 88 /^\t# added in [0-9]*\.[0-9]*$/ { next; } # version comments 89 { print $0; }' || echo $map 90 done 91} 92 93bad_format_maps=$(find_bad_format_maps $@) 94if [ -n "$bad_format_maps" ] ; then 95 echo "Found badly formatted maps:" 96 echo "$bad_format_maps" 97 ret=1 98fi 99 100find_non_versioned_maps () 101{ 102 for map in $@ ; do 103 [ $(buildtools/map-list-symbol.sh -S EXPERIMENTAL -V unset $map | wc -l) = '0' ] || 104 echo $map 105 done 106} 107 108non_versioned_maps=$(find_non_versioned_maps $@) 109if [ -n "$non_versioned_maps" ] ; then 110 echo "Found non versioned maps:" 111 echo "$non_versioned_maps" 112 ret=1 113fi 114 115exit $ret 116