FROMGIT: modpost: Allow extended modversions without basic MODVERSIONS

If you know that your kernel modules will only ever be loaded by a newer
kernel, you can disable BASIC_MODVERSIONS to save space. This also
allows easy creation of test modules to see how tooling will respond to
modules that only have the new format.

Signed-off-by: Matthew Maurer <mmaurer@google.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
(cherry picked from commit e8639b7ef0f871753b4262ec0eacd3da29eebcee
 https://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git kbuild)

Change-Id: I952fdb8fabba6d1e354d2f9d21f1d0b29404ae3e
Bug: 347787665
Signed-off-by: Matthew Maurer <mmaurer@google.com>
This commit is contained in:
Matthew Maurer
2025-01-03 17:37:03 +00:00
committed by Giuliano Procida
parent 5585de48c3
commit d594916ce6
3 changed files with 23 additions and 2 deletions
+15
View File
@@ -217,6 +217,21 @@ config EXTENDED_MODVERSIONS
The most likely reason you would enable this is to enable Rust
support. If unsure, say N.
config BASIC_MODVERSIONS
bool "Basic Module Versioning Support"
depends on MODVERSIONS
default y
help
This enables basic MODVERSIONS support, allowing older tools or
kernels to potentially load modules.
Disabling this may cause older `modprobe` or `kmod` to be unable
to read MODVERSIONS information from built modules. With this
disabled, older kernels may treat this module as unversioned.
This is enabled by default when MODVERSIONS are enabled.
If unsure, say Y.
config MODULE_SRCVERSION_ALL
bool "Source checksum for all modules"
help
+1
View File
@@ -45,6 +45,7 @@ MODPOST = $(objtree)/scripts/mod/modpost
modpost-args = \
$(if $(CONFIG_MODULES),-M) \
$(if $(CONFIG_MODVERSIONS),-m) \
$(if $(CONFIG_BASIC_MODVERSIONS),-b) \
$(if $(CONFIG_EXTENDED_MODVERSIONS),-x) \
$(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \
$(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
+7 -2
View File
@@ -32,6 +32,8 @@ static bool module_enabled;
static bool modversions;
/* Is CONFIG_MODULE_SRCVERSION_ALL set? */
static bool all_versions;
/* Is CONFIG_BASIC_MODVERSIONS set? */
static bool basic_modversions;
/* Is CONFIG_EXTENDED_MODVERSIONS set? */
static bool extended_modversions;
/* If we are modposting external module set to 1 */
@@ -1875,7 +1877,7 @@ static void add_versions(struct buffer *b, struct module *mod)
{
struct symbol *s;
if (!modversions)
if (!basic_modversions)
return;
buf_printf(b, "\n");
@@ -2187,7 +2189,7 @@ int main(int argc, char **argv)
LIST_HEAD(dump_lists);
struct dump_list *dl, *dl2;
while ((opt = getopt(argc, argv, "ei:MmnT:to:au:WwENd:v:x")) != -1) {
while ((opt = getopt(argc, argv, "ei:MmnT:to:au:WwENd:v:xb")) != -1) {
switch (opt) {
case 'e':
external_module = true;
@@ -2239,6 +2241,9 @@ int main(int argc, char **argv)
case 'v':
strncpy(module_scmversion, optarg, sizeof(module_scmversion) - 1);
break;
case 'b':
basic_modversions = true;
break;
case 'x':
extended_modversions = true;
break;