1#!/bin/sh 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright(c) 2019 Intel Corporation 4 5# Check whether library symbols have correct 6# version (provided ABI number or provided ABI 7# number + 1 or EXPERIMENTAL or INTERNAL). 8# Args: 9# $1: path of the library .so file 10# $2: ABI major version number to check 11# (defaults to ABI_VERSION file value) 12 13if [ -z "$1" ]; then 14 echo "Script checks whether library symbols have" 15 echo "correct version (ABI_VER/ABI_VER+1/EXPERIMENTAL/INTERNAL)" 16 echo "Usage:" 17 echo " $0 SO_FILE_PATH [ABI_VER]" 18 exit 1 19fi 20 21LIB="$1" 22DEFAULT_ABI=$(cat "$(dirname \ 23 $(readlink -f $0))/../ABI_VERSION" | \ 24 cut -d'.' -f 1) 25ABIVER="DPDK_${2-$DEFAULT_ABI}" 26NEXT_ABIVER="DPDK_$((${2-$DEFAULT_ABI}+1))" 27 28ret=0 29 30# get output of objdump 31OBJ_DUMP_OUTPUT=`objdump -TC --section=.text ${LIB} 2>&1 | grep ".text"` 32 33# there may not be any .text sections in the .so file, in which case exit early 34echo "${OBJ_DUMP_OUTPUT}" | grep "not found in any input file" -q 35if [ "$?" -eq 0 ]; then 36 exit 0 37fi 38 39# we have symbols, so let's see if the versions are correct 40for SYM in $(echo "${OBJ_DUMP_OUTPUT}" | awk '{print $(NF-1) "-" $NF}') 41do 42 version=$(echo $SYM | cut -d'-' -f 1) 43 symbol=$(echo $SYM | cut -d'-' -f 2) 44 case $version in (*"$ABIVER"*|*"$NEXT_ABIVER"*|"EXPERIMENTAL"|"INTERNAL") 45 ;; 46 (*) 47 echo "Warning: symbol $symbol ($version) should be annotated " \ 48 "as ABI version $ABIVER / $NEXT_ABIVER, EXPERIMENTAL, or INTERNAL." 49 ret=1 50 ;; 51 esac 52done 53 54exit $ret 55