Viewing: find-provides.ksyms
#!/usr/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# This file is part of Lustre, http://www.lustre.org/
#
# rpm/find-provides.ksyms
#
# Find which kernel symbols a particular module provides
#
IFS=$'\n'
MODULE_SYMVERS=$RPM_BUILD_ROOT/Module.symvers
for module in $(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz)?$'); do
tmpfile=""
if [ "x${module%.ko}" = "x${module}" ]; then
tmpfile=$(mktemp -t ${0##*/}.XXXXXX.ko)
proc_bin=
case "${module##*.}" in
xz)
proc_bin=xz
;;
bz2)
proc_bin=bzip2
;;
gz)
proc_bin=gzip
;;
esac
[ -n "$proc_bin" ] || continue
"$proc_bin" -d -c - < "$module" > "$tmpfile" || continue
module="$tmpfile"
fi
if [[ -f $MODULE_SYMVERS ]] ; then
# all symbols prefixed with __rcr_ where the symbol is:
# A - symbol is an absolute value
# D,d - symbol is in the initialized data section
# R,r - symbol is in the read-only data section
# T,t - symbol is in the text (code) section
for sym in $(nm $module | sed -r -ne 's:^0*([0-9a-f]+) [ADdRr] __crc_(.+):\2:p'); do
grep -w $sym $MODULE_SYMVERS | awk '{printf("ksym(%s) = %08s\n", $2, $1)}'
done \
| LC_ALL=C sort -u
else
>&2 echo "Module.symvers required for provides."
fi
[ -z "$tmpfile" ] || rm -f -- "$tmpfile"
done