From a46f270646f853a9141822a73547dbf932168bfe Mon Sep 17 00:00:00 2001 From: Tk-Glitch Date: Sat, 9 Sep 2023 14:22:18 +0200 Subject: [PATCH] 6.5.y: Suse: Add kernel-ksyms package --- .../6.5/0013-suse-additions.patch | 232 ++++++++++++++++++ 1 file changed, 232 insertions(+) diff --git a/linux-tkg-patches/6.5/0013-suse-additions.patch b/linux-tkg-patches/6.5/0013-suse-additions.patch index cd2b6b5..2dc6e95 100644 --- a/linux-tkg-patches/6.5/0013-suse-additions.patch +++ b/linux-tkg-patches/6.5/0013-suse-additions.patch @@ -1,3 +1,164 @@ +From: Michal Suchanek +Date: Wed, 7 Feb 2018 15:16:04 +0100 +Subject: Add ksym-provides tool. + +References: bsc#1077692 +Patch-mainline: no, not needed + +Signed-off-by: Michal Suchanek +--- + scripts/mod/Makefile | 6 +- + scripts/mod/ksym-provides.c | 124 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 129 insertions(+), 1 deletion(-) + create mode 100644 scripts/mod/ksym-provides.c + +--- a/scripts/mod/Makefile ++++ b/scripts/mod/Makefile +@@ -2,11 +2,15 @@ + OBJECT_FILES_NON_STANDARD := y + CFLAGS_REMOVE_empty.o += $(CC_FLAGS_LTO) + +-hostprogs-always-y += modpost mk_elfconfig ++hostprogs-always-y += modpost mk_elfconfig ksym-provides + always-y += empty.o + + modpost-objs := modpost.o file2alias.o sumversion.o + ++ksym-provides-objs := ksym-provides.o ++ ++HOSTLDLIBS_ksym-provides := -lelf ++ + devicetable-offsets-file := devicetable-offsets.h + + $(obj)/$(devicetable-offsets-file): $(obj)/devicetable-offsets.s FORCE +--- /dev/null ++++ b/scripts/mod/ksym-provides.c +@@ -0,0 +1,124 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int main(int argc, char *argv[]) ++{ ++ int fd; ++ Elf *elf; ++ Elf_Scn *scn; ++ GElf_Shdr shdr; ++ size_t strndx; ++ int ndx; ++ Elf_Data *symdata, *data; ++ GElf_Sym sym; ++ char *name; ++ const char * flavor = argv[1]; ++ const char * prefix = "__crc_"; ++ size_t prefixlen = strlen(prefix); ++ const char * symformat = "ksym(%s:%s) = %lx\n"; ++ ++ if (argc != 3) { ++ fprintf(stderr, "Usage: %s \n", argv[0]); ++ return 1; ++ } ++ ++ if (elf_version(EV_CURRENT) == EV_NONE) { ++ fprintf(stderr, "libelf initialization failed: %s\n", ++ elf_errmsg(-1)); ++ return 1; ++ } ++ ++ fd = open(argv[2], O_RDONLY); ++ if (fd < 0) { ++ perror("open failed"); ++ return 1; ++ } ++ ++ elf = elf_begin(fd, ELF_C_READ, NULL); ++ if (!elf) { ++ fprintf(stderr, "elf_begin failed: %s\n", elf_errmsg(-1)); ++ goto err_close; ++ } ++ ++ scn = NULL; ++ while ((scn = elf_nextscn(elf, scn)) != NULL) { ++ if (!gelf_getshdr(scn, &shdr)) { ++ fprintf(stderr, "gelf_getshdr failed: %s\n", ++ elf_errmsg(-1)); ++ goto err_end; ++ } ++ ++ if (shdr.sh_type == SHT_SYMTAB) ++ break; ++ } ++ if (!scn) { ++ fputs("symbol table not found\n", stderr); ++ goto err_end; ++ } ++ strndx = shdr.sh_link; ++ ++ symdata = elf_getdata(scn, NULL); ++ if (!symdata) { ++ fprintf(stderr, "elf_getdata failed: %s\n", elf_errmsg(-1)); ++ goto err_end; ++ } ++ ++ for (ndx = 0; gelf_getsym(symdata, ndx, &sym) != NULL; ++ndx) { ++ ++ name = elf_strptr(elf, strndx, sym.st_name); ++ if (!name) { ++ fprintf(stderr, "elf_strptr failed: %s\n", ++ elf_errmsg(-1)); ++ goto err_end; ++ } ++ if (strncmp(prefix, name, prefixlen)) ++ continue; ++ ++ if (sym.st_shndx >= SHN_LORESERVE) { ++ printf(symformat, flavor, name + prefixlen, ++ sym.st_value); ++ continue; ++ } ++ ++ scn = elf_getscn(elf, sym.st_shndx); ++ if (!scn) { ++ fprintf(stderr, "elf_getscn failed: %s\n", ++ elf_errmsg(-1)); ++ goto err_end; ++ } ++ if (!gelf_getshdr(scn, &shdr)) { ++ fprintf(stderr, "gelf_getshdr failed: %s\n", ++ elf_errmsg(-1)); ++ goto err_end; ++ } ++ ++ if (shdr.sh_type != SHT_PROGBITS) ++ continue; ++ ++ data = elf_getdata_rawchunk( ++ elf, shdr.sh_offset + sym.st_value - shdr.sh_addr, ++ sizeof(GElf_Word), ELF_T_WORD); ++ if (!data) { ++ fprintf(stderr, "elf_getdata_rawchunk failed: %s\n", ++ elf_errmsg(-1)); ++ goto err_end; ++ } ++ printf(symformat, flavor, name + prefixlen, ++ (unsigned long) *(GElf_Word*)data->d_buf); ++ } ++ ++ elf_end(elf); ++ close(fd); ++ return 0; ++ ++ err_end: ++ elf_end(elf); ++ err_close: ++ close(fd); ++ return 1; ++} + From bb1a83cf109eee56c8dee26f7910c772f8c246fc Mon Sep 17 00:00:00 2001 From: Michal Suchanek Date: Thu, 29 Jun 2023 17:47:16 +0200 @@ -175,3 +336,74 @@ index de170760d..2b5ee7b35 100755 +$S$M /usr/lib/modules/$KERNELRELEASE/source EOF +From 23133fe6745d567db5b93dc9e6aecc32d31354bd Mon Sep 17 00:00:00 2001 +From: Jeff Mahoney +Date: Tue, 31 Mar 2009 09:46:30 -0400 +Subject: [PATCH] - doc/README.KSYMS: Add to repo. + +--- + doc/README.KSYMS | 6 ++++++ + 1 file changed, 6 insertions(+) + create mode 100644 doc/README.KSYMS + +diff --git a/doc/README.KSYMS b/doc/README.KSYMS +new file mode 100644 +index 00000000000..39fe7878174 +--- /dev/null ++++ b/doc/README.KSYMS +@@ -0,0 +1,6 @@ ++This file is a place holder for the kernel-syms{,-rt} package. It is used ++to group build dependencies for all kernel flavors. ++ ++The KMP build process will build KMPs against all installed kernel flavors ++automatically. If you don't need to build against other flavors than the ++ones you've already installed - it is safe to uninstall this package. + +From 5cd5e149a95d37746a89850f4beddef4f0ad2224 Mon Sep 17 00:00:00 2001 +From: tkg +Date: Sat, 9 Sep 2023 14:06:44 +0200 +Subject: Suse: Add kernel-syms package + + +diff --git a/scripts/package/mkspec b/scripts/package/mkspec +index ff8c33ead..51c94131e 100755 +--- a/scripts/package/mkspec ++++ b/scripts/package/mkspec +@@ -52,7 +52,7 @@ $S Source1: config + $S Source2: diff.patch + Provides: kernel-$KERNELRELEASE + Provides: kernel-uname-r = %{version} +-$S BuildRequires: bc binutils bison dwarves ++$S BuildRequires: bc binutils bison dwarves coreutils + $S BuildRequires: (elfutils-libelf-devel or libelf-devel) flex + $S BuildRequires: gcc make openssl openssl-devel perl python3 rsync + +@@ -88,6 +88,19 @@ $S$M %description -n kernel-devel + $S$M This package provides kernel headers and makefiles sufficient to build modules + $S$M against the $__KERNELRELEASE kernel package. + $S$M ++$S$M %package syms ++$S$M Summary: Kernel Symbol Versions (modversions) for the $__KERNELRELEASE kernel ++$S$M Group: Development/Sources ++$S$M AutoReqProv: no ++$S$M Provides: kernel-syms = %{version} ++$S$M Requires: kernel-devel = %{version} ++$S$M %description -n kernel-syms ++$S$M Kernel symbols, such as functions and variables, have version ++$S$M information attached to them. This package contains the symbol versions ++$S$M for the standard kernels. ++$S$M This package is needed for compiling kernel module packages with proper ++$S$M package dependencies. ++ + $S # Opt out of a lot of Fedora hardening flags etc... + $S # See https://src.fedoraproject.org/rpms/redhat-rpm-config//blob/rawhide/f/buildflags.md + $S %undefine _package_note_file +@@ -173,4 +189,8 @@ $S$M %defattr (-, root, root) + $S$M /usr/src/kernels/$KERNELRELEASE + $S$M /usr/lib/modules/$KERNELRELEASE/build + $S$M /usr/lib/modules/$KERNELRELEASE/source ++$S$M ++$S$M %files syms ++$S$M %defattr (-, root, root) ++$S$M /usr/src/kernels/$KERNELRELEASE/doc + EOF