xref: /dpdk/devtools/check-symbol-maps.sh (revision 272f94e5)
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')
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
63exit $ret
64