* [PATCH v3 0/1] Introduce CONFIG_DEBUG_INFO_IKCONFIG @ 2023-10-27 17:17 Stephen Brennan 2023-10-27 17:17 ` [PATCH v3 1/1] kernel/config: " Stephen Brennan 0 siblings, 1 reply; 4+ messages in thread From: Stephen Brennan @ 2023-10-27 17:17 UTC (permalink / raw) To: Arnd Bergmann Cc: linux-arch, linux-kernel, linux-debuggers, Mike Christie, Geert Uytterhoeven, Christian Brauner (Microsoft), Petr Mladek, Marco Elver, Randy Dunlap, Douglas Anderson, Maninder Singh, Luis Chamberlain, Nick Desaulniers, Zhen Lei, Kees Cook, Zhaoyang Huang, Stephen Brennan, Andrew Morton, Sami Tolvanen Hello All, This adds an alternative for CONFIG_IKCONFIG, which nearly all Linux distributions disable (probably due to memory considerations). It adds the section ".debug_linux_ikconfig" to the vmlinux ELF file, which is stripped out for final images, but retained for debuginfo (objcopy detects the ".debug" prefix). It is enabled by default whenever IKCONFIG is disabled, so that debuggers can rely on having the kernel config available. v1: https://lore.kernel.org/linux-debuggers/20231004165804.659482-1-stephen.s.brennan@oracle.com/T/#t v2: https://lore.kernel.org/linux-debuggers/20231025223640.1132047-1-stephen.s.brennan@oracle.com/T/#t Changes v2-v3: * Added missing dependency on kernel/config_data.gz in kernel/Makefile. Changes v1-v2: * I added "default y if IKCONFIG!=y". The result is that whenever DEBUG_INFO=y is enabled, and IKCONFIG is not built-in, then DEBUG_INFO_IKCONFIG will get enabled automatically. The whole point of this patch is for kernel debuggers to be able to rely on having kernel configuration information. The IKCONFIG data is quite small compared to kernel debuginfo, and it doesn't change anything at runtime. It's safe to enable this automatically, and it's important so that distributions (who create debuginfo explicitly to allow kernel debugging) will automatically begin creating this info for debuggers. * Randy Dunlap did review this, but I didn't apply that tag with the update, since I understand changing defaults is a major update, and it's a small patch to begin with, so I didn't want to misrepresent the review. Stephen Brennan (1): kernel/config: Introduce CONFIG_DEBUG_INFO_IKCONFIG include/asm-generic/vmlinux.lds.h | 3 ++- kernel/Makefile | 2 ++ kernel/configs-debug.S | 18 ++++++++++++++++++ lib/Kconfig.debug | 15 +++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 kernel/configs-debug.S -- 2.39.3 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 1/1] kernel/config: Introduce CONFIG_DEBUG_INFO_IKCONFIG 2023-10-27 17:17 [PATCH v3 0/1] Introduce CONFIG_DEBUG_INFO_IKCONFIG Stephen Brennan @ 2023-10-27 17:17 ` Stephen Brennan 2023-10-27 18:20 ` Arnd Bergmann 2023-11-01 19:12 ` Luis Chamberlain 0 siblings, 2 replies; 4+ messages in thread From: Stephen Brennan @ 2023-10-27 17:17 UTC (permalink / raw) To: Arnd Bergmann Cc: linux-arch, linux-kernel, linux-debuggers, Mike Christie, Geert Uytterhoeven, Christian Brauner (Microsoft), Petr Mladek, Marco Elver, Randy Dunlap, Douglas Anderson, Maninder Singh, Luis Chamberlain, Nick Desaulniers, Zhen Lei, Kees Cook, Zhaoyang Huang, Stephen Brennan, Andrew Morton, Sami Tolvanen The option CONFIG_IKCONFIG allows the gzip compressed kernel configuration to be included into vmlinux or a module. In these cases, debuggers can access the config data and use it to adjust their behavior according to the configuration. However, distributions rarely enable this, likely because it uses a fair bit of kernel memory which cannot be swapped out. This means that in practice, the kernel configuration is rarely available to debuggers. So, introduce an alternative, CONFIG_DEBUG_INFO_IKCONFIG. This strategy, which is only available if IKCONFIG is not already built-in, adds a section ".debug_linux_ikconfig", to the vmlinux ELF. It will be stripped out of the final images, but will remain in the debuginfo files. So debuggers which rely on vmlinux debuginfo can have access to the kernel configuration, without incurring a cost to the kernel at runtime. The configuration is enabled whenever DEBUG_INFO=y and IKCONFIG!=y. The added section is not large compared to debug info sizes. It won't affect the runtime kernel at all, and this default will ensure that distributions intending to create useful debuginfo will get this new addition for kernel debuggers. Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com> --- include/asm-generic/vmlinux.lds.h | 3 ++- kernel/Makefile | 2 ++ kernel/configs-debug.S | 18 ++++++++++++++++++ lib/Kconfig.debug | 15 +++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 kernel/configs-debug.S diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 9c59409104f6..025b0bfe17bf 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -824,7 +824,8 @@ .comment 0 : { *(.comment) } \ .symtab 0 : { *(.symtab) } \ .strtab 0 : { *(.strtab) } \ - .shstrtab 0 : { *(.shstrtab) } + .shstrtab 0 : { *(.shstrtab) } \ + .debug_linux_ikconfig 0 : { *(.debug_linux_ikconfig) } #ifdef CONFIG_GENERIC_BUG #define BUG_TABLE \ diff --git a/kernel/Makefile b/kernel/Makefile index 3947122d618b..ab28e7d9aa15 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -138,8 +138,10 @@ KCSAN_SANITIZE_stackleak.o := n KCOV_INSTRUMENT_stackleak.o := n obj-$(CONFIG_SCF_TORTURE_TEST) += scftorture.o +obj-$(CONFIG_DEBUG_INFO_IKCONFIG) += configs-debug.o $(obj)/configs.o: $(obj)/config_data.gz +$(obj)/configs-debug.o: $(obj)/config_data.gz targets += config_data config_data.gz $(obj)/config_data.gz: $(obj)/config_data FORCE diff --git a/kernel/configs-debug.S b/kernel/configs-debug.S new file mode 100644 index 000000000000..d0dd5c2f7bd5 --- /dev/null +++ b/kernel/configs-debug.S @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-only + * + * Inline kernel configuration for debuginfo files + * + * Copyright (c) 2023, Oracle and/or its affiliates. + */ + +/* + * By using the same "IKCFG_ST" and "IKCFG_ED" markers found in configs.c, we + * can ensure that the resulting debuginfo files can be read by + * scripts/extract-ikconfig. Unfortunately, this means that the contents of the + * section cannot be directly extracted and used. Since debuggers should be able + * to trim these markers off trivially, this is a good tradeoff. + */ + .section .debug_linux_ikconfig + .ascii "IKCFG_ST" + .incbin "kernel/config_data.gz" + .ascii "IKCFG_ED" diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index fa307f93fa2e..c43a874ea584 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -429,6 +429,21 @@ config GDB_SCRIPTS instance. See Documentation/dev-tools/gdb-kernel-debugging.rst for further details. +config DEBUG_INFO_IKCONFIG + bool "Embed KConfig in debuginfo, if not already present" + depends on IKCONFIG!=y + default y if IKCONFIG!=y + help + This provides the gzip-compressed KConfig information in an ELF + section called .ikconfig which will be stripped out of the final + bootable image, but remain in the debuginfo. Debuggers that are aware + of this can use this to customize their behavior to the kernel + configuration, without requiring the configuration information to be + stored in the kernel like CONFIG_IKCONFIG does. This configuration is + unnecessary when CONFIG_IKCONFIG is enabled, since the data can be + found in the .rodata section in that case (see + scripts/extract-ikconfig). + endif # DEBUG_INFO config FRAME_WARN -- 2.39.3 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3 1/1] kernel/config: Introduce CONFIG_DEBUG_INFO_IKCONFIG 2023-10-27 17:17 ` [PATCH v3 1/1] kernel/config: " Stephen Brennan @ 2023-10-27 18:20 ` Arnd Bergmann 2023-11-01 19:12 ` Luis Chamberlain 1 sibling, 0 replies; 4+ messages in thread From: Arnd Bergmann @ 2023-10-27 18:20 UTC (permalink / raw) To: Stephen Brennan Cc: Linux-Arch, linux-kernel, linux-debuggers, Mike Christie, Geert Uytterhoeven, Christian Brauner, Petr Mladek, Marco Elver, Randy Dunlap, Doug Anderson, Maninder Singh, Luis Chamberlain, Nick Desaulniers, Zhen Lei, Kees Cook, Zhaoyang Huang, Andrew Morton, Sami Tolvanen On Fri, Oct 27, 2023, at 19:17, Stephen Brennan wrote: > The option CONFIG_IKCONFIG allows the gzip compressed kernel > configuration to be included into vmlinux or a module. In these cases, > debuggers can access the config data and use it to adjust their behavior > according to the configuration. However, distributions rarely enable > this, likely because it uses a fair bit of kernel memory which cannot be > swapped out. > > This means that in practice, the kernel configuration is rarely > available to debuggers. > > So, introduce an alternative, CONFIG_DEBUG_INFO_IKCONFIG. This strategy, > which is only available if IKCONFIG is not already built-in, adds a > section ".debug_linux_ikconfig", to the vmlinux ELF. It will be stripped > out of the final images, but will remain in the debuginfo files. So > debuggers which rely on vmlinux debuginfo can have access to the kernel > configuration, without incurring a cost to the kernel at runtime. > > The configuration is enabled whenever DEBUG_INFO=y and IKCONFIG!=y. The > added section is not large compared to debug info sizes. It won't affect > the runtime kernel at all, and this default will ensure that > distributions intending to create useful debuginfo will get this new > addition for kernel debuggers. > > Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com> > --- > include/asm-generic/vmlinux.lds.h | 3 ++- > kernel/Makefile | 2 ++ > kernel/configs-debug.S | 18 ++++++++++++++++++ > lib/Kconfig.debug | 15 +++++++++++++++ > 4 files changed, 37 insertions(+), 1 deletion(-) > create mode 100644 kernel/configs-debug.S For asm-generic: Acked-by: Arnd Bergmann <arnd@arndb.de> ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3 1/1] kernel/config: Introduce CONFIG_DEBUG_INFO_IKCONFIG 2023-10-27 17:17 ` [PATCH v3 1/1] kernel/config: " Stephen Brennan 2023-10-27 18:20 ` Arnd Bergmann @ 2023-11-01 19:12 ` Luis Chamberlain 1 sibling, 0 replies; 4+ messages in thread From: Luis Chamberlain @ 2023-11-01 19:12 UTC (permalink / raw) To: Stephen Brennan Cc: Arnd Bergmann, linux-arch, linux-kernel, linux-debuggers, Mike Christie, Geert Uytterhoeven, Christian Brauner (Microsoft), Petr Mladek, Marco Elver, Randy Dunlap, Douglas Anderson, Maninder Singh, Nick Desaulniers, Zhen Lei, Kees Cook, Zhaoyang Huang, Andrew Morton, Sami Tolvanen On Fri, Oct 27, 2023 at 10:17:56AM -0700, Stephen Brennan wrote: > The option CONFIG_IKCONFIG allows the gzip compressed kernel > configuration to be included into vmlinux or a module. In these cases, > debuggers can access the config data and use it to adjust their behavior > according to the configuration. However, distributions rarely enable > this, likely because it uses a fair bit of kernel memory which cannot be > swapped out. > > This means that in practice, the kernel configuration is rarely > available to debuggers. > > So, introduce an alternative, CONFIG_DEBUG_INFO_IKCONFIG. This strategy, > which is only available if IKCONFIG is not already built-in, adds a > section ".debug_linux_ikconfig", to the vmlinux ELF. It will be stripped > out of the final images, but will remain in the debuginfo files. So > debuggers which rely on vmlinux debuginfo can have access to the kernel > configuration, without incurring a cost to the kernel at runtime. > > The configuration is enabled whenever DEBUG_INFO=y and IKCONFIG!=y. The > added section is not large compared to debug info sizes. It won't affect > the runtime kernel at all, and this default will ensure that > distributions intending to create useful debuginfo will get this new > addition for kernel debuggers. > > Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org> Although this begs to support something other than old gz in the future. Luis ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-11-01 19:13 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-10-27 17:17 [PATCH v3 0/1] Introduce CONFIG_DEBUG_INFO_IKCONFIG Stephen Brennan 2023-10-27 17:17 ` [PATCH v3 1/1] kernel/config: " Stephen Brennan 2023-10-27 18:20 ` Arnd Bergmann 2023-11-01 19:12 ` Luis Chamberlain
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox