find-provides.ksyms, find-requires.ksyms: work around printed __crc_* type change

Commit binutils-2_33~1385[1] has changed (and binutils-2_35~1768[2]
has not reverted) the calculated type for symbols in read-write .rodata section
from 'R' to 'D' on architectures where CONFIG_MODULE_REL_CRCS is enabled
(namely, ppc64* and s390*), since, apparently, many kernel modules have it indeed
read-write.  Work around it by matching both D and R as possible __crc_* symbol
type.

[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=a288c270991d
[2] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=49d9fd42acef

* find-provides.ksyms: Match D as possible __crc_* symbol type in
addition to R.
* find-requires.ksyms: Likewise.
* kernel-srpm-macros.spec (Release): Bump to 11%{?dist}.
(%changelog): Mention the change.

Resolves: #2055464
Signed-off-by: Eugene Syromiatnikov <esyr@redhat.com>
This commit is contained in:
Eugene Syromiatnikov 2022-02-17 04:41:45 +01:00
parent 12ad0a269c
commit 24312e21be
3 changed files with 22 additions and 3 deletions

View File

@ -45,7 +45,14 @@ for module in $(grep -E '/lib/modules/.+\.ko(\.gz|\.bz2|\.xz|\.zst)?$') "$@"; do
else
RODATA=$ELFRODATA
fi
for sym in $(nm $module | sed -r -ne 's:^0*([0-9a-f]+) R __crc_(.+):0x\1 \2:p'); do
# Commit binutils-2_33~1385[1] has changed (and binutils-2_35~1768[2]
# has not reverted it) the calculated type for symbols in read-write
# .rodata section from 'R' to 'D', since, apparently, many kernel
# modules have it indeed read-write.
#
# [1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=a288c270991d
# [2] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=49d9fd42acef
for sym in $(nm $module | sed -r -ne 's:^0*([0-9a-f]+) [DR] __crc_(.+):0x\1 \2:p'); do
echo $sym $RODATA
done \
| awk --non-decimal-data '{printf("'"${dep_pfx}"'(%s) = 0x%08s\n", $2, substr($3,($1*2)+1,8))}' \

View File

@ -46,7 +46,14 @@ all_provides() {
else
RODATA=$ELFRODATA
fi
for sym in $(nm "$module" | sed -r -ne 's:^0*([0-9a-f]+) R __crc_(.+):0x\1 \2:p'); do
# Commit binutils-2_33~1385[1] has changed (and binutils-2_35~1768[2]
# has not reverted it) the calculated type for symbols in read-write
# .rodata section from 'R' to 'D', since, apparently, many kernel
# modules have it indeed read-write.
#
# [1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=a288c270991d
# [2] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=49d9fd42acef
for sym in $(nm "$module" | sed -r -ne 's:^0*([0-9a-f]+) [DR] __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))}'

View File

@ -1,6 +1,6 @@
Name: kernel-srpm-macros
Version: 1.0
Release: 10%{?dist}
Release: 11%{?dist}
Summary: RPM macros that list arches the full kernel is built on
# This package only exist in Fedora repositories
# The license is the standard (MIT) specified in
@ -121,6 +121,11 @@ install -p -m 644 -t "%{buildroot}%{_fileattrsdir}" modalias.attr
%{rrcdir}/find-provides.d/modalias.prov
%changelog
* Thu Feb 17 2022 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-11
- Work around a change in type of __crc_* symbols for some kmods printed by nm
on ppc64le and s390x
- Resolves: #2055464
* Thu Nov 18 2021 Eugene Syromiatnikov <esyr@redhat.com> - 1.0-10
- Add conflicts of kernel-srpm-macros with kernel-rpm-macros < 185-9
as macros.kmp, kmodtool, and rpmsort were moved from the latter