xref: /dpdk/buildtools/check-symbols.sh (revision cf8a9e93acfc1d219e039709b55fd04096125094)
14c824734SHaiyue Wang#!/bin/sh
24c824734SHaiyue Wang
34c824734SHaiyue Wang# SPDX-License-Identifier: BSD-3-Clause
44c824734SHaiyue Wang
54c824734SHaiyue WangMAPFILE=$1
64c824734SHaiyue WangOBJFILE=$2
74c824734SHaiyue Wang
8*cf8a9e93SDavid MarchandROOTDIR=$(readlink -f $(dirname $(readlink -f $0))/..)
9*cf8a9e93SDavid MarchandLIST_SYMBOL=$ROOTDIR/buildtools/map-list-symbol.sh
10*cf8a9e93SDavid MarchandCHECK_SYMBOL_MAPS=$ROOTDIR/devtools/check-symbol-maps.sh
114c824734SHaiyue Wang
124c824734SHaiyue Wang# added check for "make -C test/" usage
134c824734SHaiyue Wangif [ ! -e $MAPFILE ] || [ ! -f $OBJFILE ]
144c824734SHaiyue Wangthen
154c824734SHaiyue Wang	exit 0
164c824734SHaiyue Wangfi
174c824734SHaiyue Wang
184c824734SHaiyue Wangif [ -d $MAPFILE ]
194c824734SHaiyue Wangthen
204c824734SHaiyue Wang	exit 0
214c824734SHaiyue Wangfi
224c824734SHaiyue Wang
23e1ab26dfSThomas MonjalonDUMPFILE=$(mktemp -t dpdk.${0##*/}.objdump.XXXXXX)
244c824734SHaiyue Wangtrap 'rm -f "$DUMPFILE"' EXIT
254c824734SHaiyue Wangobjdump -t $OBJFILE >$DUMPFILE
264c824734SHaiyue Wang
274c824734SHaiyue Wangret=0
28*cf8a9e93SDavid Marchand
29*cf8a9e93SDavid Marchandif ! $CHECK_SYMBOL_MAPS $MAPFILE; then
30*cf8a9e93SDavid Marchand	ret=1
31*cf8a9e93SDavid Marchandfi
32*cf8a9e93SDavid Marchand
334c824734SHaiyue Wangfor SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
344c824734SHaiyue Wangdo
354c824734SHaiyue Wang	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
3605a38d7cSFerruh Yigit		! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE &&
3705a38d7cSFerruh Yigit		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
384c824734SHaiyue Wang	then
394c824734SHaiyue Wang		cat >&2 <<- END_OF_MESSAGE
404c824734SHaiyue Wang		$SYM is not flagged as experimental
414c824734SHaiyue Wang		but is listed in version map
424c824734SHaiyue Wang		Please add __rte_experimental to the definition of $SYM
434c824734SHaiyue Wang		END_OF_MESSAGE
444c824734SHaiyue Wang		ret=1
454c824734SHaiyue Wang	fi
464c824734SHaiyue Wangdone
474c824734SHaiyue Wang
484c824734SHaiyue Wang# Filter out symbols suffixed with a . for icc
494c824734SHaiyue Wangfor SYM in `awk '{
504c824734SHaiyue Wang	if ($2 != "l" && $4 == ".text.experimental" && !($NF ~ /\.$/)) {
514c824734SHaiyue Wang		print $NF
524c824734SHaiyue Wang	}
534c824734SHaiyue Wang}' $DUMPFILE`
544c824734SHaiyue Wangdo
554c824734SHaiyue Wang	$LIST_SYMBOL -S EXPERIMENTAL -s $SYM -q $MAPFILE || {
564c824734SHaiyue Wang		cat >&2 <<- END_OF_MESSAGE
574c824734SHaiyue Wang		$SYM is flagged as experimental
584c824734SHaiyue Wang		but is not listed in version map
594c824734SHaiyue Wang		Please add $SYM to the version map
604c824734SHaiyue Wang		END_OF_MESSAGE
614c824734SHaiyue Wang		ret=1
624c824734SHaiyue Wang	}
634c824734SHaiyue Wangdone
644c824734SHaiyue Wang
654c824734SHaiyue Wangfor SYM in `$LIST_SYMBOL -S INTERNAL $MAPFILE |cut -d ' ' -f 3`
664c824734SHaiyue Wangdo
674c824734SHaiyue Wang	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
684c824734SHaiyue Wang		! grep -q "\.text\.internal.*[[:space:]]$SYM$" $DUMPFILE
694c824734SHaiyue Wang	then
704c824734SHaiyue Wang		cat >&2 <<- END_OF_MESSAGE
714c824734SHaiyue Wang		$SYM is not flagged as internal
724c824734SHaiyue Wang		but is listed in version map
734c824734SHaiyue Wang		Please add __rte_internal to the definition of $SYM
744c824734SHaiyue Wang		END_OF_MESSAGE
754c824734SHaiyue Wang		ret=1
764c824734SHaiyue Wang	fi
774c824734SHaiyue Wangdone
784c824734SHaiyue Wang
794c824734SHaiyue Wang# Filter out symbols suffixed with a . for icc
804c824734SHaiyue Wangfor SYM in `awk '{
814c824734SHaiyue Wang	if ($2 != "l" && $4 == ".text.internal" && !($NF ~ /\.$/)) {
824c824734SHaiyue Wang		print $NF
834c824734SHaiyue Wang	}
844c824734SHaiyue Wang}' $DUMPFILE`
854c824734SHaiyue Wangdo
864c824734SHaiyue Wang	$LIST_SYMBOL -S INTERNAL -s $SYM -q $MAPFILE || {
874c824734SHaiyue Wang		cat >&2 <<- END_OF_MESSAGE
884c824734SHaiyue Wang		$SYM is flagged as internal
894c824734SHaiyue Wang		but is not listed in version map
904c824734SHaiyue Wang		Please add $SYM to the version map
914c824734SHaiyue Wang		END_OF_MESSAGE
924c824734SHaiyue Wang		ret=1
934c824734SHaiyue Wang	}
944c824734SHaiyue Wangdone
954c824734SHaiyue Wang
964c824734SHaiyue Wangexit $ret
97