mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-17 22:23:45 -04:00
modpost: Create modalias for builtin modules
For 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. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Signed-off-by: Alexey Gladkov <legion@kernel.org> Tested-by: Stephen Rothwell <sfr@canb.auug.org.au> Reviewed-by: Nicolas Schier <nsc@kernel.org> Link: https://patch.msgid.link/28d4da3b0e3fc8474142746bcf469e03752c3208.1758182101.git.legion@kernel.org Signed-off-by: Nathan Chancellor <nathan@kernel.org>
This commit is contained in:
committed by
Nathan Chancellor
parent
83fb49389b
commit
5ab23c7923
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user