-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement --enable-debuginfo to permit us to force building with debuginfo #2734
Conversation
Currently, bogus options to --enable-debug become --disable-debug. That means that passing --enable-debug=true is analogous to --disable-debug, but the result is counterintuitive. We switch to AS_CASE to allow us to fail when given a bogus option. Also, we modify the text printed to clarify that --enable-debug enables assertions. Signed-off-by: Richard Yao <[email protected]>
Inspection of a Ubuntu 14.04 x64 system revealed that the config file used to build the kernel image differs from the config file used to build kernel modules by the presence of CONFIG_DEBUG_INFO=y: root@zfs-dev:~# grep -E 'CONFIG_.*=' /boot/config-$(uname -r) | sort > /tmp/d1 root@zfs-dev:~# grep -E 'CONFIG_.*=' /usr/src/linux-headers-$(uname -r)/include/config/auto.conf | sort > /tmp/d2 root@zfs-dev:~# diff /tmp/d1 /tmp/d2 1017d1016 < CONFIG_DEBUG_INFO=y This in itself is insufficient to show that the kernel is built with debuginfo, but a cursory analysis of the debuginfo provided and the size of the kernel strongly suggests that it was built with CONFIG_DEBUG_INFO=y while the modules were not. Installing linux-image-$(uname -r)-dbgsym had no obvious effect on the debuginfo provided by either the modules or the kernel. The consequence is that issue reports from distributions such as Ubuntu and its derivatives build kernel modules without debuginfo contain nonsensical backtraces. It is therefore desireable to force generation of debuginfo, so we implement --enable-debuginfo. Since the build system can build both userspace components and kernel modules, the generic --enable-debuginfo option will force debuginfo for both. However, it also supports --enable-debuginfo=kernel and --enable-debuginfo=user for finer grained control. Enabling debuginfo for the kernel modules works by injecting CONFIG_DEBUG_INFO=y into the make environment. This is enables generation of debuginfo by the kernel build systems on all Linux kernels, but the build environment is slightly different int hat CONFIG_DEBUG_INFO has not been in the CPP. Adding -DCONFIG_DEBUG_INFO would fix that, but it would also cause build failures on kernels where CONFIG_DEBUG_INFO=y is already set. That would complicate its use in DKMS environments that support a range of kernels and is therefore undesireable. We could write a compatibility shim to enable CONFIG_DEBUG_INFO only when it is explicitly disabled, but we forgo doing that because it is unnecessary. Nothing in ZoL or the kernel uses CONFIG_DEBUG_INFO in the CPP at this time and that is unlikely to change. Enabling debuginfo for the userspace components is done by injecting -g into CPPFLAGS. This is not necessary because the build system honors the environment's CPPFLAGS by appending them to the actual CPPFLAGS used, but it is supported for consistency. Signed-off-by: Richard Yao <[email protected]>
@dajhorn I would like to see this option set by the Ubuntu packaging in the future. That way the backtraces from reports on Ubuntu make sense. |
@ryao, does toggling the
This might happen because Ubuntu exports
The systemtap documentation regarding Linux debugging symbols probably applies here. Maybe the solution is to produce a dbgsym analog through dkms. Also note how distro handles kernel-image bug reports through an apport/whoospie hook. Notwithstanding, it will be easy to add a new autoconf switch to the existing configuration knobs. |
@dajhorn The majority of the debug information is not emitted for There is definitely some minor information that is generated without As for the systemtap documentation, he vmlinuz binary already has debug symbols without the the |
Right, but this is expected behavior because debugging packages are not automatically activated, dpkg-divert'd, or update-alternatives'd by system policy. Given XFS as an example, the driver must be manually loaded like this:
The module sizes seem reasonable:
I'm not disputing that The Ubuntu Way has a side effect, but rather suggesting that there could be a solution that fits The Ubuntu Way. |
@dajhorn It did not occur to me that Ubuntu would place actual modules in That said, does Ubuntu apply its /usr/lib/debug/lib/modules convention to DKMS? I am inclined to think that it does not. Setting this option in the PPA will not change anything unless a user wishes to change it because DKMS will strip the modules by default. In that case, the user likely wants /usr/lib to contain debuginfo and applying the "The Ubuntu Way' to DKMS-built kernel modules (or to kernel modules at all) does not make sense to me. Do you know offhand how |
@ryao Fedora and RHEL do a similar thing as Ubuntu. A *-debuginfo package is provided which can be optionally installed from the yum repository. It contains an unstripped version of the kernel modules, named *.ko.debug which will be installed under |
@ryao Where did we leave this? Do you still need this functionality? If so why aren't the debug versions provided in |
@ryao, I forgot to reply earlier.
Right, which is why I started thinking about a dbgsym enhancement for DKMS.
Brian's comment applies. The vendor toolchain usually knows about external symbols, and any local changes break that integration. In this regard, Ubuntu is much like Windows... Install a separate symbol package and plug it into Visual Studio. ;) |
It would be nice, but it is difficult to take advantage of it unlesss Darik is |
Yes, of course. Any new ./configure switches can be exposed in the default configuration. |
As long as this functionality is disabled by default I don't have an objection to including it upstream. And it sounds to me like @dajhorn is OK with adding it to the other dkms options in |
@ryao is this something which you could still take advantage of? |
Closing as unnecessary until I hear otherwise. |
@behlendorf I am using this at my new job now. It is definitely something useful. |
@behlendorf |
7098243 works for the ko. The user stuff seems to always have -g in CFLAGS |
Inspection of a Ubuntu 14.04 x64 system revealed that the config file used to build the kernel image differs from the config file used to build kernel modules by the presence of CONFIG_DEBUG_INFO=y: This in itself is insufficient to show that the kernel is built with debuginfo, but a cursory analysis of the debuginfo provided and the size of the kernel strongly suggests that it was built with CONFIG_DEBUG_INFO=y while the modules were not. Installing linux-image-$(uname -r)-dbgsym had no obvious effect on the debuginfo provided by either the modules or the kernel. The consequence is that issue reports from distributions such as Ubuntu and its derivatives build kernel modules without debuginfo contain nonsensical backtraces. It is therefore desireable to force generation of debuginfo, so we implement --enable-debuginfo. Since the build system can build both userspace components and kernel modules, the generic --enable-debuginfo option will force debuginfo for both. However, it also supports --enable-debuginfo=kernel and --enable-debuginfo=user for finer grained control. Enabling debuginfo for the kernel modules works by injecting CONFIG_DEBUG_INFO=y into the make environment. This is enables generation of debuginfo by the kernel build systems on all Linux kernels, but the build environment is slightly different int hat CONFIG_DEBUG_INFO has not been in the CPP. Adding -DCONFIG_DEBUG_INFO would fix that, but it would also cause build failures on kernels where CONFIG_DEBUG_INFO=y is already set. That would complicate its use in DKMS environments that support a range of kernels and is therefore undesireable. We could write a compatibility shim to enable CONFIG_DEBUG_INFO only when it is explicitly disabled, but we forgo doing that because it is unnecessary. Nothing in ZoL or the kernel uses CONFIG_DEBUG_INFO in the CPP at this time and that is unlikely to change. Enabling debuginfo for the userspace components is done by injecting -g into CPPFLAGS. This is not necessary because the build system honors the environment's CPPFLAGS by appending them to the actual CPPFLAGS used, but it is supported for consistency. Reviewed-by: Chunwei Chen <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Richard Yao <[email protected]> Closes #2734
Rebased and merged. |
Currently, bogus options to --enable-debug become --disable-debug. That means that passing --enable-debug=true is analogous to --disable-debug, but the result is counterintuitive. We switch to AS_CASE to allow us to fail when given a bogus option. Also, we modify the text printed to clarify that --enable-debug enables assertions. Reviewed-by: Chunwei Chen <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Richard Yao <[email protected]> Closes openzfs#2734
Inspection of a Ubuntu 14.04 x64 system revealed that the config file used to build the kernel image differs from the config file used to build kernel modules by the presence of CONFIG_DEBUG_INFO=y: This in itself is insufficient to show that the kernel is built with debuginfo, but a cursory analysis of the debuginfo provided and the size of the kernel strongly suggests that it was built with CONFIG_DEBUG_INFO=y while the modules were not. Installing linux-image-$(uname -r)-dbgsym had no obvious effect on the debuginfo provided by either the modules or the kernel. The consequence is that issue reports from distributions such as Ubuntu and its derivatives build kernel modules without debuginfo contain nonsensical backtraces. It is therefore desireable to force generation of debuginfo, so we implement --enable-debuginfo. Since the build system can build both userspace components and kernel modules, the generic --enable-debuginfo option will force debuginfo for both. However, it also supports --enable-debuginfo=kernel and --enable-debuginfo=user for finer grained control. Enabling debuginfo for the kernel modules works by injecting CONFIG_DEBUG_INFO=y into the make environment. This is enables generation of debuginfo by the kernel build systems on all Linux kernels, but the build environment is slightly different int hat CONFIG_DEBUG_INFO has not been in the CPP. Adding -DCONFIG_DEBUG_INFO would fix that, but it would also cause build failures on kernels where CONFIG_DEBUG_INFO=y is already set. That would complicate its use in DKMS environments that support a range of kernels and is therefore undesireable. We could write a compatibility shim to enable CONFIG_DEBUG_INFO only when it is explicitly disabled, but we forgo doing that because it is unnecessary. Nothing in ZoL or the kernel uses CONFIG_DEBUG_INFO in the CPP at this time and that is unlikely to change. Enabling debuginfo for the userspace components is done by injecting -g into CPPFLAGS. This is not necessary because the build system honors the environment's CPPFLAGS by appending them to the actual CPPFLAGS used, but it is supported for consistency. Reviewed-by: Chunwei Chen <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Richard Yao <[email protected]> Closes openzfs#2734
This is a squashed patchset for zfs-0.7.7. The individual commits are in the tonyhutter:zfs-0.7.7-hutter branch. I squashed the commits so that buildbot wouldn't have to run against each one, and because github/builbot seem to have a maximum limit of 30 commits they can test from a PR. - Linux 4.16 compat: get_disk_and_module() openzfs#7264 - Change checksum & IO delay ratelimit values openzfs#7252 - Increment zil_itx_needcopy_bytes properly openzfs#6988 openzfs#7176 - Fix some typos openzfs#7237 - Fix zpool(8) list example to match actual format openzfs#7244 - Add SMART self-test results to zpool status -c openzfs#7178 - Add scrub after resilver zed script openzfs#4662 openzfs#7086 - Fix free memory calculation on v3.14+ openzfs#7170 - Report duration and error in mmp_history entries openzfs#7190 - Do not initiate MMP writes while pool is suspended openzfs#7182 - Linux 4.16 compat: use correct *_dec_and_test() openzfs#7179 openzfs#7211 - Allow modprobe to fail when called within systemd openzfs#7174 - Add SMART attributes for SSD and NVMe openzfs#7183 openzfs#7193 - Correct count_uberblocks in mmp.kshlib openzfs#7191 - Fix config issues: frame size and headers openzfs#7169 - Clarify zinject(8) explanation of -e openzfs#7172 - OpenZFS 8857 - zio_remove_child() panic due to already destroyed parent zio openzfs#7168 - 'zfs receive' fails with "dataset is busy" openzfs#7129 openzfs#7154 - contrib/initramfs: add missing conf.d/zfs openzfs#7158 - mmp should use a fixed tag for spa_config locks openzfs#6530 openzfs#7155 - Handle zap_add() failures in mixed case mode openzfs#7011 openzfs#7054 - Fix zdb -ed on objset for exported pool openzfs#7099 openzfs#6464 - Fix zdb -E segfault openzfs#7099 - Fix zdb -R decompression openzfs#7099 openzfs#4984 - Fix racy assignment of zcb.zcb_haderrors openzfs#7099 - Fix zle_decompress out of bound access openzfs#7099 - Fix zdb -c traverse stop on damaged objset root openzfs#7099 - Linux 4.11 compat: avoid refcount_t name conflict openzfs#7148 - Linux 4.16 compat: inode_set_iversion() openzfs#7148 - OpenZFS 8966 - Source file zfs_acl.c, function zfs_aclset_common contains a use after end of the lifetime of a local variable openzfs#7141 - Remove deprecated zfs_arc_p_aggressive_disable openzfs#7135 - Fix default libdir for Debian/Ubuntu openzfs#7083 openzfs#7101 - Bug fix in qat_compress.c for vmalloc addr check openzfs#7125 - Fix systemd_ RPM macros usage on Debian-based distributions openzfs#7074 openzfs#7100 - Emit an error message before MMP suspends pool openzfs#7048 - ZTS: Fix create-o_ashift test case openzfs#6924 openzfs#6977 - Fix --with-systemd on Debian-based distributions (openzfs#6963) openzfs#6591 openzfs#6963 - Remove vn_rename and vn_remove dependency openzfs/spl#648 openzfs#6753 - Add support for "--enable-code-coverage" option openzfs#6670 - Make "-fno-inline" compile option more accessible openzfs#6605 - Add configure option to enable gcov analysis openzfs#6642 - Implement --enable-debuginfo to force debuginfo openzfs#2734 - Make --enable-debug fail when given bogus args openzfs#2734 Signed-off-by: Tony Hutter <[email protected]> Requires-spl: refs/pull/690/head
Currently, bogus options to --enable-debug become --disable-debug. That means that passing --enable-debug=true is analogous to --disable-debug, but the result is counterintuitive. We switch to AS_CASE to allow us to fail when given a bogus option. Also, we modify the text printed to clarify that --enable-debug enables assertions. Reviewed-by: Chunwei Chen <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Richard Yao <[email protected]> Closes openzfs#2734
Inspection of a Ubuntu 14.04 x64 system revealed that the config file used to build the kernel image differs from the config file used to build kernel modules by the presence of CONFIG_DEBUG_INFO=y: This in itself is insufficient to show that the kernel is built with debuginfo, but a cursory analysis of the debuginfo provided and the size of the kernel strongly suggests that it was built with CONFIG_DEBUG_INFO=y while the modules were not. Installing linux-image-$(uname -r)-dbgsym had no obvious effect on the debuginfo provided by either the modules or the kernel. The consequence is that issue reports from distributions such as Ubuntu and its derivatives build kernel modules without debuginfo contain nonsensical backtraces. It is therefore desireable to force generation of debuginfo, so we implement --enable-debuginfo. Since the build system can build both userspace components and kernel modules, the generic --enable-debuginfo option will force debuginfo for both. However, it also supports --enable-debuginfo=kernel and --enable-debuginfo=user for finer grained control. Enabling debuginfo for the kernel modules works by injecting CONFIG_DEBUG_INFO=y into the make environment. This is enables generation of debuginfo by the kernel build systems on all Linux kernels, but the build environment is slightly different int hat CONFIG_DEBUG_INFO has not been in the CPP. Adding -DCONFIG_DEBUG_INFO would fix that, but it would also cause build failures on kernels where CONFIG_DEBUG_INFO=y is already set. That would complicate its use in DKMS environments that support a range of kernels and is therefore undesireable. We could write a compatibility shim to enable CONFIG_DEBUG_INFO only when it is explicitly disabled, but we forgo doing that because it is unnecessary. Nothing in ZoL or the kernel uses CONFIG_DEBUG_INFO in the CPP at this time and that is unlikely to change. Enabling debuginfo for the userspace components is done by injecting -g into CPPFLAGS. This is not necessary because the build system honors the environment's CPPFLAGS by appending them to the actual CPPFLAGS used, but it is supported for consistency. Reviewed-by: Chunwei Chen <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Richard Yao <[email protected]> Closes openzfs#2734
This is a squashed patchset for zfs-0.7.7. The individual commits are in the tonyhutter:zfs-0.7.7-hutter branch. I squashed the commits so that buildbot wouldn't have to run against each one, and because github/builbot seem to have a maximum limit of 30 commits they can test from a PR. - Fix MMP write frequency for large pools openzfs#7205 openzfs#7289 - Handle zio_resume and mmp => off openzfs#7286 - Fix zfs-kmod builds when using rpm >= 4.14 openzfs#7284 - zdb and inuse tests don't pass with real disks openzfs#6939 openzfs#7261 - Take user namespaces into account in policy checks openzfs#6800 openzfs#7270 - Detect long config lock acquisition in mmp openzfs#7212 - Linux 4.16 compat: get_disk_and_module() openzfs#7264 - Change checksum & IO delay ratelimit values openzfs#7252 - Increment zil_itx_needcopy_bytes properly openzfs#6988 openzfs#7176 - Fix some typos openzfs#7237 - Fix zpool(8) list example to match actual format openzfs#7244 - Add SMART self-test results to zpool status -c openzfs#7178 - Add scrub after resilver zed script openzfs#4662 openzfs#7086 - Fix free memory calculation on v3.14+ openzfs#7170 - Report duration and error in mmp_history entries openzfs#7190 - Do not initiate MMP writes while pool is suspended openzfs#7182 - Linux 4.16 compat: use correct *_dec_and_test() - Allow modprobe to fail when called within systemd openzfs#7174 - Add SMART attributes for SSD and NVMe openzfs#7183 openzfs#7193 - Correct count_uberblocks in mmp.kshlib openzfs#7191 - Fix config issues: frame size and headers openzfs#7169 - Clarify zinject(8) explanation of -e openzfs#7172 - OpenZFS 8857 - zio_remove_child() panic due to already destroyed parent zio openzfs#7168 - 'zfs receive' fails with "dataset is busy" openzfs#7129 openzfs#7154 - contrib/initramfs: add missing conf.d/zfs openzfs#7158 - mmp should use a fixed tag for spa_config locks openzfs#6530 openzfs#7155 - Handle zap_add() failures in mixed case mode openzfs#7011 openzfs#7054 - Fix zdb -ed on objset for exported pool openzfs#7099 openzfs#6464 - Fix zdb -E segfault openzfs#7099 - Fix zdb -R decompression openzfs#7099 openzfs#4984 - Fix racy assignment of zcb.zcb_haderrors openzfs#7099 - Fix zle_decompress out of bound access openzfs#7099 - Fix zdb -c traverse stop on damaged objset root openzfs#7099 - Linux 4.11 compat: avoid refcount_t name conflict openzfs#7148 - Linux 4.16 compat: inode_set_iversion() openzfs#7148 - OpenZFS 8966 - Source file zfs_acl.c, function zfs_aclset_common contains a use after end of the lifetime of a local variable openzfs#7141 - Remove deprecated zfs_arc_p_aggressive_disable openzfs#7135 - Fix default libdir for Debian/Ubuntu openzfs#7083 openzfs#7101 - Bug fix in qat_compress.c for vmalloc addr check openzfs#7125 - Fix systemd_ RPM macros usage on Debian-based distributions openzfs#7074 openzfs#7100 - Emit an error message before MMP suspends pool openzfs#7048 - ZTS: Fix create-o_ashift test case openzfs#6924 openzfs#6977 - Fix --with-systemd on Debian-based distributions (openzfs#6963) openzfs#6591 openzfs#6963 - Remove vn_rename and vn_remove dependency openzfs/spl#648 openzfs#6753 - Add support for "--enable-code-coverage" option openzfs#6670 - Make "-fno-inline" compile option more accessible openzfs#6605 - Add configure option to enable gcov analysis openzfs#6642 - Implement --enable-debuginfo to force debuginfo openzfs#2734 - Make --enable-debug fail when given bogus args openzfs#2734 Signed-off-by: Tony Hutter <[email protected]> Requires-spl: refs/pull/690/head
This is a squashed patchset for zfs-0.7.7. The individual commits are in the tonyhutter:zfs-0.7.7-hutter branch. I squashed the commits so that buildbot wouldn't have to run against each one, and because github/builbot seem to have a maximum limit of 30 commits they can test from a PR. - Fix MMP write frequency for large pools openzfs#7205 openzfs#7289 - Handle zio_resume and mmp => off openzfs#7286 - Fix zfs-kmod builds when using rpm >= 4.14 openzfs#7284 - zdb and inuse tests don't pass with real disks openzfs#6939 openzfs#7261 - Take user namespaces into account in policy checks openzfs#6800 openzfs#7270 - Detect long config lock acquisition in mmp openzfs#7212 - Linux 4.16 compat: get_disk_and_module() openzfs#7264 - Change checksum & IO delay ratelimit values openzfs#7252 - Increment zil_itx_needcopy_bytes properly openzfs#6988 openzfs#7176 - Fix some typos openzfs#7237 - Fix zpool(8) list example to match actual format openzfs#7244 - Add SMART self-test results to zpool status -c openzfs#7178 - Add scrub after resilver zed script openzfs#4662 openzfs#7086 - Fix free memory calculation on v3.14+ openzfs#7170 - Report duration and error in mmp_history entries openzfs#7190 - Do not initiate MMP writes while pool is suspended openzfs#7182 - Linux 4.16 compat: use correct *_dec_and_test() - Allow modprobe to fail when called within systemd openzfs#7174 - Add SMART attributes for SSD and NVMe openzfs#7183 openzfs#7193 - Correct count_uberblocks in mmp.kshlib openzfs#7191 - Fix config issues: frame size and headers openzfs#7169 - Clarify zinject(8) explanation of -e openzfs#7172 - OpenZFS 8857 - zio_remove_child() panic due to already destroyed parent zio openzfs#7168 - 'zfs receive' fails with "dataset is busy" openzfs#7129 openzfs#7154 - contrib/initramfs: add missing conf.d/zfs openzfs#7158 - mmp should use a fixed tag for spa_config locks openzfs#6530 openzfs#7155 - Handle zap_add() failures in mixed case mode openzfs#7011 openzfs#7054 - Fix zdb -ed on objset for exported pool openzfs#7099 openzfs#6464 - Fix zdb -E segfault openzfs#7099 - Fix zdb -R decompression openzfs#7099 openzfs#4984 - Fix racy assignment of zcb.zcb_haderrors openzfs#7099 - Fix zle_decompress out of bound access openzfs#7099 - Fix zdb -c traverse stop on damaged objset root openzfs#7099 - Linux 4.11 compat: avoid refcount_t name conflict openzfs#7148 - Linux 4.16 compat: inode_set_iversion() openzfs#7148 - OpenZFS 8966 - Source file zfs_acl.c, function zfs_aclset_common contains a use after end of the lifetime of a local variable openzfs#7141 - Remove deprecated zfs_arc_p_aggressive_disable openzfs#7135 - Fix default libdir for Debian/Ubuntu openzfs#7083 openzfs#7101 - Bug fix in qat_compress.c for vmalloc addr check openzfs#7125 - Fix systemd_ RPM macros usage on Debian-based distributions openzfs#7074 openzfs#7100 - Emit an error message before MMP suspends pool openzfs#7048 - ZTS: Fix create-o_ashift test case openzfs#6924 openzfs#6977 - Fix --with-systemd on Debian-based distributions (openzfs#6963) openzfs#6591 openzfs#6963 - Remove vn_rename and vn_remove dependency openzfs/spl#648 openzfs#6753 - Add support for "--enable-code-coverage" option openzfs#6670 - Make "-fno-inline" compile option more accessible openzfs#6605 - Add configure option to enable gcov analysis openzfs#6642 - Implement --enable-debuginfo to force debuginfo openzfs#2734 - Make --enable-debug fail when given bogus args openzfs#2734 Signed-off-by: Tony Hutter <[email protected]> Requires-spl: refs/pull/690/head
This is a squashed patchset for zfs-0.7.7. The individual commits are in the tonyhutter:zfs-0.7.7-hutter branch. I squashed the commits so that buildbot wouldn't have to run against each one, and because github/builbot seem to have a maximum limit of 30 commits they can test from a PR. - Fix MMP write frequency for large pools openzfs#7205 openzfs#7289 - Handle zio_resume and mmp => off openzfs#7286 - Fix zfs-kmod builds when using rpm >= 4.14 openzfs#7284 - zdb and inuse tests don't pass with real disks openzfs#6939 openzfs#7261 - Take user namespaces into account in policy checks openzfs#6800 openzfs#7270 - Detect long config lock acquisition in mmp openzfs#7212 - Linux 4.16 compat: get_disk_and_module() openzfs#7264 - Change checksum & IO delay ratelimit values openzfs#7252 - Increment zil_itx_needcopy_bytes properly openzfs#6988 openzfs#7176 - Fix some typos openzfs#7237 - Fix zpool(8) list example to match actual format openzfs#7244 - Add SMART self-test results to zpool status -c openzfs#7178 - Add scrub after resilver zed script openzfs#4662 openzfs#7086 - Fix free memory calculation on v3.14+ openzfs#7170 - Report duration and error in mmp_history entries openzfs#7190 - Do not initiate MMP writes while pool is suspended openzfs#7182 - Linux 4.16 compat: use correct *_dec_and_test() - Allow modprobe to fail when called within systemd openzfs#7174 - Add SMART attributes for SSD and NVMe openzfs#7183 openzfs#7193 - Correct count_uberblocks in mmp.kshlib openzfs#7191 - Fix config issues: frame size and headers openzfs#7169 - Clarify zinject(8) explanation of -e openzfs#7172 - OpenZFS 8857 - zio_remove_child() panic due to already destroyed parent zio openzfs#7168 - 'zfs receive' fails with "dataset is busy" openzfs#7129 openzfs#7154 - contrib/initramfs: add missing conf.d/zfs openzfs#7158 - mmp should use a fixed tag for spa_config locks openzfs#6530 openzfs#7155 - Handle zap_add() failures in mixed case mode openzfs#7011 openzfs#7054 - Fix zdb -ed on objset for exported pool openzfs#7099 openzfs#6464 - Fix zdb -E segfault openzfs#7099 - Fix zdb -R decompression openzfs#7099 openzfs#4984 - Fix racy assignment of zcb.zcb_haderrors openzfs#7099 - Fix zle_decompress out of bound access openzfs#7099 - Fix zdb -c traverse stop on damaged objset root openzfs#7099 - Linux 4.11 compat: avoid refcount_t name conflict openzfs#7148 - Linux 4.16 compat: inode_set_iversion() openzfs#7148 - OpenZFS 8966 - Source file zfs_acl.c, function zfs_aclset_common contains a use after end of the lifetime of a local variable openzfs#7141 - Remove deprecated zfs_arc_p_aggressive_disable openzfs#7135 - Fix default libdir for Debian/Ubuntu openzfs#7083 openzfs#7101 - Bug fix in qat_compress.c for vmalloc addr check openzfs#7125 - Fix systemd_ RPM macros usage on Debian-based distributions openzfs#7074 openzfs#7100 - Emit an error message before MMP suspends pool openzfs#7048 - ZTS: Fix create-o_ashift test case openzfs#6924 openzfs#6977 - Fix --with-systemd on Debian-based distributions (openzfs#6963) openzfs#6591 openzfs#6963 - Remove vn_rename and vn_remove dependency openzfs/spl#648 openzfs#6753 - Fix "--enable-code-coverage" debug build openzfs#6674 - Update codecov.yml openzfs#6669 - Add support for "--enable-code-coverage" option openzfs#6670 - Make "-fno-inline" compile option more accessible openzfs#6605 - Add configure option to enable gcov analysis openzfs#6642 - Implement --enable-debuginfo to force debuginfo openzfs#2734 - Make --enable-debug fail when given bogus args openzfs#2734 Signed-off-by: Tony Hutter <[email protected]> Requires-spl: refs/pull/690/head
Currently, bogus options to --enable-debug become --disable-debug. That means that passing --enable-debug=true is analogous to --disable-debug, but the result is counterintuitive. We switch to AS_CASE to allow us to fail when given a bogus option. Also, we modify the text printed to clarify that --enable-debug enables assertions. Reviewed-by: Chunwei Chen <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Richard Yao <[email protected]> Closes #2734
Inspection of a Ubuntu 14.04 x64 system revealed that the config file used to build the kernel image differs from the config file used to build kernel modules by the presence of CONFIG_DEBUG_INFO=y: This in itself is insufficient to show that the kernel is built with debuginfo, but a cursory analysis of the debuginfo provided and the size of the kernel strongly suggests that it was built with CONFIG_DEBUG_INFO=y while the modules were not. Installing linux-image-$(uname -r)-dbgsym had no obvious effect on the debuginfo provided by either the modules or the kernel. The consequence is that issue reports from distributions such as Ubuntu and its derivatives build kernel modules without debuginfo contain nonsensical backtraces. It is therefore desireable to force generation of debuginfo, so we implement --enable-debuginfo. Since the build system can build both userspace components and kernel modules, the generic --enable-debuginfo option will force debuginfo for both. However, it also supports --enable-debuginfo=kernel and --enable-debuginfo=user for finer grained control. Enabling debuginfo for the kernel modules works by injecting CONFIG_DEBUG_INFO=y into the make environment. This is enables generation of debuginfo by the kernel build systems on all Linux kernels, but the build environment is slightly different int hat CONFIG_DEBUG_INFO has not been in the CPP. Adding -DCONFIG_DEBUG_INFO would fix that, but it would also cause build failures on kernels where CONFIG_DEBUG_INFO=y is already set. That would complicate its use in DKMS environments that support a range of kernels and is therefore undesireable. We could write a compatibility shim to enable CONFIG_DEBUG_INFO only when it is explicitly disabled, but we forgo doing that because it is unnecessary. Nothing in ZoL or the kernel uses CONFIG_DEBUG_INFO in the CPP at this time and that is unlikely to change. Enabling debuginfo for the userspace components is done by injecting -g into CPPFLAGS. This is not necessary because the build system honors the environment's CPPFLAGS by appending them to the actual CPPFLAGS used, but it is supported for consistency. Reviewed-by: Chunwei Chen <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Richard Yao <[email protected]> Closes #2734
There are two commits here. The second implements --enable-debuginfo for distributions that build modules without debuginfo. The first is a refactor of --enable-debug based on an observation made during the development of the first that --enable-debug=true would paradoxically become --disable-debug. The order is reversed to make cherry picking easier should anyone want to backport only the change to --enable-debug's argument semantics.