Add generated modalias to modules.builtin.modinfo
Subsystems (8)
v7 cover Add generated modalias to modules.builtin.modinfo
The modules.builtin.modinfo file is used by userspace (kmod to be specific) to get information about builtin modules. Among other information about the module, information about module aliases is stored. This is very important to determine that a particular modalias will be handled by a module that is inside the kernel.
There are several mechanisms for creating modalias for modules:
The first is to explicitly specify the MODULE_ALIAS of the macro. In this case, the aliases go into the '.modinfo' section of the module if it is compiled separately or into vmlinux.o if it is builtin into the kernel.
The second is the use of MODULE_DEVICE_TABLE followed by the use of the modpost utility. In this case, vmlinux.o no longer has this information and does not get it into modules.builtin.modinfo.
For example:
$ modinfo pci:v00008086d0000A36Dsv00001043sd00008694bc0Csc03i30 modinfo: ERROR: Module pci:v00008086d0000A36Dsv00001043sd00008694bc0Csc03i30 not found.
$ modinfo xhci_pci name: xhci_pci filename: (builtin) license: GPL file: drivers/usb/host/xhci-pci description: xHCI PCI Host Controller Driver
The builtin module is missing alias "pci:v*d*sv*sd*bc0Csc03i30*" which will be generated by modpost if the module is built separately.
To fix this it is necessary to add the generated by modpost modalias to modules.builtin.modinfo. Fortunately modpost already generates .vmlinux.export.c for exported symbols. It is possible to add .modinfo for builtin modules and modify the build system so that .modinfo section is extracted from the intermediate vmlinux after modpost is executed.
---
Notes:
- v7:
* Reorder patches to avoid unnecessary linker warnings on s390.
* Drop the patch for pinctrl since it's already been applied.
* v6: https://lore.kernel.org/all/[email protected]/
- v6:
* Rebase to v6.17-rc1-16-g8742b2d8935f to pick up the fixes made by Masahiro Yamada.
* Fix an issue on i386 configs caused by the use of string_32.h.
* v5: https://lore.kernel.org/all/[email protected]/
- v5:
* Rebase to v6.16-rc6-281-gf4a40a4282f4 to pick up the fixes made by Masahiro Yamada.
* Attempt to fix linker warning on s390.
* Fix typo in pinctrl/meson found by the kernel test robot.
* v4: https://lore.kernel.org/all/[email protected]/
- v4:
* Rework the patchset based on top of Masahiro Yamada's patches.
* Add removal of unnecessary __mod_device_table__* symbols to avoid symbol table growth in vmlinux.
* rust code takes into account changes in __mod_device_table__*.
* v3: https://lore.kernel.org/all/[email protected]/
- v3:
* Add Reviewed-by tag to patches from Petr Pavlu.
* Rebase to v6.15.
* v2: https://lore.kernel.org/all/[email protected]/
- v2:
* Drop patch for mfd because it was already applied and is in linux-next.
* The generation of aliases for builtin modules has been redone as suggested by Masahiro Yamada.
* Rebase to v6.15-rc5-136-g9c69f8884904
* v1: https://lore.kernel.org/all/[email protected]/
Alexey Gladkov (5):
s390: vmlinux.lds.S: Reorder sections
scsi: Always define blogic_pci_tbl structure
modpost: Add modname to mod_device_table alias
modpost: Create modalias for builtin modules
kbuild: vmlinux.unstripped should always depend on .vmlinux.export.o
Masahiro Yamada (3):
kbuild: always create intermediate vmlinux.unstripped
kbuild: keep .modinfo section in vmlinux.unstripped
kbuild: extract modules.builtin.modinfo from vmlinux.unstripped
arch/s390/kernel/vmlinux.lds.S | 10 ++-- drivers/scsi/BusLogic.c | 4 +- include/asm-generic/vmlinux.lds.h | 2 +- include/linux/module.h | 18 ++++++-- rust/kernel/device_id.rs | 8 ++-- scripts/Makefile.vmlinux | 77 ++++++++++++++++++++----------- scripts/Makefile.vmlinux_o | 26 +---------- scripts/link-vmlinux.sh | 5 +- scripts/mksysmap | 6 +++ scripts/mod/file2alias.c | 34 ++++++++++++-- scripts/mod/modpost.c | 15 ++++++ scripts/mod/modpost.h | 2 + 12 files changed, 129 insertions(+), 78 deletions(-)
Signature · 1 line
2.50.1
PATCH v7 1/8 s390: vmlinux.lds.S: Reorder sections
In the upcoming changes, the ELF_DETAILS macro will be extended with the ".modinfo" section, which will cause an error:
Quoted 3 lines
Quoted 3 lines
s390x-linux-ld: .tmp_vmlinux1: warning: allocated section `.modinfo' not in segment
s390x-linux-ld: .tmp_vmlinux2: warning: allocated section `.modinfo' not in segment
s390x-linux-ld: vmlinux.unstripped: warning: allocated section `.modinfo' not in segment
This happens because the .vmlinux.info use :NONE to override the default segment and tell the linker to not put the section in any segment at all.
To avoid this, we need to change the sections order that will be placed in the default segment.
--- arch/s390/kernel/vmlinux.lds.S | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
arch/s390/kernel/vmlinux.lds.S +5 -5
@@ -209,6 +209,11 @@ SECTIONS . = ALIGN(PAGE_SIZE); _end = . ; + /* Debugging sections. */ + STABS_DEBUG + DWARF_DEBUG + ELF_DETAILS + /* * uncompressed image info used by the decompressor * it should match struct vmlinux_info
@@ -239,11 +244,6 @@ SECTIONS #endif } :NONE - /* Debugging sections. */ - STABS_DEBUG - DWARF_DEBUG - ELF_DETAILS - /* * Make sure that the .got.plt is either completely empty or it * contains only the three reserved double words.
Signature · 1 line
2.50.1
PATCH v7 2/8 kbuild: always create intermediate vmlinux.unstripped
In reply to Alexey GladkovFrom: Masahiro Yamada <[email protected]>
Generate the intermediate vmlinux.unstripped regardless of CONFIG_ARCH_VMLINUX_NEEDS_RELOCS.
If CONFIG_ARCH_VMLINUX_NEEDS_RELOCS is unset, vmlinux.unstripped and vmlinux are identiacal.
This simplifies the build rule, and allows to strip more sections by adding them to remove-section-y.
--- scripts/Makefile.vmlinux | 45 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 23 deletions(-)
scripts/Makefile.vmlinux +22 -23
@@ -9,20 +9,6 @@ include $(srctree)/scripts/Makefile.lib targets := -ifdef CONFIG_ARCH_VMLINUX_NEEDS_RELOCS -vmlinux-final := vmlinux.unstripped - -quiet_cmd_strip_relocs = RSTRIP $@ - cmd_strip_relocs = $(OBJCOPY) --remove-section='.rel*' --remove-section=!'.rel*.dyn' $< $@ - -vmlinux: $(vmlinux-final) FORCE - $(call if_changed,strip_relocs) - -targets += vmlinux -else -vmlinux-final := vmlinux -endif - %.o: %.c FORCE $(call if_changed_rule,cc_o_c)
@@ -61,19 +47,19 @@ targets += .builtin-dtbs-list ifdef CONFIG_GENERIC_BUILTIN_DTB targets += .builtin-dtbs.S .builtin-dtbs.o -$(vmlinux-final): .builtin-dtbs.o +vmlinux.unstripped: .builtin-dtbs.o endif -# vmlinux +# vmlinux.unstripped # --------------------------------------------------------------------------- ifdef CONFIG_MODULES targets += .vmlinux.export.o -$(vmlinux-final): .vmlinux.export.o +vmlinux.unstripped: .vmlinux.export.o endif ifdef CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX -$(vmlinux-final): arch/$(SRCARCH)/tools/vmlinux.arch.o +vmlinux.unstripped: arch/$(SRCARCH)/tools/vmlinux.arch.o arch/$(SRCARCH)/tools/vmlinux.arch.o: vmlinux.o FORCE $(Q)$(MAKE) $(build)=arch/$(SRCARCH)/tools $@
@@ -86,17 +72,30 @@ cmd_link_vmlinux = \ $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)" "$@"; \ $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) -targets += $(vmlinux-final) -$(vmlinux-final): scripts/link-vmlinux.sh vmlinux.o $(KBUILD_LDS) FORCE +targets += vmlinux.unstripped +vmlinux.unstripped: scripts/link-vmlinux.sh vmlinux.o $(KBUILD_LDS) FORCE +$(call if_changed_dep,link_vmlinux) ifdef CONFIG_DEBUG_INFO_BTF -$(vmlinux-final): $(RESOLVE_BTFIDS) +vmlinux.unstripped: $(RESOLVE_BTFIDS) endif ifdef CONFIG_BUILDTIME_TABLE_SORT -$(vmlinux-final): scripts/sorttable +vmlinux.unstripped: scripts/sorttable endif +# vmlinux +# --------------------------------------------------------------------------- + +remove-section-y := +remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' + +quiet_cmd_strip_relocs = OBJCOPY $@ + cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + +targets += vmlinux +vmlinux: vmlinux.unstripped FORCE + $(call if_changed,strip_relocs) + # modules.builtin.ranges # --------------------------------------------------------------------------- ifdef CONFIG_BUILTIN_MODULE_RANGES
@@ -110,7 +109,7 @@ modules.builtin.ranges: $(srctree)/scripts/generate_builtin_ranges.awk \ modules.builtin vmlinux.map vmlinux.o.map FORCE $(call if_changed,modules_builtin_ranges) -vmlinux.map: $(vmlinux-final) +vmlinux.map: vmlinux.unstripped @: endif
Signature · 1 line
2.50.1
Re: [PATCH v7 2/8] kbuild: always create intermediate vmlinux.unstripped
Quoted 8 lines · Alexey Gladkov
From: Masahiro Yamada <[email protected]>
Generate the intermediate vmlinux.unstripped regardless of
CONFIG_ARCH_VMLINUX_NEEDS_RELOCS.If
CONFIG_ARCH_VMLINUX_NEEDS_RELOCSis unset, vmlinux.unstripped and vmlinux are identiacal.
Quoted 7 lines
This simplifies the build rule, and allows to strip more sections by adding them to remove-section-y.
Signed-off-by Masahiro Yamada <[email protected]>--- scripts/Makefile.vmlinux | 45 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 23 deletions(-)
PATCH v7 3/8 kbuild: keep .modinfo section in vmlinux.unstripped
In reply to Alexey GladkovFrom: Masahiro Yamada <[email protected]>
Keep the .modinfo section during linking, but strip it from the final vmlinux.
Adjust scripts/mksysmap to exclude modinfo symbols from kallsyms.
This change will allow the next commit to extract the .modinfo section from the vmlinux.unstripped intermediate.
--- include/asm-generic/vmlinux.lds.h | 2 +- scripts/Makefile.vmlinux | 2 +- scripts/mksysmap | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-)
include/asm-generic/vmlinux.lds.h +1 -1
@@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG)/* Required sections not related to debugging. */ #define ELF_DETAILS \ + .modinfo : { *(.modinfo) } \ .comment 0 : { *(.comment) } \ .symtab 0 : { *(.symtab) } \ .strtab 0 : { *(.strtab) } \
@@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) *(.discard.*) \ *(.export_symbol) \ *(.no_trim_symbol) \ - *(.modinfo) \/* ld.bfd warns about .gnu.version* even when not emitted */ \ *(.gnu.version*) \
scripts/Makefile.vmlinux +1 -1
@@ -86,7 +86,7 @@ endif # vmlinux # --------------------------------------------------------------------------- -remove-section-y := +remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@
scripts/mksysmap +3 -0
@@ -79,6 +79,9 @@ / _SDA_BASE_$/d / _SDA2_BASE_$/d +# MODULE_INFO() +/ __UNIQUE_ID_modinfo[0-9]*$/d + # --------------------------------------------------------------------------- # Ignored patterns # (symbols that contain the pattern are ignored)
Signature · 1 line
2.50.1
Nicolas Schier
maintainerRe: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 67 lines · Alexey Gladkov
From: Masahiro Yamada <[email protected]>
Keep the .modinfo section during linking, but strip it from the final vmlinux.
Adjust
scripts/mksysmapto exclude modinfo symbols from kallsyms.This change will allow the next commit to extract the .modinfo section from the vmlinux.unstripped intermediate.
Signed-off-by Masahiro Yamada <[email protected]>--- include/asm-generic/vmlinux.lds.h | 2 +- scripts/Makefile.vmlinux | 2 +- scripts/mksysmap | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-)include/asm-generic/vmlinux.lds.h +1
-1@@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG)/* Required sections not related to debugging. */ #define ELF_DETAILS \ + .modinfo : { *(.modinfo) } \ .comment 0 : { *(.comment) } \ .symtab 0 : { *(.symtab) } \ .strtab 0 : { *(.strtab) } \@@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) *(.discard.*) \ *(.export_symbol) \ *(.no_trim_symbol) \ - *(.modinfo) \/* ld.bfd warns about .gnu.version* even when not emitted */ \ *(.gnu.version*) \scripts/Makefile.vmlinux +1
-1@@ -86,7 +86,7 @@ endif # vmlinux # --------------------------------------------------------------------------- -remove-section-y := +remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@scripts/mksysmap +3
-0@@ -79,6 +79,9 @@ / _SDA_BASE_$/d / _SDA2_BASE_$/d +# MODULE_INFO() +/ __UNIQUE_ID_modinfo[0-9]*$/d + # --------------------------------------------------------------------------- # Ignored patterns # (symbols that contain the pattern are ignored)Signature · 1 line
2.50.1
Hi Alexey,
with this patch applied, I still get a warning from objcpy as Masahiro and Stephen wrote [1,2]
SORTTAB vmlinux.unstripped
+ sorttable vmlinux.unstripped
+ nm -S vmlinux.unstripped
+ ./scripts/sorttable -s .tmp_vmlinux.nm-sort vmlinux.unstripped
+ is_enabled CONFIG_KALLSYMS
+ grep -q ^CONFIG_KALLSYMS=y include/config/auto.conf
+ cmp -s System.map .tmp_vmlinux2.syms
+ echo vmlinux.unstripped: ../scripts/link-vmlinux.sh
# OBJCOPY vmlinux
objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux
objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional?
(arm64, allnoconfig)
Kind regards,
Nicolas
[1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/
[2]: https://lore.kernel.org/lkml/[email protected]/
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 86 lines · Nicolas Schier
Quoted 67 lines · Alexey Gladkov
From: Masahiro Yamada <[email protected]>
Keep the .modinfo section during linking, but strip it from the final vmlinux.
Adjust
scripts/mksysmapto exclude modinfo symbols from kallsyms.This change will allow the next commit to extract the .modinfo section from the vmlinux.unstripped intermediate.
Signed-off-by Masahiro Yamada <[email protected]>--- include/asm-generic/vmlinux.lds.h | 2 +- scripts/Makefile.vmlinux | 2 +- scripts/mksysmap | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-)include/asm-generic/vmlinux.lds.h +1
-1@@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG)/* Required sections not related to debugging. */ #define ELF_DETAILS \ + .modinfo : { *(.modinfo) } \ .comment 0 : { *(.comment) } \ .symtab 0 : { *(.symtab) } \ .strtab 0 : { *(.strtab) } \@@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) *(.discard.*) \ *(.export_symbol) \ *(.no_trim_symbol) \ - *(.modinfo) \/* ld.bfd warns about .gnu.version* even when not emitted */ \ *(.gnu.version*) \scripts/Makefile.vmlinux +1
-1@@ -86,7 +86,7 @@ endif # vmlinux # --------------------------------------------------------------------------- -remove-section-y := +remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@scripts/mksysmap +3
-0@@ -79,6 +79,9 @@ / _SDA_BASE_$/d / _SDA2_BASE_$/d +# MODULE_INFO() +/ __UNIQUE_ID_modinfo[0-9]*$/d + # --------------------------------------------------------------------------- # Ignored patterns # (symbols that contain the pattern are ignored)Signature · 1 line
2.50.1Hi Alexey,
with this patch applied, I still get a warning from objcpy as Masahiro and Stephen wrote [1,2]
SORTTAB vmlinux.unstripped
+ sorttable vmlinux.unstripped
+ nm -S vmlinux.unstripped
+./scripts/sorttable-s .tmp_vmlinux.nm-sort vmlinux.unstripped
+is_enabledCONFIG_KALLSYMS
+ grep -q ^CONFIG_KALLSYMS=yinclude/config/auto.conf
+ cmp -s System.map .tmp_vmlinux2.syms
+ echo vmlinux.unstripped:../scripts/link-vmlinux.sh
# OBJCOPY vmlinux
objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux
objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional?
Quoted 9 lines
(arm64, allnoconfig)
Kind regards,
Nicolas[1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/
[2]: https://lore.kernel.org/lkml/[email protected]/
Hm. I missed that. I need to investigate how to fix this. Nothing comes to mind right now.
Signature · 1 line
Rgrds, legion
Nicolas Schier
maintainerRe: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 93 lines · Alexey Gladkov
Quoted 92 lines · Nicolas Schier
Quoted 67 lines · Alexey Gladkov
From: Masahiro Yamada <[email protected]>
Keep the .modinfo section during linking, but strip it from the final vmlinux.
Adjust
scripts/mksysmapto exclude modinfo symbols from kallsyms.This change will allow the next commit to extract the .modinfo section from the vmlinux.unstripped intermediate.
Signed-off-by Masahiro Yamada <[email protected]>--- include/asm-generic/vmlinux.lds.h | 2 +- scripts/Makefile.vmlinux | 2 +- scripts/mksysmap | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-)include/asm-generic/vmlinux.lds.h +1
-1@@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG)/* Required sections not related to debugging. */ #define ELF_DETAILS \ + .modinfo : { *(.modinfo) } \ .comment 0 : { *(.comment) } \ .symtab 0 : { *(.symtab) } \ .strtab 0 : { *(.strtab) } \@@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) *(.discard.*) \ *(.export_symbol) \ *(.no_trim_symbol) \ - *(.modinfo) \/* ld.bfd warns about .gnu.version* even when not emitted */ \ *(.gnu.version*) \scripts/Makefile.vmlinux +1
-1@@ -86,7 +86,7 @@ endif # vmlinux # --------------------------------------------------------------------------- -remove-section-y := +remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@scripts/mksysmap +3
-0@@ -79,6 +79,9 @@ / _SDA_BASE_$/d / _SDA2_BASE_$/d +# MODULE_INFO() +/ __UNIQUE_ID_modinfo[0-9]*$/d + # --------------------------------------------------------------------------- # Ignored patterns # (symbols that contain the pattern are ignored)Signature · 1 line
2.50.1Hi Alexey,
with this patch applied, I still get a warning from objcpy as Masahiro and Stephen wrote [1,2]
SORTTAB vmlinux.unstripped
+ sorttable vmlinux.unstripped
+ nm -S vmlinux.unstripped
+./scripts/sorttable-s .tmp_vmlinux.nm-sort vmlinux.unstripped
+is_enabledCONFIG_KALLSYMS
+ grep -q ^CONFIG_KALLSYMS=yinclude/config/auto.conf
+ cmp -s System.map .tmp_vmlinux2.syms
+ echo vmlinux.unstripped:../scripts/link-vmlinux.sh
# OBJCOPY vmlinux
objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux
objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional?(arm64, allnoconfig)
Kind regards,
Nicolas
Quoted 6 lines
Quoted 3 lines
[1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/
[2]: https://lore.kernel.org/lkml/[email protected]/Hm. I missed that. I need to investigate how to fix this. Nothing comes to mind right now.
Same here. Only thing I could find until now is
where '2>/dev/null' is appended exactly to prevent this very warning. But for me, it doesn't feel good doing that when stripping to vmlinux.
Signature · 1 line
Nicolas
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 101 lines · Nicolas Schier
Quoted 93 lines · Alexey Gladkov
Quoted 92 lines · Nicolas Schier
Quoted 67 lines · Alexey Gladkov
From: Masahiro Yamada <[email protected]>
Keep the .modinfo section during linking, but strip it from the final vmlinux.
Adjust
scripts/mksysmapto exclude modinfo symbols from kallsyms.This change will allow the next commit to extract the .modinfo section from the vmlinux.unstripped intermediate.
Signed-off-by Masahiro Yamada <[email protected]>--- include/asm-generic/vmlinux.lds.h | 2 +- scripts/Makefile.vmlinux | 2 +- scripts/mksysmap | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-)include/asm-generic/vmlinux.lds.h +1
-1@@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG)/* Required sections not related to debugging. */ #define ELF_DETAILS \ + .modinfo : { *(.modinfo) } \ .comment 0 : { *(.comment) } \ .symtab 0 : { *(.symtab) } \ .strtab 0 : { *(.strtab) } \@@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) *(.discard.*) \ *(.export_symbol) \ *(.no_trim_symbol) \ - *(.modinfo) \/* ld.bfd warns about .gnu.version* even when not emitted */ \ *(.gnu.version*) \scripts/Makefile.vmlinux +1
-1@@ -86,7 +86,7 @@ endif # vmlinux # --------------------------------------------------------------------------- -remove-section-y := +remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@scripts/mksysmap +3
-0@@ -79,6 +79,9 @@ / _SDA_BASE_$/d / _SDA2_BASE_$/d +# MODULE_INFO() +/ __UNIQUE_ID_modinfo[0-9]*$/d + # --------------------------------------------------------------------------- # Ignored patterns # (symbols that contain the pattern are ignored)Signature · 1 line
2.50.1Hi Alexey,
with this patch applied, I still get a warning from objcpy as Masahiro and Stephen wrote [1,2]
SORTTAB vmlinux.unstripped
+ sorttable vmlinux.unstripped
+ nm -S vmlinux.unstripped
+./scripts/sorttable-s .tmp_vmlinux.nm-sort vmlinux.unstripped
+is_enabledCONFIG_KALLSYMS
+ grep -q ^CONFIG_KALLSYMS=yinclude/config/auto.conf
+ cmp -s System.map .tmp_vmlinux2.syms
+ echo vmlinux.unstripped:../scripts/link-vmlinux.sh
# OBJCOPY vmlinux
objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux
objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional?(arm64, allnoconfig)
Kind regards,
NicolasQuoted 6 lines
Quoted 3 lines
[1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/
[2]: https://lore.kernel.org/lkml/[email protected]/Hm. I missed that. I need to investigate how to fix this. Nothing comes to mind right now.
Quoted 6 lines
Same here. Only thing I could find until now is
where '2>/dev/null' is appended exactly to prevent this very warning. But for me, it doesn't feel good doing that when stripping to vmlinux.
Yes, that's not a very good approach. It will hide other errors that will definitely need to be seen. I think the commit you mentioned is actually incorrect. I think there should be a different solution.
I think in the case of .modinfo, we can change the flag in the section since we are going to delete it anyway.
scripts/Makefile.vmlinux +2 -1
@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $< $@ targets += vmlinux
Signature · 1 line
Rgrds, legion
Nicolas Schier
maintainerRe: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 121 lines · Alexey Gladkov
Quoted 101 lines · Nicolas Schier
Quoted 93 lines · Alexey Gladkov
Quoted 92 lines · Nicolas Schier
Quoted 67 lines · Alexey Gladkov
From: Masahiro Yamada <[email protected]>
Keep the .modinfo section during linking, but strip it from the final vmlinux.
Adjust
scripts/mksysmapto exclude modinfo symbols from kallsyms.This change will allow the next commit to extract the .modinfo section from the vmlinux.unstripped intermediate.
Signed-off-by Masahiro Yamada <[email protected]>--- include/asm-generic/vmlinux.lds.h | 2 +- scripts/Makefile.vmlinux | 2 +- scripts/mksysmap | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-)include/asm-generic/vmlinux.lds.h +1
-1@@ -831,6 +831,7 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG)/* Required sections not related to debugging. */ #define ELF_DETAILS \ + .modinfo : { *(.modinfo) } \ .comment 0 : { *(.comment) } \ .symtab 0 : { *(.symtab) } \ .strtab 0 : { *(.strtab) } \@@ -1044,7 +1045,6 @@ defined(CONFIG_AUTOFDO_CLANG) || defined(CONFIG_PROPELLER_CLANG) *(.discard.*) \ *(.export_symbol) \ *(.no_trim_symbol) \ - *(.modinfo) \/* ld.bfd warns about .gnu.version* even when not emitted */ \ *(.gnu.version*) \scripts/Makefile.vmlinux +1
-1@@ -86,7 +86,7 @@ endif # vmlinux # --------------------------------------------------------------------------- -remove-section-y := +remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@scripts/mksysmap +3
-0@@ -79,6 +79,9 @@ / _SDA_BASE_$/d / _SDA2_BASE_$/d +# MODULE_INFO() +/ __UNIQUE_ID_modinfo[0-9]*$/d + # --------------------------------------------------------------------------- # Ignored patterns # (symbols that contain the pattern are ignored)Signature · 1 line
2.50.1Hi Alexey,
with this patch applied, I still get a warning from objcpy as Masahiro and Stephen wrote [1,2]
SORTTAB vmlinux.unstripped
+ sorttable vmlinux.unstripped
+ nm -S vmlinux.unstripped
+./scripts/sorttable-s .tmp_vmlinux.nm-sort vmlinux.unstripped
+is_enabledCONFIG_KALLSYMS
+ grep -q ^CONFIG_KALLSYMS=yinclude/config/auto.conf
+ cmp -s System.map .tmp_vmlinux2.syms
+ echo vmlinux.unstripped:../scripts/link-vmlinux.sh
# OBJCOPY vmlinux
objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux
objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional?(arm64, allnoconfig)
Kind regards,
NicolasQuoted 6 lines
Quoted 3 lines
[1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/
[2]: https://lore.kernel.org/lkml/[email protected]/Hm. I missed that. I need to investigate how to fix this. Nothing comes to mind right now.
Quoted 6 lines
Same here. Only thing I could find until now is
where '2>/dev/null' is appended exactly to prevent this very warning. But for me, it doesn't feel good doing that when stripping to vmlinux.
Yes, that's not a very good approach. It will hide other errors that will definitely need to be seen. I think the commit you mentioned is actually incorrect. I think there should be a different solution.
I think in the case of .modinfo, we can change the flag in the section since we are going to delete it anyway.
scripts/Makefile.vmlinux +0
-0
scripts/Makefile.vmlinux remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' · line 94
Quoted 9 lines
scripts/Makefile.vmlinux +2
-1@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $< $@ targets += vmlinux
Ah, great! I thought we had to fiddle around with linker scripts et al. I needed to use an intermediate file:
scripts/Makefile.vmlinux +4 -1
@@ -90,6 +90,9 @@ remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + cmd_strip_relocs = set -e; \ + trap 'rm $<.noload' EXIT HUP INT; \ + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ targets += vmlinux
Kind regards,
Nicolas
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 67 lines · Nicolas Schier
Quoted 49 lines
Quoted 30 lines
Quoted 23 lines
Quoted 23 lines
Hi Alexey,
with this patch applied, I still get a warning from objcpy as Masahiro and Stephen wrote [1,2]
SORTTAB vmlinux.unstripped
+ sorttable vmlinux.unstripped
+ nm -S vmlinux.unstripped
+./scripts/sorttable-s .tmp_vmlinux.nm-sort vmlinux.unstripped
+is_enabledCONFIG_KALLSYMS
+ grep -q ^CONFIG_KALLSYMS=yinclude/config/auto.conf
+ cmp -s System.map .tmp_vmlinux2.syms
+ echo vmlinux.unstripped:../scripts/link-vmlinux.sh
# OBJCOPY vmlinux
objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux
objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional?(arm64, allnoconfig)
Kind regards,
NicolasQuoted 6 lines
Quoted 3 lines
[1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/
[2]: https://lore.kernel.org/lkml/[email protected]/Hm. I missed that. I need to investigate how to fix this. Nothing comes to mind right now.
Quoted 6 lines
Same here. Only thing I could find until now is
where '2>/dev/null' is appended exactly to prevent this very warning. But for me, it doesn't feel good doing that when stripping to vmlinux.
Yes, that's not a very good approach. It will hide other errors that will definitely need to be seen. I think the commit you mentioned is actually incorrect. I think there should be a different solution.
I think in the case of .modinfo, we can change the flag in the section since we are going to delete it anyway.
scripts/Makefile.vmlinux +0
-0scripts/Makefile.vmlinux remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' · line 94
Quoted 9 lines
scripts/Makefile.vmlinux +2
-1@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $< $@ targets += vmlinuxAh, great! I thought we had to fiddle around with linker scripts et al. I needed to use an intermediate file:
scripts/Makefile.vmlinux +0
-0
scripts/Makefile.vmlinux remove-section-y := .modinfo · line 98
Quoted 10 lines
scripts/Makefile.vmlinux +4
-1@@ -90,6 +90,9 @@ remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + cmd_strip_relocs = set -e; \ + trap 'rm $<.noload' EXIT HUP INT; \ + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ targets += vmlinux
according to man-page:
If you do not specify outfile, objcopy creates a temporary file and destructively renames the result with the name of infile.
That is true even in freebsd:
https://man.freebsd.org/cgi/man.cgi?query=objcopy
Do you want to support any other objcopy implementations ?
Signature · 1 line
Rgrds, legion
Nicolas Schier
maintainerRe: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 81 lines · Alexey Gladkov
Quoted 67 lines · Nicolas Schier
Quoted 49 lines
Quoted 30 lines
Quoted 23 lines
Quoted 23 lines
Hi Alexey,
with this patch applied, I still get a warning from objcpy as Masahiro and Stephen wrote [1,2]
SORTTAB vmlinux.unstripped
+ sorttable vmlinux.unstripped
+ nm -S vmlinux.unstripped
+./scripts/sorttable-s .tmp_vmlinux.nm-sort vmlinux.unstripped
+is_enabledCONFIG_KALLSYMS
+ grep -q ^CONFIG_KALLSYMS=yinclude/config/auto.conf
+ cmp -s System.map .tmp_vmlinux2.syms
+ echo vmlinux.unstripped:../scripts/link-vmlinux.sh
# OBJCOPY vmlinux
objcopy --remove-section=.modinfo vmlinux.unstripped vmlinux
objcopy: vmlinux.unstripped: warning: empty loadable segment detected at vaddr=0xffff8000807a0000, is this intentional?(arm64, allnoconfig)
Kind regards,
NicolasQuoted 6 lines
Quoted 3 lines
[1]: https://lore.kernel.org/linux-kbuild/CAK7LNAR-gD2H6Kk-rZjo0R3weTHCGTm0a=u2tRH1WWW6Sx6=RQ@mail.gmail.com/
[2]: https://lore.kernel.org/lkml/[email protected]/Hm. I missed that. I need to investigate how to fix this. Nothing comes to mind right now.
Quoted 6 lines
Same here. Only thing I could find until now is
where '2>/dev/null' is appended exactly to prevent this very warning. But for me, it doesn't feel good doing that when stripping to vmlinux.
Yes, that's not a very good approach. It will hide other errors that will definitely need to be seen. I think the commit you mentioned is actually incorrect. I think there should be a different solution.
I think in the case of .modinfo, we can change the flag in the section since we are going to delete it anyway.
scripts/Makefile.vmlinux +0
-0scripts/Makefile.vmlinux remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' · line 94
Quoted 9 lines
scripts/Makefile.vmlinux +2
-1@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $< $@ targets += vmlinuxAh, great! I thought we had to fiddle around with linker scripts et al. I needed to use an intermediate file:
scripts/Makefile.vmlinux +0
-0scripts/Makefile.vmlinux remove-section-y := .modinfo · line 98
Quoted 10 lines
scripts/Makefile.vmlinux +4
-1@@ -90,6 +90,9 @@ remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + cmd_strip_relocs = set -e; \ + trap 'rm $<.noload' EXIT HUP INT; \ + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ targets += vmlinuxaccording to man-page:
Quoted 8 lines
If you do not specify outfile, objcopy creates a temporary file and destructively renames the result with the name of infile.
That is true even in freebsd:
https://man.freebsd.org/cgi/man.cgi?query=objcopy
Do you want to support any other objcopy implementations ?
yeah, it's actually because I dislike modifying vmlinux.unstripped in the vmlinux rule.
But it may be that Nathan does not see it this way.
Signature · 1 line
Nicolas
Nathan Chancellor
maintainerRe: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 4 lines · Nicolas Schier
yeah, it's actually because I dislike modifying vmlinux.unstripped in the vmlinux rule.
But it may be that Nathan does not see it this way.
Yeah, I would agree that it is good form to avoid modifying the inputs of a rule.
This warning is pretty annoying since it is intentional but we do not have great tools to hide just this one instance it seems... This is probably worth a comment.
It would be nice if this section could be marked as NOLOAD from the beginning but that will mess with extracting .modinfo via objcopy from my brief testing.
Cheers,
Nathan
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 9 lines · Nathan Chancellor
Quoted 4 lines · Nicolas Schier
yeah, it's actually because I dislike modifying vmlinux.unstripped in the vmlinux rule.
But it may be that Nathan does not see it this way.
Yeah, I would agree that it is good form to avoid modifying the inputs of a rule.
Quoted 8 lines
This warning is pretty annoying since it is intentional but we do not have great tools to hide just this one instance it seems... This is probably worth a comment.
It would be nice if this section could be marked as NOLOAD from the beginning but that will mess with extracting .modinfo via objcopy from my brief testing.
Yeah, I was thinking about that too.
Ok, I will make a new version of the patchset with fixes.
Signature · 1 line
Rgrds, legion
Nicolas Schier
maintainerRe: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
In reply to Nicolas SchierQuoted 1 line · Nicolas Schier
On Tue, Sep 16, 2025 at 01:30:20PM +0200, Alexey Gladkov wrote:
...
Quoted 26 lines
Quoted 8 lines
I think in the case of .modinfo, we can change the flag in the section since we are going to delete it anyway.
scripts/Makefile.vmlinux +0
-0scripts/Makefile.vmlinux remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' · line 94
Quoted 9 lines
scripts/Makefile.vmlinux +2
-1@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $< $@ targets += vmlinuxAh, great! I thought we had to fiddle around with linker scripts et al. I needed to use an intermediate file:
scripts/Makefile.vmlinux +0
-0
scripts/Makefile.vmlinux remove-section-y := .modinfo · line 98
Quoted 10 lines
scripts/Makefile.vmlinux +4
-1@@ -90,6 +90,9 @@ remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + cmd_strip_relocs = set -e; \ + trap 'rm $<.noload' EXIT HUP INT; \ + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ targets += vmlinux
I'd like to suggest another version closer to yours, as mine has several flaws:
scripts/Makefile.vmlinux +2 -1
@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $@; \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $@ targets += vmlinux
Rationale (mainly for myself to not walk into that trap too often again):
* Use ';' instead of '&&' as 'cmd_' is evaluated in a 'set -e'
environment ('cmd') and thus '&&' may hide a possible error exit
code.* Create 'vmlinux' already with the first objcopy and let the second one modify it in order to not need a temporary file; iff one or the other objcopy exists with an error exit code, the 'set -e + trap' ('delete-on-interrupt') shell will remove a possibly existing vmlinux file.
Kind regards,
Nicolas
Re: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 59 lines · Nicolas Schier
Quoted 1 line · Nicolas Schier
On Tue, Sep 16, 2025 at 01:30:20PM +0200, Alexey Gladkov wrote:
...
Quoted 26 lines
Quoted 8 lines
I think in the case of .modinfo, we can change the flag in the section since we are going to delete it anyway.
scripts/Makefile.vmlinux +0
-0scripts/Makefile.vmlinux remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' · line 94
Quoted 9 lines
scripts/Makefile.vmlinux +2
-1@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $< $@ targets += vmlinuxAh, great! I thought we had to fiddle around with linker scripts et al. I needed to use an intermediate file:
scripts/Makefile.vmlinux +0
-0scripts/Makefile.vmlinux remove-section-y := .modinfo · line 98
Quoted 10 lines
scripts/Makefile.vmlinux +4
-1@@ -90,6 +90,9 @@ remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + cmd_strip_relocs = set -e; \ + trap 'rm $<.noload' EXIT HUP INT; \ + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ targets += vmlinuxI'd like to suggest another version closer to yours, as mine has several flaws:
scripts/Makefile.vmlinux +2
-1@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $@; \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $@ targets += vmlinux
Quoted 5 lines
Rationale (mainly for myself to not walk into that trap too often again):
* Use ';' instead of '&&' as '
cmd_' is evaluated in a 'set -e'environment ('cmd') and thus '&&' may hide a possible error exit code.
No, it can't hide exit code. The exit code will be correct even if ‘set -e’ is not used.
$ (exit 0) && (exit 2) && (exit 3); echo $? 2
Actually ‘&&’ is protection against the absence of ‘set -e’.
Quoted 5 lines
* Create 'vmlinux' already with the first objcopy and let the second one modify it in order to not need a temporary file; iff one or the other objcopy exists with an error exit code, the 'set -e + trap' ('delete-on-interrupt') shell will remove a possibly existing vmlinux file.
That makes totally sense. This will avoid a temporary file. I will use it in the new version.
Signature · 1 line
Rgrds, legion
Nicolas Schier
maintainerRe: [PATCH v7 3/8] kbuild: keep .modinfo section in vmlinux.unstripped
Quoted 69 lines · Alexey Gladkov
Quoted 59 lines · Nicolas Schier
Quoted 1 line · Nicolas Schier
On Tue, Sep 16, 2025 at 01:30:20PM +0200, Alexey Gladkov wrote:
...
Quoted 26 lines
Quoted 8 lines
I think in the case of .modinfo, we can change the flag in the section since we are going to delete it anyway.
scripts/Makefile.vmlinux +0
-0scripts/Makefile.vmlinux remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' · line 94
Quoted 9 lines
scripts/Makefile.vmlinux +2
-1@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $< $@ targets += vmlinuxAh, great! I thought we had to fiddle around with linker scripts et al. I needed to use an intermediate file:
scripts/Makefile.vmlinux +0
-0scripts/Makefile.vmlinux remove-section-y := .modinfo · line 98
Quoted 10 lines
scripts/Makefile.vmlinux +4
-1@@ -90,6 +90,9 @@ remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + cmd_strip_relocs = set -e; \ + trap 'rm $<.noload' EXIT HUP INT; \ + $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $<.noload && \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $<.noload $@ targets += vmlinuxI'd like to suggest another version closer to yours, as mine has several flaws:
scripts/Makefile.vmlinux +2
-1@@ -87,7 +87,8 @@ remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' remove-symbols := -w --strip-symbol='__mod_device_table__*' quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + cmd_strip_relocs = $(OBJCOPY) $(patsubst %,--set-section-flags %=noload,$(remove-section-y)) $< $@; \ + $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ $(remove-symbols) $@ targets += vmlinuxQuoted 5 lines
Rationale (mainly for myself to not walk into that trap too often again):
* Use ';' instead of '&&' as '
cmd_' is evaluated in a 'set -e'environment ('cmd') and thus '&&' may hide a possible error exit code.No, it can't hide exit code. The exit code will be correct even if ‘set -e’ is not used.
Quoted 4 lines
$ (exit 0) && (exit 2) && (exit 3); echo $? 2Actually ‘&&’ is protection against the absence of ‘set -e’.
That is correct for such a simple command sequence.
Putting a compound 'command1 && command2' sequence in a cmd_* macro leads to a mixture of non-comound and compound statements:
( set -e; (exit 0) && (exit 2) && (exit 3); printf 'bye\n' ); echo $?
thus we have a case as described in [1, "-e"], so that the exit code 2 gets lost due to the following successful 'printf'.
[1]: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_26
Quoted 13 lines
Quoted 6 lines
* Create 'vmlinux' already with the first objcopy and let the second one modify it in order to not need a temporary file; iff one or the other objcopy exists with an error exit code, the 'set -e + trap' ('delete-on-interrupt') shell will remove a possibly existing vmlinux file.
That makes totally sense. This will avoid a temporary file. I will use it in the new version.
Signature · 1 line
Rgrds, legion
Signature · 1 line
Nicolas
PATCH v7 4/8 kbuild: extract modules.builtin.modinfo from vmlinux.unstripped
In reply to Alexey GladkovFrom: Masahiro Yamada <[email protected]>
Currently, we assume all the data for modules.builtin.modinfo are available in vmlinux.o.
This makes it impossible for modpost, which is invoked after vmlinux.o, to add additional module info.
This commit moves the modules.builtin.modinfo rule after modpost.
--- scripts/Makefile.vmlinux | 26 ++++++++++++++++++++++++++ scripts/Makefile.vmlinux_o | 26 +------------------------- 2 files changed, 27 insertions(+), 25 deletions(-)
scripts/Makefile.vmlinux +26 -0
@@ -96,6 +96,32 @@ targets += vmlinux vmlinux: vmlinux.unstripped FORCE $(call if_changed,strip_relocs) +# modules.builtin.modinfo +# --------------------------------------------------------------------------- + +OBJCOPYFLAGS_modules.builtin.modinfo := -j .modinfo -O binary + +targets += modules.builtin.modinfo +modules.builtin.modinfo: vmlinux.unstripped FORCE + $(call if_changed,objcopy) + +# modules.builtin +# --------------------------------------------------------------------------- + +__default: modules.builtin + +# The second line aids cases where multiple modules share the same object. + +quiet_cmd_modules_builtin = GEN $@ + cmd_modules_builtin = \ + tr '\0' '\n' < $< | \ + sed -n 's/^[[:alnum:]:_]*\.file=//p' | \ + tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$$/.ko/' > $@ + +targets += modules.builtin +modules.builtin: modules.builtin.modinfo FORCE + $(call if_changed,modules_builtin) + # modules.builtin.ranges # --------------------------------------------------------------------------- ifdef CONFIG_BUILTIN_MODULE_RANGES
scripts/Makefile.vmlinux_o +1 -25
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only PHONY := __default -__default: vmlinux.o modules.builtin.modinfo modules.builtin +__default: vmlinux.o include include/config/auto.conf include $(srctree)/scripts/Kbuild.include
@@ -73,30 +73,6 @@ vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE targets += vmlinux.o -# modules.builtin.modinfo -# --------------------------------------------------------------------------- - -OBJCOPYFLAGS_modules.builtin.modinfo := -j .modinfo -O binary - -targets += modules.builtin.modinfo -modules.builtin.modinfo: vmlinux.o FORCE - $(call if_changed,objcopy) - -# modules.builtin -# --------------------------------------------------------------------------- - -# The second line aids cases where multiple modules share the same object. - -quiet_cmd_modules_builtin = GEN $@ - cmd_modules_builtin = \ - tr '\0' '\n' < $< | \ - sed -n 's/^[[:alnum:]:_]*\.file=//p' | \ - tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$$/.ko/' > $@ - -targets += modules.builtin -modules.builtin: modules.builtin.modinfo FORCE - $(call if_changed,modules_builtin) - # Add FORCE to the prerequisites of a target to force it to be always rebuilt. # ---------------------------------------------------------------------------
Signature · 1 line
2.50.1
Re: [PATCH v7 4/8] kbuild: extract modules.builtin.modinfo from vmlinux.unstripped
Quoted 8 lines · Alexey Gladkov
From: Masahiro Yamada <[email protected]>
Currently, we assume all the data for modules.builtin.modinfo are available in vmlinux.o.
This makes it impossible for modpost, which is invoked after vmlinux.o, to add additional module info.
Quoted 9 lines
This commit moves the modules.builtin.modinfo rule after modpost.
Signed-off-by Masahiro Yamada <[email protected]>Signed-off-by Alexey Gladkov <[email protected]>--- scripts/Makefile.vmlinux | 26 ++++++++++++++++++++++++++ scripts/Makefile.vmlinux_o | 26 +------------------------- 2 files changed, 27 insertions(+), 25 deletions(-)
PATCH v7 5/8 scsi: Always define blogic_pci_tbl structure
In reply to Alexey GladkovThe blogic_pci_tbl structure is used by the MODULE_DEVICE_TABLE macro. There is no longer a need to protect it with the MODULE condition, since this no longer causes the compiler to warn about an unused variable.
To avoid warnings when -Wunused-const-variable option is used, mark it as __maybe_unused for such configuration.
--- drivers/scsi/BusLogic.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/scsi/BusLogic.c +1 -3
@@ -3715,7 +3715,6 @@ static void __exit blogic_exit(void)__setup ("BusLogic=" , blogic_setup); -#ifdef MODULE /*static const struct pci_device_id blogic_pci_tbl[] = { { PCI_VENDOR_ID_BUSLOGIC, PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
@@ -3725,13 +3724,12 @@ __setup("BusLogic=", blogic_setup);PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { } };*/ -static const struct pci_device_id blogic_pci_tbl[] = { +static const struct pci_device_id blogic_pci_tbl[]__maybe_unused = { {PCI_DEVICE (PCI_VENDOR_ID_BUSLOGIC ,PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER )}, {PCI_DEVICE (PCI_VENDOR_ID_BUSLOGIC ,PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER_NC )}, {PCI_DEVICE (PCI_VENDOR_ID_BUSLOGIC ,PCI_DEVICE_ID_BUSLOGIC_FLASHPOINT )}, {0 , }, }; -#endif MODULE_DEVICE_TABLE (pci, blogic_pci_tbl);module_init (blogic_init);
Signature · 1 line
2.50.1
PATCH v7 6/8 modpost: Add modname to mod_device_table alias
In reply to Alexey GladkovAt this point, if a symbol is compiled as part of the kernel, information about which module the symbol belongs to is lost.
To save this it is possible to add the module name to the alias name. It's not very pretty, but it's possible for now.
--- include/linux/module.h | 14 +++++++++++++- rust/kernel/device_id.rs | 8 ++++---- scripts/mod/file2alias.c | 18 ++++++++++++++---- 3 files changed, 31 insertions(+), 9 deletions(-)
include/linux/module.h +13 -1
@@ -244,10 +244,22 @@ struct module_kobject *lookup_or_create_module_kobject(const char *name);/* What your module does. */ #define MODULE_DESCRIPTION (_description) MODULE_INFO(description, _description) +/* +* Format: __mod_device_table__kmod_<modname>__<type>__<name> +* Parts of the string `__kmod_` and `__` are used as delimiters when parsing +* a symbol in file2alias.c +*/ +#define __mod_device_table (type, name) \ + __PASTE(__mod_device_table__, \ + __PASTE(__KBUILD_MODNAME, \ + __PASTE(__, \ + __PASTE(type, \ + __PASTE(__, name))))) +#ifdef MODULE /* Creates an alias so file2alias.c can find device table. */ #define MODULE_DEVICE_TABLE (type, name) \ -static typeof(name) __mod_device_table__##type##__##name \ +static typeof(name) __mod_device_table(type, name) \ __attribute__ ((used, alias(__stringify(name))))#else /* !MODULE */ #define MODULE_DEVICE_TABLE (type, name)
rust/kernel/device_id.rs +4 -4
@@ -195,10 +195,10 @@ macro_rules! module_device_table { ($table_type: literal, $module_table_name:ident, $table_name:ident) => {#[rustfmt::skip] #[export_name = -concat! ( "__mod_device_table__" , $table_type, -"__" , module_path! (), -"_" , line! (), -"_" , stringify! ($table_name)) +concat! ( "__mod_device_table__" , line! (), +"__kmod_" , module_path! (), +"__" , $table_type, +"__" , stringify! ($table_name)) ] static $module_table_name: [::core::mem::MaybeUninit<u8>; $table_name.raw_ids().size()] =unsafe { ::core::mem::transmute_copy ($table_name.raw_ids ()) };
scripts/mod/file2alias.c +14 -4
@@ -1476,8 +1476,8 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, {void *symval;char *zeros =NULL ; -const char *type, *name; -size_t typelen; +const char *type, *name, *modname; +size_t typelen, modnamelen;static const char *prefix ="__mod_device_table__" ;/* We're looking for a section relative symbol */
@@ -1488,10 +1488,20 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,if (ELF_ST_TYPE (sym->st_info) !=STT_OBJECT )return ; -/* All our symbols are of form __mod_device_table__<type>__<name>. */ +/* All our symbols are of form __mod_device_table__kmod_<modname>__<type>__<name>. */ if (!strstarts (symname, prefix))return ; - type = symname +strlen (prefix); + + modname =strstr (symname,"__kmod_" ); +if (!modname) +return ; + modname +=strlen ("__kmod_" ); + + type =strstr (modname,"__" ); +if (!type) +return ; + modnamelen = type - modname; + type +=strlen ("__" ); name =strstr (type,"__" );if (!name)
Signature · 1 line
2.50.1
Nicolas Schier
maintainerRe: [PATCH v7 6/8] modpost: Add modname to mod_device_table alias
Quoted 19 lines · Alexey Gladkov
At this point, if a symbol is compiled as part of the kernel, information about which module the symbol belongs to is lost.
To save this it is possible to add the module name to the alias name. It's not very pretty, but it's possible for now.
Cc Miguel Ojeda <[email protected]>Cc Andreas Hindborg <[email protected]>Cc Danilo Krummrich <[email protected]>Cc Alex Gaynor <[email protected]>Signed-off-by Alexey Gladkov <[email protected]>Acked-by Danilo Krummrich <[email protected]>--- include/linux/module.h | 14 +++++++++++++- rust/kernel/device_id.rs | 8 ++++---- scripts/mod/file2alias.c | 18 ++++++++++++++---- 3 files changed, 31 insertions(+), 9 deletions(-)
...
scripts/mod/file2alias.c void handle_moddevtable(struct module *mod, struct elf_info *info, · line 1480
Quoted 12 lines
scripts/mod/file2alias.c +2
-2@@ -1476,8 +1476,8 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, {void *symval;char *zeros =NULL ; -const char *type, *name; -size_t typelen; +const char *type, *name, *modname; +size_t typelen, modnamelen;
when applying the patch-set onto kbuild-next, gcc refuses to build this patch (this possibly killing future bisecting):
../scripts/mod/file2alias.c: In function ‘handle_moddevtable’:../scripts/mod/file2alias.c:1480:25: error: variable ‘modnamelen’ set but not used [-Werror=unused-but-set-variable]
1480 | size_t typelen, modnamelen;
| ^~~~~~~~~~cc1: all warnings being treated as errors
make[2]: *** [../scripts/Makefile.host:131: scripts/mod/file2alias.o] Error
(-Werror is on for userprogs, since commit27758d8c2583d10472b745a43ff86fef96c11ef7)
Introduction of modnamelen has to be moved to the next patch.
Kind regards
Nicolas
PATCH v7 7/8 modpost: Create modalias for builtin modules
In reply to Alexey GladkovFor some modules, modalias is generated using the modpost utility and the section is added to the module file.
When a module is added inside vmlinux, modpost does not generate modalias for such modules and the information is lost.
As a result kmod (which uses modules.builtin.modinfo in userspace) cannot determine that modalias is handled by a builtin kernel module.
$ cat /sys/devices/pci0000:00/0000:00:14.0/modalias pci:v00008086d0000A36Dsv00001043sd00008694bc0Csc03i30
$ modinfo xhci_pci name: xhci_pci filename: (builtin) license: GPL file: drivers/usb/host/xhci-pci description: xHCI PCI Host Controller Driver
Missing modalias "pci:v*d*sv*sd*bc0Csc03i30*" which will be generated by modpost if the module is built separately.
To fix this it is necessary to generate the same modalias for vmlinux as for the individual modules. Fortunately '.vmlinux.export.o' is already generated from which '.modinfo' can be extracted in the same way as for vmlinux.o.
--- include/linux/module.h | 4 ---- scripts/Makefile.vmlinux | 5 ++++- scripts/mksysmap | 3 +++ scripts/mod/file2alias.c | 16 ++++++++++++++++ scripts/mod/modpost.c | 15 +++++++++++++++ scripts/mod/modpost.h | 2 ++ 6 files changed, 40 insertions(+), 5 deletions(-)
include/linux/module.h +0 -4
@@ -256,14 +256,10 @@ struct module_kobject *lookup_or_create_module_kobject(const char *name); __PASTE(type, \ __PASTE(__, name))))) -#ifdef MODULE /* Creates an alias so file2alias.c can find device table. */ #define MODULE_DEVICE_TABLE (type, name) \ static typeof(name) __mod_device_table(type, name) \ __attribute__ ((used, alias(__stringify(name)))) -#else /* !MODULE */ -#define MODULE_DEVICE_TABLE (type, name) -#endif /* Version of form [<epoch>:]<version>[-<extra-version>]. * Or for CVS/RCS ID version, everything but the number is stripped.
scripts/Makefile.vmlinux +4 -1
@@ -89,8 +89,11 @@ endif remove-section-y := .modinfo remove-section-$(CONFIG_ARCH_VMLINUX_NEEDS_RELOCS) += '.rel*' +remove-symbols := -w --strip-symbol='__mod_device_table__*' + quiet_cmd_strip_relocs = OBJCOPY $@ - cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) $< $@ + cmd_strip_relocs = $(OBJCOPY) $(addprefix --remove-section=,$(remove-section-y)) \ + $(remove-symbols) $< $@ targets += vmlinux vmlinux: vmlinux.unstripped FORCE
scripts/mksysmap +3 -0
@@ -59,6 +59,9 @@ # EXPORT_SYMBOL (namespace) / __kstrtabns_/d +# MODULE_DEVICE_TABLE (symbol name) +/ __mod_device_table__/d + # --------------------------------------------------------------------------- # Ignored suffixes # (do not forget '$' after each pattern)
scripts/mod/file2alias.c +16 -0
@@ -1527,5 +1527,21 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, } } +if (mod->is_vmlinux) { +struct module_alias *alias; + +/* +* If this is vmlinux, record the name of the builtin module. +* Traverse the linked list in the reverse order, and set the +* builtin_modname unless it has already been set in the +* previous call. +*/ +list_for_each_entry_reverse (alias, &mod->aliases, node) { +if (alias->builtin_modname) +break ; + alias->builtin_modname =xstrndup (modname, modnamelen); + } + } +free (zeros); }
scripts/mod/modpost.c +15 -0
@@ -2067,11 +2067,26 @@ static void write_if_changed(struct buffer *b, const char *fname)static void write_vmlinux_export_c_file (struct module *mod) {struct buffer buf = { }; +struct module_alias *alias, *next;buf_printf (&buf,"#include <linux/export-internal.h>\n" );add_exported_symbols (&buf, mod); + +buf_printf (&buf, +"#include <linux/module.h>\n" +"#undef __MODULE_INFO_PREFIX\n" +"#define __MODULE_INFO_PREFIX\n" ); + +list_for_each_entry_safe (alias, next, &mod->aliases, node) { +buf_printf (&buf,"MODULE_INFO(%s.alias, \"%s\");\n" , + alias->builtin_modname, alias->str); +list_del (&alias->node); +free (alias->builtin_modname); +free (alias); + } +write_if_changed (&buf,".vmlinux.export.c" );free (buf.p); }
scripts/mod/modpost.h +2 -0
@@ -99,10 +99,12 @@ buf_write(struct buffer *buf, const char *s, int len);* struct module_alias - auto-generated MODULE_ALIAS() * * @node: linked to module::aliases +* @modname: name of the builtin module (only for vmlinux) * @str: a string for MODULE_ALIAS() */ struct module_alias {struct list_head node; +char *builtin_modname;char str[]; };
Signature · 1 line
2.50.1
PATCH v7 8/8 kbuild: vmlinux.unstripped should always depend on .vmlinux.export.o
In reply to Alexey GladkovSince .vmlinux.export.c is used to add generated by modpost modaliases for builtin modules the .vmlinux.export.o is no longer optional and should always be created. The generation of this file is not dependent on CONFIG_MODULES.
--- scripts/Makefile.vmlinux | 9 ++------- scripts/link-vmlinux.sh | 5 +---- 2 files changed, 3 insertions(+), 11 deletions(-)
scripts/Makefile.vmlinux +2 -7
@@ -53,11 +53,6 @@ endif # vmlinux.unstripped # --------------------------------------------------------------------------- -ifdef CONFIG_MODULES -targets += .vmlinux.export.o -vmlinux.unstripped: .vmlinux.export.o -endif - ifdef CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX vmlinux.unstripped: arch/$(SRCARCH)/tools/vmlinux.arch.o
@@ -72,8 +67,8 @@ cmd_link_vmlinux = \ $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)" "$@"; \ $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) -targets += vmlinux.unstripped -vmlinux.unstripped: scripts/link-vmlinux.sh vmlinux.o $(KBUILD_LDS) FORCE +targets += vmlinux.unstripped .vmlinux.export.o +vmlinux.unstripped: scripts/link-vmlinux.sh vmlinux.o .vmlinux.export.o $(KBUILD_LDS) FORCE +$(call if_changed_dep,link_vmlinux) ifdef CONFIG_DEBUG_INFO_BTF vmlinux.unstripped: $(RESOLVE_BTFIDS)
scripts/link-vmlinux.sh +1 -4
@@ -73,10 +73,7 @@ vmlinux_link() objs="${objs} .builtin-dtbs.o" fi - if is_enabled CONFIG_MODULES; then - objs="${objs} .vmlinux.export.o" - fi - + objs="${objs} .vmlinux.export.o" objs="${objs} init/version-timestamp.o" if [ "${SRCARCH}" = "um" ]; then
Signature · 1 line
2.50.1
Re: [PATCH v7 8/8] kbuild: vmlinux.unstripped should always depend on .vmlinux.export.o
Alexey Gladkov.
RUSSSSKKIIEEEEEEE
(Rus)
Quoted 59 lines · Alexey Gladkov
Since
.vmlinux.export.cis used to add generated by modpost modaliases for builtin modules the .vmlinux.export.o is no longer optional and should always be created. The generation of this file is not dependent onCONFIG_MODULES.Signed-off-by Alexey Gladkov <[email protected]>--- scripts/Makefile.vmlinux | 9 ++------- scripts/link-vmlinux.sh | 5 +---- 2 files changed, 3 insertions(+), 11 deletions(-)scripts/Makefile.vmlinux +2
-7@@ -53,11 +53,6 @@ endif # vmlinux.unstripped # --------------------------------------------------------------------------- -ifdef CONFIG_MODULES -targets += .vmlinux.export.o -vmlinux.unstripped: .vmlinux.export.o -endif - ifdef CONFIG_ARCH_WANTS_PRE_LINK_VMLINUX vmlinux.unstripped: arch/$(SRCARCH)/tools/vmlinux.arch.o@@ -72,8 +67,8 @@ cmd_link_vmlinux = \ $< "$(LD)" "$(KBUILD_LDFLAGS)" "$(LDFLAGS_vmlinux)" "$@"; \ $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) -targets += vmlinux.unstripped -vmlinux.unstripped: scripts/link-vmlinux.sh vmlinux.o $(KBUILD_LDS) FORCE +targets += vmlinux.unstripped .vmlinux.export.o +vmlinux.unstripped: scripts/link-vmlinux.sh vmlinux.o .vmlinux.export.o $(KBUILD_LDS) FORCE +$(call if_changed_dep,link_vmlinux) ifdef CONFIG_DEBUG_INFO_BTF vmlinux.unstripped: $(RESOLVE_BTFIDS)scripts/link-vmlinux.sh +1
-5@@ -73,10 +73,7 @@ vmlinux_link() objs="${objs} .builtin-dtbs.o" fi - if is_enabled CONFIG_MODULES; then - objs="${objs} .vmlinux.export.o" - fi - + objs="${objs} .vmlinux.export.o" objs="${objs} init/version-timestamp.o" if [ "${SRCARCH}" = "um" ]; then --2.50.1