]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/spdk/dpdk/devtools/check-abi-version.sh
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / dpdk / devtools / check-abi-version.sh
diff --git a/ceph/src/spdk/dpdk/devtools/check-abi-version.sh b/ceph/src/spdk/dpdk/devtools/check-abi-version.sh
new file mode 100755 (executable)
index 0000000..f0cca42
--- /dev/null
@@ -0,0 +1,54 @@
+#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Intel Corporation
+
+# Check whether library symbols have correct
+# version (provided ABI number or provided ABI
+# number + 1 or EXPERIMENTAL or INTERNAL).
+# Args:
+#   $1: path of the library .so file
+#   $2: ABI major version number to check
+#       (defaults to ABI_VERSION file value)
+
+if [ -z "$1" ]; then
+    echo "Script checks whether library symbols have"
+    echo "correct version (ABI_VER/ABI_VER+1/EXPERIMENTAL/INTERNAL)"
+    echo "Usage:"
+    echo "  $0 SO_FILE_PATH [ABI_VER]"
+    exit 1
+fi
+
+LIB="$1"
+DEFAULT_ABI=$(cat "$(dirname \
+            $(readlink -f $0))/../ABI_VERSION" | \
+            cut -d'.' -f 1)
+ABIVER="DPDK_${2-$DEFAULT_ABI}"
+NEXT_ABIVER="DPDK_$((${2-$DEFAULT_ABI}+1))"
+
+ret=0
+
+# get output of objdump
+OBJ_DUMP_OUTPUT=`objdump -TC --section=.text ${LIB} 2>&1 | grep ".text"`
+
+# there may not be any .text sections in the .so file, in which case exit early
+echo "${OBJ_DUMP_OUTPUT}" | grep "not found in any input file" -q
+if [ "$?" -eq 0 ]; then
+    exit 0
+fi
+
+# we have symbols, so let's see if the versions are correct
+for SYM in $(echo "${OBJ_DUMP_OUTPUT}" | awk '{print $(NF-1) "-" $NF}')
+do
+    version=$(echo $SYM | cut -d'-' -f 1)
+    symbol=$(echo $SYM | cut -d'-' -f 2)
+    case $version in (*"$ABIVER"*|*"$NEXT_ABIVER"*|"EXPERIMENTAL"|"INTERNAL")
+        ;;
+    (*)
+        echo "Warning: symbol $symbol ($version) should be annotated " \
+             "as ABI version $ABIVER / $NEXT_ABIVER, EXPERIMENTAL, or INTERNAL."
+        ret=1
+    ;;
+    esac
+done
+
+exit $ret