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