1d30ea906Sjfb8856606#! /bin/sh -e
2d30ea906Sjfb8856606# SPDX-License-Identifier: BSD-3-Clause
3d30ea906Sjfb8856606# Copyright 2018 Mellanox Technologies, Ltd
4d30ea906Sjfb8856606
5d30ea906Sjfb8856606cd $(dirname $0)/..
6d30ea906Sjfb8856606
7d30ea906Sjfb8856606# speed up by ignoring Unicode details
8d30ea906Sjfb8856606export LC_ALL=C
9d30ea906Sjfb8856606
10*2d9fd380Sjfb8856606ret=0
11*2d9fd380Sjfb8856606
12d30ea906Sjfb8856606find_orphan_symbols ()
13d30ea906Sjfb8856606{
14d30ea906Sjfb8856606    for map in $(find lib drivers -name '*.map') ; do
15d30ea906Sjfb8856606        for sym in $(sed -rn 's,^([^}]*_.*);,\1,p' $map) ; do
16d30ea906Sjfb8856606            if echo $sym | grep -q '^per_lcore_' ; then
17*2d9fd380Sjfb8856606                symsrc=${sym#per_lcore_}
18*2d9fd380Sjfb8856606            elif echo $sym | grep -q '^__rte_.*_trace_' ; then
19*2d9fd380Sjfb8856606                symsrc=${sym#__}
20*2d9fd380Sjfb8856606            else
21*2d9fd380Sjfb8856606                symsrc=$sym
22d30ea906Sjfb8856606            fi
23d30ea906Sjfb8856606            if ! grep -q -r --exclude=$(basename $map) \
24*2d9fd380Sjfb8856606                    -w $symsrc $(dirname $map) ; then
25d30ea906Sjfb8856606                echo "$map: $sym"
26d30ea906Sjfb8856606            fi
27d30ea906Sjfb8856606        done
28d30ea906Sjfb8856606    done
29d30ea906Sjfb8856606}
30d30ea906Sjfb8856606
31d30ea906Sjfb8856606orphan_symbols=$(find_orphan_symbols)
32d30ea906Sjfb8856606if [ -n "$orphan_symbols" ] ; then
33d30ea906Sjfb8856606    echo "Found only in symbol map file:"
34d30ea906Sjfb8856606    echo "$orphan_symbols" | sed 's,^,\t,'
35*2d9fd380Sjfb8856606    ret=1
36d30ea906Sjfb8856606fi
37*2d9fd380Sjfb8856606
38*2d9fd380Sjfb8856606find_orphan_windows_symbols ()
39*2d9fd380Sjfb8856606{
40*2d9fd380Sjfb8856606    for def in $(find lib drivers -name '*_exports.def') ; do
41*2d9fd380Sjfb8856606        map=$(dirname $def)/version.map
42*2d9fd380Sjfb8856606        for sym in $(grep -v ^EXPORTS $def); do
43*2d9fd380Sjfb8856606            grep -q $sym $map || echo $sym
44*2d9fd380Sjfb8856606        done
45*2d9fd380Sjfb8856606    done
46*2d9fd380Sjfb8856606}
47*2d9fd380Sjfb8856606
48*2d9fd380Sjfb8856606orphan_windows_symbols=$(find_orphan_windows_symbols)
49*2d9fd380Sjfb8856606if [ -n "$orphan_windows_symbols" ] ; then
50*2d9fd380Sjfb8856606    echo "Found only in Windows export file:"
51*2d9fd380Sjfb8856606    echo "$orphan_windows_symbols" | sed 's,^,\t,'
52*2d9fd380Sjfb8856606    ret=1
53*2d9fd380Sjfb8856606fi
54*2d9fd380Sjfb8856606
55*2d9fd380Sjfb8856606exit $ret
56