dpdk/devtools/check-abi-version.sh
<<
>>
Prefs
   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