Index: redhat-rpm-config-9.1.0/find-requires =================================================================== --- redhat-rpm-config-9.1.0.orig/find-requires 2018-08-24 09:58:45.437193389 +0200 +++ redhat-rpm-config-9.1.0/find-requires 2018-08-24 09:59:31.902739176 +0200 @@ -143,7 +143,7 @@ unset is_kmod for f in $filelist; do - if [ $(echo "$f" | sed -r -ne 's:^.*/lib/modules/(.*)/(.*).ko$:\2:p') ] + if [ $(echo "$f" | sed -r -ne 's:^.*/lib/modules/(.*)/(.*)\.ko(\.gz|\.bz2|\.xz)?$:\2:p') ] then is_kmod=1; elif [ $(echo "$f" | sed -r -ne 's:^.*/boot/(.*):\1:p') ] Index: redhat-rpm-config-9.1.0/find-requires.ksyms =================================================================== --- redhat-rpm-config-9.1.0.orig/find-requires.ksyms 2018-08-24 09:55:19.122210171 +0200 +++ redhat-rpm-config-9.1.0/find-requires.ksyms 2018-08-24 10:01:02.895849695 +0200 @@ -9,24 +9,49 @@ # Extract all of the symbols provided by this module. all_provides() { - if [[ -n $(nm "$@" | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):0x\1 \2:p') ]]; then - nm "$@" \ - | sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):0x\1 \2:p' \ - | awk --non-decimal-data '{printf("%s:0x%08x\n", $2, $1)}' \ - | LC_ALL=C sort -k1,1 -u - else - ELFRODATA=$(readelf -R .rodata "$@" | awk '/0x/{printf $2$3$4$5}') - if [[ -n $(readelf -h "$@" | grep "little endian") ]]; then - RODATA=$(echo $ELFRODATA | sed 's/\(..\)\(..\)\(..\)\(..\)/\4\3\2\1/g') + for module in "$@"; 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" + module="$tmpfile" + fi + + 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("%s:0x%08x\n", $2, $1)}' else - RODATA=$ELFRODATA + 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("%s:0x%08s\n", $2, substr($3,($1*2)+1,8))}' fi - for sym in $(nm "$@" | sed -r -ne 's:^0*([0-9a-f]+) R __crc_(.+):0x\1 \2:p'); do - echo $sym $RODATA - done \ - | awk --non-decimal-data '{printf("%s:0x%08s\n", $2, substr($3,($1*2)+1,8))}' \ - | LC_ALL=C sort -k1,1 -u - fi + + [ -z "$tmpfile" ] || rm -f -- "$tmpfile" + done \ + | LC_ALL=C sort -k1,1 -u } # Extract all of the requirements of this module. @@ -100,7 +125,7 @@ fi } -modules=($(grep -E '/lib/modules/.+\.ko$')) +modules=($(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz)?$')) if [ ${#modules[@]} -gt 0 ]; then kernel=$(/sbin/modinfo -F vermagic "${modules[0]}" | sed -e 's: .*::' -e q) Index: redhat-rpm-config-9.1.0/find-provides =================================================================== --- redhat-rpm-config-9.1.0.orig/find-provides 2010-02-02 10:24:04.000000000 +0100 +++ redhat-rpm-config-9.1.0/find-provides 2018-08-24 10:02:26.666030820 +0200 @@ -92,7 +92,7 @@ is_kmod=1 for f in $filelist; do - if [ $(echo "$f" | sed -r -ne 's:^.*/lib/modules/(.*)/(.*).ko$:\2:p') ] + if [ $(echo "$f" | sed -r -ne 's:^.*/lib/modules/(.*)/(.*)\.ko(\.gz|\.bz2|\.xz)?$:\2:p') ] then is_kernel=1; fi Index: redhat-rpm-config-9.1.0/find-provides.ksyms =================================================================== --- redhat-rpm-config-9.1.0.orig/find-provides.ksyms 2018-08-24 09:55:19.065210728 +0200 +++ redhat-rpm-config-9.1.0/find-provides.ksyms 2018-08-24 10:03:17.727531681 +0200 @@ -2,7 +2,29 @@ IFS=$'\n' -for module in $(grep -E '/lib/modules/.+\.ko$'); do +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" + module="$tmpfile" + fi + 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' \ @@ -21,4 +43,6 @@ | awk --non-decimal-data '{printf("ksym(%s) = 0x%08s\n", $2, substr($3,($1*2)+1,8))}' \ | LC_ALL=C sort -u fi + + [ -z "$tmpfile" ] || rm -f -- "$tmpfile" done