redhat-rpm-config/find-provides.ksyms
Petr Oros 4e17da5386 Fix kernel ABI related scripts
find-provides.ksyms and find-requires.ksyms contain macros for
  generate external kernel module symbol dependency table.
  These scripts are broken in fedora for long time.
  Patch fix both and make it useable again.

  -Petr

Signed-off-by: Petr Oros <poros@redhat.com>
2018-06-04 08:44:43 +02:00

25 lines
926 B
Bash
Executable File

#! /bin/bash
IFS=$'\n'
for module in $(grep -E '/lib/modules/.+\.ko$'); do
if [[ -n $(nm $module | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):0x\1 \2:p') ]]; then
nm $module \
| sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):0x\1 \2:p' \
| awk --non-decimal-data '{printf("ksym(%s) = 0x%08x\n", $2, $1)}' \
| LC_ALL=C sort -u
else
ELFRODATA=$(readelf -R .rodata $module | awk '/0x/{printf $2$3$4$5}')
if [[ -n $(readelf -h $module | grep "little endian") ]]; then
RODATA=$(echo $ELFRODATA | sed 's/\(..\)\(..\)\(..\)\(..\)/\4\3\2\1/g')
else
RODATA=$ELFRODATA
fi
for sym in $(nm $module | sed -r -ne 's:^0*([0-9a-f]+) R __crc_(.+):0x\1 \2:p'); do
echo $sym $RODATA
done \
| awk --non-decimal-data '{printf("ksym(%s) = 0x%08s\n", $2, substr($3,($1*2)+1,8))}' \
| LC_ALL=C sort -u
fi
done