kbuild: change module.order to list *.o instead of *.ko
authorMasahiro Yamada <masahiroy@kernel.org>
Sun, 11 Dec 2022 13:04:07 +0000 (22:04 +0900)
committerMasahiro Yamada <masahiroy@kernel.org>
Wed, 14 Dec 2022 06:42:40 +0000 (15:42 +0900)
scripts/Makefile.build replaces the suffix .o with .ko, then
scripts/Makefile.modpost calls the sed command to change .ko back
to the original .o suffix.

Instead of converting the suffixes back-and-forth, store the .o paths
in modules.order, and replace it with .ko in 'make modules_install'.

This avoids the unneeded sed command.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Makefile
scripts/Makefile.build
scripts/Makefile.modfinal
scripts/Makefile.modinst
scripts/Makefile.modpost
scripts/clang-tools/gen_compile_commands.py
scripts/gen_autoksyms.sh
scripts/mod/modpost.c
scripts/modules-check.sh

index 591485152a95c3bfc3cad088d13f82e98cc69891..f506879e74526348111341b60bc02e78e8e42946 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1564,7 +1564,7 @@ __modinst_pre:
                rm -f $(MODLIB)/build ; \
                ln -s $(CURDIR) $(MODLIB)/build ; \
        fi
-       @sed 's:^:kernel/:' modules.order > $(MODLIB)/modules.order
+       @sed 's:^\(.*\)\.o$$:kernel/\1.ko:' modules.order > $(MODLIB)/modules.order
        @cp -f modules.builtin $(MODLIB)/
        @cp -f $(objtree)/modules.builtin.modinfo $(MODLIB)/
 
index 799df12b53f39d3ea5f6cbfeb094536dde70b31e..267eb7aac5b228be4ce0fd6697da007b3c5bce63 100644 (file)
@@ -435,7 +435,7 @@ $(obj)/built-in.a: $(real-obj-y) FORCE
 # modules.order unless contained modules are updated.
 
 cmd_modules_order = { $(foreach m, $(real-prereqs), \
-       $(if $(filter %/modules.order, $m), cat $m, echo $(patsubst %.o,%.ko,$m));) :; } \
+       $(if $(filter %/modules.order, $m), cat $m, echo $m);) :; } \
        > $@
 
 $(obj)/modules.order: $(obj-m) FORCE
index 83f2797e530c532ff9d638450d8ec2754034808c..a30d5b08eee94515aadea51422c084355ac9dd38 100644 (file)
@@ -15,7 +15,7 @@ include $(srctree)/scripts/Makefile.lib
 # find all modules listed in modules.order
 modules := $(call read-file, $(MODORDER))
 
-__modfinal: $(modules)
+__modfinal: $(modules:%.o=%.ko)
        @:
 
 # modname and part-of-module are set to make c_flags define proper module flags
@@ -57,13 +57,13 @@ if_changed_except = $(if $(call newer_prereqs_except,$(2))$(cmd-check),      \
        printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
 
 # Re-generate module BTFs if either module's .ko or vmlinux changed
-$(modules): %.ko: %.o %.mod.o scripts/module.lds $(and $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),vmlinux) FORCE
+%.ko: %.o %.mod.o scripts/module.lds $(and $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),vmlinux) FORCE
        +$(call if_changed_except,ld_ko_o,vmlinux)
 ifdef CONFIG_DEBUG_INFO_BTF_MODULES
        +$(if $(newer-prereqs),$(call cmd,btf_ko))
 endif
 
-targets += $(modules) $(modules:.ko=.mod.o)
+targets += $(modules:%.o=%.ko) $(modules:%.o=%.mod.o)
 
 # Add FORCE to the prequisites of a target to force it to be always rebuilt.
 # ---------------------------------------------------------------------------
index 65aac6be78ec3e968ace758f003025d0b195938a..836391e5d2097785b0a845ed0190d2ea3b31b65e 100644 (file)
@@ -26,7 +26,7 @@ suffix-$(CONFIG_MODULE_COMPRESS_GZIP) := .gz
 suffix-$(CONFIG_MODULE_COMPRESS_XZ)    := .xz
 suffix-$(CONFIG_MODULE_COMPRESS_ZSTD)  := .zst
 
-modules := $(patsubst $(extmod_prefix)%, $(dst)/%$(suffix-y), $(modules))
+modules := $(patsubst $(extmod_prefix)%.o, $(dst)/%.ko$(suffix-y), $(modules))
 
 __modinst: $(modules)
        @:
index 55a72f5eb76dd99ab2f8b3697e66b7c2bafeb7fb..f814a6acd200c02360abb916c14cfc7235fdfe6c 100644 (file)
@@ -107,7 +107,10 @@ ifneq ($(KBUILD_MODPOST_WARN)$(missing-input),)
 modpost-args += -w
 endif
 
-modorder-if-needed := $(if $(KBUILD_MODULES), $(MODORDER))
+ifdef KBUILD_MODULES
+modorder-if-needed := $(MODORDER)
+modpost-args += -T $(MODORDER)
+endif
 
 MODPOST = scripts/mod/modpost
 
@@ -119,7 +122,7 @@ quiet_cmd_modpost = MODPOST $@
                echo >&2 "WARNING: $(missing-input) is missing."; \
                echo >&2 "         Modules may not have dependencies or modversions."; \
                echo >&2 "         You may get many unresolved symbol warnings.";) \
-       sed 's/ko$$/o/' $(or $(modorder-if-needed), /dev/null) | $(MODPOST) $(modpost-args) -T - $(vmlinux.o-if-present)
+       $(MODPOST) $(modpost-args) $(vmlinux.o-if-present)
 
 targets += $(output-symdump)
 $(output-symdump): $(modorder-if-needed) $(vmlinux.o-if-present) $(module.symvers-if-present) $(MODPOST) FORCE
index d800b2c0af9771644f51bc0d8fb60d831b0b61f0..0227522959a45c7253ed13ca1950affcb4f55522 100755 (executable)
@@ -138,10 +138,10 @@ def cmdfiles_for_modorder(modorder):
     """
     with open(modorder) as f:
         for line in f:
-            ko = line.rstrip()
-            base, ext = os.path.splitext(ko)
-            if ext != '.ko':
-                sys.exit('{}: module path must end with .ko'.format(ko))
+            obj = line.rstrip()
+            base, ext = os.path.splitext(obj)
+            if ext != '.o':
+                sys.exit('{}: module path must end with .o'.format(obj))
             mod = base + '.mod'
             # Read from *.mod, to get a list of objects that compose the module.
             with open(mod) as m:
index 653fadbad302f12e11258ecbf0b4625283eed74d..12bcfae940ee94d5725f4994a8598d929cda1433 100755 (executable)
@@ -48,7 +48,7 @@ cat > "$output_file" << EOT
 EOT
 
 {
-       [ -n "${read_modorder}" ] && sed 's/ko$/usyms/' modules.order | xargs cat
+       [ -n "${read_modorder}" ] && sed 's/o$/usyms/' modules.order | xargs cat
        echo "$needed_symbols"
        [ -n "$ksym_wl" ] && cat "$ksym_wl"
 } | sed -e 's/ /\n/g' | sed -n -e '/^$/!p' |
index 56d856f2e5115150ec5648da9f839fad2836a5fc..b48838a71bf6adf51bcd8c95ec6071c35e76f27c 100644 (file)
@@ -1856,11 +1856,9 @@ static void read_symbols_from_files(const char *filename)
        FILE *in = stdin;
        char fname[PATH_MAX];
 
-       if (strcmp(filename, "-") != 0) {
-               in = fopen(filename, "r");
-               if (!in)
-                       fatal("Can't open filenames file %s: %m", filename);
-       }
+       in = fopen(filename, "r");
+       if (!in)
+               fatal("Can't open filenames file %s: %m", filename);
 
        while (fgets(fname, PATH_MAX, in) != NULL) {
                if (strends(fname, "\n"))
@@ -1868,8 +1866,7 @@ static void read_symbols_from_files(const char *filename)
                read_symbols(fname);
        }
 
-       if (in != stdin)
-               fclose(in);
+       fclose(in);
 }
 
 #define SZ 500
index e06327722263e1632577608c5c70831e76582cc9..4c8da90de78ea2de961caee88003d8fb0abe8ac3 100755 (executable)
@@ -16,7 +16,7 @@ check_same_name_modules()
        for m in $(sed 's:.*/::' "$1" | sort | uniq -d)
        do
                echo "error: the following would cause module name conflict:" >&2
-               sed -n "/\/$m/s:^:  :p" "$1" >&2
+               sed -n "/\/$m/s:^\(.*\)\.o\$:  \1.ko:p" "$1" >&2
                exit_code=1
        done
 }