Test Build 2) New behavior if ZFS modules are *not* built with debug symbols
goal: show failsafe/backwards compatible behavior if zfs-dksm doesn't support/build debug symbols
and kernel build log reports missing debug symbols, and extra modules have .gnu_debuglink.
- test packaging
- zfs not built with debug symbols (disabled manually in dkms-build if-check)
- zfs modules not present in debug package
- extra modules have .gnu_debuglink section
- (no regressions)
Test packaging, with debug symbols *not enabled* in zfs-dkms:
The debug symbols are not found (as expected),
and this case is handled without problems:
$ find deb-modules/ -name '*.ko' | while read ko; do objdump -h -j .gnu_debuglink $ko >/dev/null 2>&1 || echo "Module without debug link '$ko'"; done
Module without debug link 'deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/icp.ko'
Module without debug link 'deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/spl.ko'
Module without debug link 'deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/zavl.ko'
Module without debug link 'deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/zcommon.ko'
Module without debug link 'deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/zfs.ko'
Module without debug link 'deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/zlua.ko'
Module without debug link 'deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/znvpair.ko'
Module without debug link 'deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/zunicode.ko'
$ for ko in deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/*.ko; do objdump -h $ko | grep debug; done
$
But all modules in 'linux-modules-extra' now have '.gnu_debuglink' sections
(except virtualbox modules which are DKMS-built without debug symbols too.)
$ find deb-modules-extra/ -name '*.ko' | while read ko; do objdump -h -j .gnu_debuglink $ko >/dev/null 2>&1 || echo "Module without debug link '$ko'"; done
Module without debug link 'deb-modules-extra/lib/modules/5.3.0-8-generic/kernel/virtualbox-guest/vboxguest.ko'
Module without debug link 'deb-modules-extra/lib/modules/5.3.0-8-generic/kernel/virtualbox-guest/vboxsf.ko'
The objdump disassembly is identical (no instruction changes expected from packaging-only changes)
build1 $ for ko in deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/*.ko; do objdump -d $ko > objdump_-d/$(basename $ko).log; done
build2 $ for ko in deb-modules/lib/modules/5.3.0-8-generic/kernel/zfs/*.ko; do objdump -d $ko > objdump_-d/$(basename $ko).log; done
Test Build 2) New behavior if ZFS modules are *not* built with debug symbols
goal: show failsafe/backwards compatible behavior if zfs-dksm doesn't support/build debug symbols
and kernel build log reports missing debug symbols, and extra modules have .gnu_debuglink.
- test packaging
- zfs not built with debug symbols (disabled manually in dkms-build if-check)
- zfs modules not present in debug package
- extra modules have .gnu_debuglink section
- (no regressions)
Test packaging, with debug symbols *not enabled* in zfs-dkms:
The debug symbols are not found (as expected),
and this case is handled without problems:
II: dkms-build installing zfs into /home/ubuntu/ dbgsym/ unstable/ debian/ linux-image- unsigned- 5.3.0-8- generic- dbgsym/ usr/lib/ debug/lib/ modules/ 5.3.0-8- generic/ kernel/ zfs (debug symbols) dbgsym/ unstable/ debian/ linux-modules- 5.3.0-8- generic/ lib/modules/ 5.3.0-8- generic/ kernel/ zfs
ignoring zavl.ko (missing debug symbols)
stripping zavl.ko
ignoring znvpair.ko (missing debug symbols)
stripping znvpair.ko
ignoring zunicode.ko (missing debug symbols)
stripping zunicode.ko
ignoring zcommon.ko (missing debug symbols)
stripping zcommon.ko
ignoring zfs.ko (missing debug symbols)
stripping zfs.ko
ignoring icp.ko (missing debug symbols)
stripping icp.ko
ignoring zlua.ko (missing debug symbols)
stripping zlua.ko
ignoring spl.ko (missing debug symbols)
stripping spl.ko
II: dkms-build installing zfs into /home/ubuntu/
signing zavl.ko
signing znvpair.ko
signing zunicode.ko
signing zcommon.ko
signing zfs.ko
signing icp.ko
signing zlua.ko
signing spl.ko
II: dkms-build build zfs complete
The debug package contains the ZFS directory, but it's empty:
$ dpkg-deb -x linux-image- unsigned- 5.3.0-8- generic- dbgsym_ 5.3.0-8. 9_amd64. ddeb ddeb-test-disabled disabled/ usr/lib/ debug/lib/ modules/ 5.3.0-8- generic/ kernel/ zfs/
$ ls ddeb-test-
$
The kernel build log documents which modules do not have debug symbols,
now covering modules built with DKMS (zfs and vbox):
$ grep WARNING build.log 5.3.0-8- generic/ kernel/ zfs/zavl. ko'. 5.3.0-8- generic/ kernel/ zfs/znvpair. ko'. 5.3.0-8- generic/ kernel/ zfs/zunicode. ko'. 5.3.0-8- generic/ kernel/ zfs/zcommon. ko'. 5.3.0-8- generic/ kernel/ zfs/zfs. ko'. 5.3.0-8- generic/ kernel/ zfs/icp. ko'. 5.3.0-8- generic/ kernel/ zfs/zlua. ko'. 5.3.0-8- generic/ kernel/ zfs/spl. ko'. 5.3.0-8- generic/ kernel/ virtualbox- guest/vboxguest .ko'. 5.3.0-8- generic/ kernel/ virtualbox- guest/vboxsf. ko'.
echo "WARNING: Missing debug symbols for module '$module'."; \
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
WARNING: Missing debug symbols for module '/lib/modules/
The ZFS modules have no '.gnu_debuglink' section or any other debug section (as expected):
$ dpkg-deb -x linux-modules- 5.3.0-8- generic_ 5.3.0-8. 9_amd64. deb deb-modules
$ find deb-modules/ -name '*.ko' | while read ko; do objdump -h -j .gnu_debuglink $ko >/dev/null 2>&1 || echo "Module without debug link '$ko'"; done lib/modules/ 5.3.0-8- generic/ kernel/ zfs/icp. ko' lib/modules/ 5.3.0-8- generic/ kernel/ zfs/spl. ko' lib/modules/ 5.3.0-8- generic/ kernel/ zfs/zavl. ko' lib/modules/ 5.3.0-8- generic/ kernel/ zfs/zcommon. ko' lib/modules/ 5.3.0-8- generic/ kernel/ zfs/zfs. ko' lib/modules/ 5.3.0-8- generic/ kernel/ zfs/zlua. ko' lib/modules/ 5.3.0-8- generic/ kernel/ zfs/znvpair. ko' lib/modules/ 5.3.0-8- generic/ kernel/ zfs/zunicode. ko'
Module without debug link 'deb-modules/
Module without debug link 'deb-modules/
Module without debug link 'deb-modules/
Module without debug link 'deb-modules/
Module without debug link 'deb-modules/
Module without debug link 'deb-modules/
Module without debug link 'deb-modules/
Module without debug link 'deb-modules/
$ for ko in deb-modules/ lib/modules/ 5.3.0-8- generic/ kernel/ zfs/*.ko; do objdump -h $ko | grep debug; done
$
But all modules in 'linux- modules- extra' now have '.gnu_debuglink' sections
(except virtualbox modules which are DKMS-built without debug symbols too.)
$ dpkg-deb -x linux-modules- extra-5. 3.0-8-generic_ 5.3.0-8. 9_amd64. deb deb-modules-extra
$ find deb-modules-extra/ -name '*.ko' | while read ko; do objdump -h -j .gnu_debuglink $ko >/dev/null 2>&1 || echo "Module without debug link '$ko'"; done extra/lib/ modules/ 5.3.0-8- generic/ kernel/ virtualbox- guest/vboxguest .ko' extra/lib/ modules/ 5.3.0-8- generic/ kernel/ virtualbox- guest/vboxsf. ko'
Module without debug link 'deb-modules-
Module without debug link 'deb-modules-
$ find deb-modules-extra/ -name '*.ko' | wc -l
4508
The objdump disassembly is identical (no instruction changes expected from packaging-only changes)
build1 $ for ko in deb-modules/ lib/modules/ 5.3.0-8- generic/ kernel/ zfs/*.ko; do objdump -d $ko > objdump_ -d/$(basename $ko).log; done lib/modules/ 5.3.0-8- generic/ kernel/ zfs/*.ko; do objdump -d $ko > objdump_ -d/$(basename $ko).log; done
build2 $ for ko in deb-modules/
$ diff -ur build1/objdump_-d/ build2/objdump_-d/
$
All 'objdump -d' files are definitely non-empty:
$ wc -l build1/objdump_-d/* build2/objdump_-d/* | sort -t / -k2,2 objdump_ -d/zavl. ko.log objdump_ -d/zavl. ko.log objdump_ -d/zunicode. ko.log objdump_ -d/zunicode. ko.log objdump_ -d/zcommon. ko.log objdump_ -d/zcommon. ko.log objdump_ -d/znvpair. ko.log objdump_ -d/znvpair. ko.log objdump_ -d/spl. ko.log objdump_ -d/spl. ko.log objdump_ -d/zlua. ko.log objdump_ -d/zlua. ko.log objdump_ -d/icp. ko.log objdump_ -d/icp. ko.log objdump_ -d/zfs. ko.log objdump_ -d/zfs. ko.log
807994 total
802 build1/
802 build2/
3695 build1/
3695 build2/
6333 build1/
6333 build2/
7365 build1/
7365 build2/
12189 build1/
12189 build2/
28087 build1/
28087 build2/
42498 build1/
42498 build2/
303028 build1/
303028 build2/