14418919fSjohnjiang#!/bin/sh 24418919fSjohnjiang# SPDX-License-Identifier: BSD-3-Clause 34418919fSjohnjiang# Copyright(c) 2019 Intel Corporation 44418919fSjohnjiang 54418919fSjohnjiang# Check whether library symbols have correct 64418919fSjohnjiang# version (provided ABI number or provided ABI 7*2d9fd380Sjfb8856606# number + 1 or EXPERIMENTAL or INTERNAL). 84418919fSjohnjiang# Args: 94418919fSjohnjiang# $1: path of the library .so file 104418919fSjohnjiang# $2: ABI major version number to check 114418919fSjohnjiang# (defaults to ABI_VERSION file value) 124418919fSjohnjiang 134418919fSjohnjiangif [ -z "$1" ]; then 144418919fSjohnjiang echo "Script checks whether library symbols have" 15*2d9fd380Sjfb8856606 echo "correct version (ABI_VER/ABI_VER+1/EXPERIMENTAL/INTERNAL)" 164418919fSjohnjiang echo "Usage:" 174418919fSjohnjiang echo " $0 SO_FILE_PATH [ABI_VER]" 184418919fSjohnjiang exit 1 194418919fSjohnjiangfi 204418919fSjohnjiang 214418919fSjohnjiangLIB="$1" 224418919fSjohnjiangDEFAULT_ABI=$(cat "$(dirname \ 234418919fSjohnjiang $(readlink -f $0))/../ABI_VERSION" | \ 244418919fSjohnjiang cut -d'.' -f 1) 254418919fSjohnjiangABIVER="DPDK_${2-$DEFAULT_ABI}" 264418919fSjohnjiangNEXT_ABIVER="DPDK_$((${2-$DEFAULT_ABI}+1))" 274418919fSjohnjiang 284418919fSjohnjiangret=0 294418919fSjohnjiang 304418919fSjohnjiang# get output of objdump 314418919fSjohnjiangOBJ_DUMP_OUTPUT=`objdump -TC --section=.text ${LIB} 2>&1 | grep ".text"` 324418919fSjohnjiang 334418919fSjohnjiang# there may not be any .text sections in the .so file, in which case exit early 344418919fSjohnjiangecho "${OBJ_DUMP_OUTPUT}" | grep "not found in any input file" -q 354418919fSjohnjiangif [ "$?" -eq 0 ]; then 364418919fSjohnjiang exit 0 374418919fSjohnjiangfi 384418919fSjohnjiang 394418919fSjohnjiang# we have symbols, so let's see if the versions are correct 404418919fSjohnjiangfor SYM in $(echo "${OBJ_DUMP_OUTPUT}" | awk '{print $(NF-1) "-" $NF}') 414418919fSjohnjiangdo 424418919fSjohnjiang version=$(echo $SYM | cut -d'-' -f 1) 434418919fSjohnjiang symbol=$(echo $SYM | cut -d'-' -f 2) 44*2d9fd380Sjfb8856606 case $version in (*"$ABIVER"*|*"$NEXT_ABIVER"*|"EXPERIMENTAL"|"INTERNAL") 454418919fSjohnjiang ;; 464418919fSjohnjiang (*) 474418919fSjohnjiang echo "Warning: symbol $symbol ($version) should be annotated " \ 48*2d9fd380Sjfb8856606 "as ABI version $ABIVER / $NEXT_ABIVER, EXPERIMENTAL, or INTERNAL." 494418919fSjohnjiang ret=1 504418919fSjohnjiang ;; 514418919fSjohnjiang esac 524418919fSjohnjiangdone 534418919fSjohnjiang 544418919fSjohnjiangexit $ret 55