I sent the first batch of cleanups:
https://lore.kernel.org/linux-kbuild/[email protected]/T/#t
I took 01-06, 09-10.
I dropped 07, 08.
This is the second batch.
Masahiro Yamada (7):
kbuild: reuse suffix-search to refactor multi_depend
kbuild: make multi_depend work with targets in subdirectory
kbuild: reuse real-search to simplify cmd_mod
kbuild: split the second line of *.mod into *.usyms
kbuild: get rid of duplication in *.mod files
kbuild: make *.mod not depend on *.o
kbuild: read *.mod to get objects passed to $(LD) or $(AR)
.gitignore | 1 +
Makefile | 5 +++--
scripts/Makefile.build | 31 ++++++++++++++-----------------
scripts/Makefile.lib | 6 +++---
scripts/adjust_autoksyms.sh | 2 +-
scripts/gen_autoksyms.sh | 18 +++++++++++-------
scripts/mod/sumversion.c | 11 ++---------
7 files changed, 35 insertions(+), 39 deletions(-)
--
2.32.0
The *.mod files have two lines; the first line lists the member objects
of the module, and the second line, if CONFIG_TRIM_UNUSED_KSYMS=y, lists
the undefined symbols.
Currently, we generate *.mod after constructing composite modules,
otherwise, we cannot compute the second line. No prerequisite is
required to print the first line.
They are orthogonal. Splitting them into separate commands will ease
further cleanups.
This commit splits the list of undefined symbols out to *.usyms files.
Previously, the list of undefined symbols ended up with a very long
line, but now it has one symbol per line.
Use sed like we did before commit 7d32358be8ac ("kbuild: avoid split
lines in .mod files").
Signed-off-by: Masahiro Yamada <[email protected]>
Reviewed-by: Nicolas Schier <[email protected]>
---
.gitignore | 1 +
Makefile | 2 +-
scripts/Makefile.build | 17 +++++++++--------
scripts/adjust_autoksyms.sh | 2 +-
scripts/gen_autoksyms.sh | 18 +++++++++++-------
scripts/mod/sumversion.c | 11 ++---------
6 files changed, 25 insertions(+), 26 deletions(-)
diff --git a/.gitignore b/.gitignore
index 7afd412dadd2..265959544978 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,6 +45,7 @@
*.symversions
*.tab.[ch]
*.tar
+*.usyms
*.xz
*.zst
Module.symvers
diff --git a/Makefile b/Makefile
index d9336e783be3..82ee893909e9 100644
--- a/Makefile
+++ b/Makefile
@@ -1848,7 +1848,7 @@ clean: $(clean-dirs)
-o -name '*.ko.*' \
-o -name '*.dtb' -o -name '*.dtbo' -o -name '*.dtb.S' -o -name '*.dt.yaml' \
-o -name '*.dwo' -o -name '*.lst' \
- -o -name '*.su' -o -name '*.mod' \
+ -o -name '*.su' -o -name '*.mod' -o -name '*.usyms' \
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
-o -name '*.lex.c' -o -name '*.tab.[ch]' \
-o -name '*.asn1.[ch]' \
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 857329844789..6ae92d119dfa 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -85,7 +85,8 @@ ifdef need-builtin
targets-for-builtin += $(obj)/built-in.a
endif
-targets-for-modules := $(patsubst %.o, %.mod, $(filter %.o, $(obj-m)))
+targets-for-modules := $(foreach x, mod $(if $(CONFIG_TRIM_UNUSED_KSYMS), usyms), \
+ $(patsubst %.o, %.$x, $(filter %.o, $(obj-m))))
ifneq ($(CONFIG_LTO_CLANG)$(CONFIG_X86_KERNEL_IBT),)
targets-for-modules += $(patsubst %.o, %.prelink.o, $(filter %.o, $(obj-m)))
@@ -256,9 +257,6 @@ endif
ifdef CONFIG_TRIM_UNUSED_KSYMS
cmd_gen_ksymdeps = \
$(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd
-
-# List module undefined symbols
-undefined_syms = $(NM) $< | $(AWK) '$$1 == "U" { printf("%s%s", x++ ? " " : "", $$2) }';
endif
define rule_cc_o_c
@@ -305,14 +303,17 @@ $(obj)/%.prelink.o: $(obj)/%.o FORCE
$(call if_changed,cc_prelink_modules)
endif
-cmd_mod = { \
- echo $(addprefix $(obj)/, $(call real-search, $*.o, .o, -objs -y -m)); \
- $(undefined_syms) echo; \
- } > $@
+cmd_mod = echo $(addprefix $(obj)/, $(call real-search, $*.o, .o, -objs -y -m)) > $@
$(obj)/%.mod: $(obj)/%$(mod-prelink-ext).o FORCE
$(call if_changed,mod)
+# List module undefined symbols
+cmd_undefined_syms = $(NM) $< | sed -n 's/^ *U //p' > $@
+
+$(obj)/%.usyms: $(obj)/%$(mod-prelink-ext).o FORCE
+ $(call if_changed,undefined_syms)
+
quiet_cmd_cc_lst_c = MKLST $@
cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
$(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh
index 59fdb875e818..f1b5ac818411 100755
--- a/scripts/adjust_autoksyms.sh
+++ b/scripts/adjust_autoksyms.sh
@@ -35,7 +35,7 @@ case "$KBUILD_VERBOSE" in
esac
# Generate a new symbol list file
-$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh "$new_ksyms_file"
+$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh --modorder "$new_ksyms_file"
# Extract changes between old and new list and touch corresponding
# dependency files.
diff --git a/scripts/gen_autoksyms.sh b/scripts/gen_autoksyms.sh
index 120225c541c5..faacf7062122 100755
--- a/scripts/gen_autoksyms.sh
+++ b/scripts/gen_autoksyms.sh
@@ -2,13 +2,10 @@
# SPDX-License-Identifier: GPL-2.0-only
# Create an autoksyms.h header file from the list of all module's needed symbols
-# as recorded on the second line of *.mod files and the user-provided symbol
-# whitelist.
+# as recorded in *.usyms files and the user-provided symbol whitelist.
set -e
-output_file="$1"
-
# Use "make V=1" to debug this script.
case "$KBUILD_VERBOSE" in
*1*)
@@ -16,6 +13,15 @@ case "$KBUILD_VERBOSE" in
;;
esac
+read_modorder=
+
+if [ "$1" = --modorder ]; then
+ shift
+ read_modorder=1
+fi
+
+output_file="$1"
+
needed_symbols=
# Special case for modversions (see modpost.c)
@@ -41,10 +47,8 @@ cat > "$output_file" << EOT
EOT
-[ -f modules.order ] && modlist=modules.order || modlist=/dev/null
-
{
- sed 's/ko$/mod/' $modlist | xargs -n1 sed -n -e '2p'
+ [ -n "${read_modorder}" ] && sed 's/ko$/usyms/' modules.order | xargs cat
echo "$needed_symbols"
[ -n "$ksym_wl" ] && cat "$ksym_wl"
} | sed -e 's/ /\n/g' | sed -n -e '/^$/!p' |
diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c
index 905c0ec291e1..0125698f2037 100644
--- a/scripts/mod/sumversion.c
+++ b/scripts/mod/sumversion.c
@@ -387,7 +387,7 @@ static int parse_source_files(const char *objfile, struct md4_ctx *md)
/* Calc and record src checksum. */
void get_src_version(const char *modname, char sum[], unsigned sumlen)
{
- char *buf, *pos, *firstline;
+ char *buf;
struct md4_ctx md;
char *fname;
char filelist[PATH_MAX + 1];
@@ -397,15 +397,8 @@ void get_src_version(const char *modname, char sum[], unsigned sumlen)
buf = read_text_file(filelist);
- pos = buf;
- firstline = get_line(&pos);
- if (!firstline) {
- warn("bad ending versions file for %s\n", modname);
- goto free;
- }
-
md4_init(&md);
- while ((fname = strsep(&firstline, " "))) {
+ while ((fname = strsep(&buf, " \n"))) {
if (!*fname)
continue;
if (!(is_static_library(fname)) &&
--
2.32.0
ld and ar support @file, which command-line options are read from.
Now that *.mod lists the member objects in the correct order, without
duplication, it is ready to be passed to ld and ar.
By using the @file syntax, people will not be worried about the pitfall
described in the NOTE.
Signed-off-by: Masahiro Yamada <[email protected]>
---
scripts/Makefile.build | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 3da731cf6978..f6a506318795 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -450,22 +450,18 @@ quiet_cmd_ar_lib = AR $@
$(obj)/lib.a: $(lib-y) FORCE
$(call if_changed,ar_lib)
-# NOTE:
-# Do not replace $(filter %.o,^) with $(real-prereqs). When a single object
-# module is turned into a multi object module, $^ will contain header file
-# dependencies recorded in the .*.cmd file.
ifneq ($(CONFIG_LTO_CLANG)$(CONFIG_X86_KERNEL_IBT),)
quiet_cmd_link_multi-m = AR [M] $@
cmd_link_multi-m = \
$(cmd_update_lto_symversions); \
rm -f $@; \
- $(AR) cDPrsT $@ $(filter %.o,$^)
+ $(AR) cDPrsT $@ @$(patsubst %.o,%.mod,$@)
else
quiet_cmd_link_multi-m = LD [M] $@
- cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ $(filter %.o,$^)
+ cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ @$(patsubst %.o,%.mod,$@)
endif
-$(multi-obj-m): FORCE
+$(multi-obj-m): %.o: %.mod FORCE
$(call if_changed,link_multi-m)
$(call multi_depend, $(multi-obj-m), .o, -objs -y -m)
--
2.32.0
On 4/6/2022 8:30 AM, Masahiro Yamada wrote:
> ld and ar support @file, which command-line options are read from.
>
> Now that *.mod lists the member objects in the correct order, without
> duplication, it is ready to be passed to ld and ar.
>
> By using the @file syntax, people will not be worried about the pitfall
> described in the NOTE.
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> scripts/Makefile.build | 10 +++-------
> 1 file changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index 3da731cf6978..f6a506318795 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -450,22 +450,18 @@ quiet_cmd_ar_lib = AR $@
> $(obj)/lib.a: $(lib-y) FORCE
> $(call if_changed,ar_lib)
>
> -# NOTE:
> -# Do not replace $(filter %.o,^) with $(real-prereqs). When a single object
> -# module is turned into a multi object module, $^ will contain header file
> -# dependencies recorded in the .*.cmd file.
> ifneq ($(CONFIG_LTO_CLANG)$(CONFIG_X86_KERNEL_IBT),)
> quiet_cmd_link_multi-m = AR [M] $@
> cmd_link_multi-m = \
> $(cmd_update_lto_symversions); \
> rm -f $@; \
> - $(AR) cDPrsT $@ $(filter %.o,$^)
> + $(AR) cDPrsT $@ @$(patsubst %.o,%.mod,$@)
> else
> quiet_cmd_link_multi-m = LD [M] $@
> - cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ $(filter %.o,$^)
> + cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ @$(patsubst %.o,%.mod,$@)
> endif
>
> -$(multi-obj-m): FORCE
> +$(multi-obj-m): %.o: %.mod FORCE
> $(call if_changed,link_multi-m)
> $(call multi_depend, $(multi-obj-m), .o, -objs -y -m)
>
Looks like this also addresses the out-of-tree issue described in
<https://lore.kernel.org/linux-kbuild/[email protected]/>
:)
/jeff
On Thu, Apr 7, 2022 at 3:13 AM Jeff Johnson <[email protected]> wrote:
>
> On 4/6/2022 8:30 AM, Masahiro Yamada wrote:
> > ld and ar support @file, which command-line options are read from.
> >
> > Now that *.mod lists the member objects in the correct order, without
> > duplication, it is ready to be passed to ld and ar.
> >
> > By using the @file syntax, people will not be worried about the pitfall
> > described in the NOTE.
> >
> > Signed-off-by: Masahiro Yamada <[email protected]>
> > ---
> >
> > scripts/Makefile.build | 10 +++-------
> > 1 file changed, 3 insertions(+), 7 deletions(-)
> >
> > diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> > index 3da731cf6978..f6a506318795 100644
> > --- a/scripts/Makefile.build
> > +++ b/scripts/Makefile.build
> > @@ -450,22 +450,18 @@ quiet_cmd_ar_lib = AR $@
> > $(obj)/lib.a: $(lib-y) FORCE
> > $(call if_changed,ar_lib)
> >
> > -# NOTE:
> > -# Do not replace $(filter %.o,^) with $(real-prereqs). When a single object
> > -# module is turned into a multi object module, $^ will contain header file
> > -# dependencies recorded in the .*.cmd file.
> > ifneq ($(CONFIG_LTO_CLANG)$(CONFIG_X86_KERNEL_IBT),)
> > quiet_cmd_link_multi-m = AR [M] $@
> > cmd_link_multi-m = \
> > $(cmd_update_lto_symversions); \
> > rm -f $@; \
> > - $(AR) cDPrsT $@ $(filter %.o,$^)
> > + $(AR) cDPrsT $@ @$(patsubst %.o,%.mod,$@)
> > else
> > quiet_cmd_link_multi-m = LD [M] $@
> > - cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ $(filter %.o,$^)
> > + cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ @$(patsubst %.o,%.mod,$@)
> > endif
> >
> > -$(multi-obj-m): FORCE
> > +$(multi-obj-m): %.o: %.mod FORCE
> > $(call if_changed,link_multi-m)
> > $(call multi_depend, $(multi-obj-m), .o, -objs -y -m)
> >
>
> Looks like this also addresses the out-of-tree issue described in
> <https://lore.kernel.org/linux-kbuild/[email protected]/>
>
> :)
>
> /jeff
But, not perfectly.
This patch fixed the linker part, but the same issue is remaining in cmd_mod.
The following patch is an easy fix-up.
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index f6a506318795..468f9e646370 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -303,8 +303,8 @@ $(obj)/%.prelink.o: $(obj)/%.o FORCE
$(call if_changed,cc_prelink_modules)
endif
-cmd_mod = echo $(addprefix $(obj)/, $(call real-search, $*.o, .o,
-objs -y -m)) | \
- $(AWK) -v RS='( |\n)' '!x[$$0]++' > $@
+cmd_mod = echo $(call real-search, $*.o, .o, -objs -y -m) | \
+ $(AWK) -v RS='( |\n)' '!x[$$0]++ { print("$(obj)/"$$0) }' > $@
$(obj)/%.mod: FORCE
$(call if_changed,mod)
But, please do not submit a patch yet.
This patch series is just preparation for yet another
bigger clean-up.
One of my big goals is to clean up Clang LTO builds.
Clang LTO made Kbuild really ugly.
I am re-implementing various parts, but I have not
completed the work yet.
Meanwhile, I incrementally submit prerequisite
refactoring patches.
The issues of external module builds _might_ be fixed
as a side-effect of other refactoring, but I am more
interested in what the final code will look like.
--
Best Regards
Masahiro Yamada
On Wed, Apr 6, 2022 at 8:31 AM Masahiro Yamada <[email protected]> wrote:
>
> ld and ar support @file, which command-line options are read from.
>
> Now that *.mod lists the member objects in the correct order, without
> duplication, it is ready to be passed to ld and ar.
>
> By using the @file syntax, people will not be worried about the pitfall
> described in the NOTE.
Clever! Thanks for the patch!
Reviewed-by: Nick Desaulniers <[email protected]>
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> scripts/Makefile.build | 10 +++-------
> 1 file changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index 3da731cf6978..f6a506318795 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -450,22 +450,18 @@ quiet_cmd_ar_lib = AR $@
> $(obj)/lib.a: $(lib-y) FORCE
> $(call if_changed,ar_lib)
>
> -# NOTE:
> -# Do not replace $(filter %.o,^) with $(real-prereqs). When a single object
> -# module is turned into a multi object module, $^ will contain header file
> -# dependencies recorded in the .*.cmd file.
> ifneq ($(CONFIG_LTO_CLANG)$(CONFIG_X86_KERNEL_IBT),)
> quiet_cmd_link_multi-m = AR [M] $@
> cmd_link_multi-m = \
> $(cmd_update_lto_symversions); \
> rm -f $@; \
> - $(AR) cDPrsT $@ $(filter %.o,$^)
> + $(AR) cDPrsT $@ @$(patsubst %.o,%.mod,$@)
> else
> quiet_cmd_link_multi-m = LD [M] $@
> - cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ $(filter %.o,$^)
> + cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ @$(patsubst %.o,%.mod,$@)
> endif
>
> -$(multi-obj-m): FORCE
> +$(multi-obj-m): %.o: %.mod FORCE
> $(call if_changed,link_multi-m)
> $(call multi_depend, $(multi-obj-m), .o, -objs -y -m)
>
> --
> 2.32.0
>
--
Thanks,
~Nick Desaulniers
On Wed, Apr 6, 2022 at 8:31 AM Masahiro Yamada <[email protected]> wrote:
>
> The *.mod files have two lines; the first line lists the member objects
> of the module, and the second line, if CONFIG_TRIM_UNUSED_KSYMS=y, lists
> the undefined symbols.
Enabling EXPERT and TRIM_UNUSED_KSYMS, I didn't find any .mod files
containing a second line that wasn't empty. Is there an example that
has such symbol list that I can use to verify?
--
Thanks,
~Nick Desaulniers
On Fri, Apr 8, 2022 at 2:47 AM Nick Desaulniers <[email protected]> wrote:
>
> On Wed, Apr 6, 2022 at 8:31 AM Masahiro Yamada <[email protected]> wrote:
> >
> > The *.mod files have two lines; the first line lists the member objects
> > of the module, and the second line, if CONFIG_TRIM_UNUSED_KSYMS=y, lists
> > the undefined symbols.
>
> Enabling EXPERT and TRIM_UNUSED_KSYMS, I didn't find any .mod files
> containing a second line that wasn't empty. Is there an example that
> has such symbol list that I can use to verify?
Modules are usually symbol consumers in order to be useful.
(and some of them are symbol providers as well).
So, it is rare to see an empty unresolved symbol list.
But, it is theoretically possible to create such a module.
This is sample code.
obj-m += foo.o
----------------(foo.c begin)----------------
#include <linux/module.h>
MODULE_LICENSE("GPL");
----------------(foo.c end)----------------
> --
> Thanks,
> ~Nick Desaulniers
--
Best Regards
Masahiro Yamada
On Thu, Apr 7, 2022 at 12:32 AM Masahiro Yamada <[email protected]> wrote:
>
>
> I sent the first batch of cleanups:
> https://lore.kernel.org/linux-kbuild/[email protected]/T/#t
>
> I took 01-06, 09-10.
> I dropped 07, 08.
>
> This is the second batch.
>
Applied to linux-kbuild.
>
>
> Masahiro Yamada (7):
> kbuild: reuse suffix-search to refactor multi_depend
> kbuild: make multi_depend work with targets in subdirectory
> kbuild: reuse real-search to simplify cmd_mod
> kbuild: split the second line of *.mod into *.usyms
> kbuild: get rid of duplication in *.mod files
> kbuild: make *.mod not depend on *.o
> kbuild: read *.mod to get objects passed to $(LD) or $(AR)
>
> .gitignore | 1 +
> Makefile | 5 +++--
> scripts/Makefile.build | 31 ++++++++++++++-----------------
> scripts/Makefile.lib | 6 +++---
> scripts/adjust_autoksyms.sh | 2 +-
> scripts/gen_autoksyms.sh | 18 +++++++++++-------
> scripts/mod/sumversion.c | 11 ++---------
> 7 files changed, 35 insertions(+), 39 deletions(-)
>
> --
> 2.32.0
>
--
Best Regards
Masahiro Yamada
Hi Masahiro,
On 4/15/2022 12:20 AM, Masahiro Yamada wrote:
> On Thu, Apr 7, 2022 at 12:32 AM Masahiro Yamada <[email protected]> wrote:
>>
>>
>> I sent the first batch of cleanups:
>> https://lore.kernel.org/linux-kbuild/[email protected]/T/#t
>>
>> I took 01-06, 09-10.
>> I dropped 07, 08.
>>
>> This is the second batch.
>>
>
> Applied to linux-kbuild.
>
>
I didn't see the last patch (kbuild: read *.mod to get objects passed to
$(LD) or $(AR)) applied. Was the last patch intentionally skipped?
>>
>>
>> Masahiro Yamada (7):
>> kbuild: reuse suffix-search to refactor multi_depend
>> kbuild: make multi_depend work with targets in subdirectory
>> kbuild: reuse real-search to simplify cmd_mod
>> kbuild: split the second line of *.mod into *.usyms
>> kbuild: get rid of duplication in *.mod files
>> kbuild: make *.mod not depend on *.o
>> kbuild: read *.mod to get objects passed to $(LD) or $(AR)
>>
>> .gitignore | 1 +
>> Makefile | 5 +++--
>> scripts/Makefile.build | 31 ++++++++++++++-----------------
>> scripts/Makefile.lib | 6 +++---
>> scripts/adjust_autoksyms.sh | 2 +-
>> scripts/gen_autoksyms.sh | 18 +++++++++++-------
>> scripts/mod/sumversion.c | 11 ++---------
>> 7 files changed, 35 insertions(+), 39 deletions(-)
>>
>> --
>> 2.32.0
>>
>
>
On Sat, Apr 23, 2022 at 4:07 AM Elliot Berman <[email protected]> wrote:
>
> Hi Masahiro,
>
> On 4/15/2022 12:20 AM, Masahiro Yamada wrote:
> > On Thu, Apr 7, 2022 at 12:32 AM Masahiro Yamada <[email protected]> wrote:
> >>
> >>
> >> I sent the first batch of cleanups:
> >> https://lore.kernel.org/linux-kbuild/[email protected]/T/#t
> >>
> >> I took 01-06, 09-10.
> >> I dropped 07, 08.
> >>
> >> This is the second batch.
> >>
> >
> > Applied to linux-kbuild.
> >
> >
>
> I didn't see the last patch (kbuild: read *.mod to get objects passed to
> $(LD) or $(AR)) applied. Was the last patch intentionally skipped?
I do not know why but something wrong happened to my git operation.
I will apply it.
Thanks for pointing it out.
> >>
> >>
> >> Masahiro Yamada (7):
> >> kbuild: reuse suffix-search to refactor multi_depend
> >> kbuild: make multi_depend work with targets in subdirectory
> >> kbuild: reuse real-search to simplify cmd_mod
> >> kbuild: split the second line of *.mod into *.usyms
> >> kbuild: get rid of duplication in *.mod files
> >> kbuild: make *.mod not depend on *.o
> >> kbuild: read *.mod to get objects passed to $(LD) or $(AR)
> >>
> >> .gitignore | 1 +
> >> Makefile | 5 +++--
> >> scripts/Makefile.build | 31 ++++++++++++++-----------------
> >> scripts/Makefile.lib | 6 +++---
> >> scripts/adjust_autoksyms.sh | 2 +-
> >> scripts/gen_autoksyms.sh | 18 +++++++++++-------
> >> scripts/mod/sumversion.c | 11 ++---------
> >> 7 files changed, 35 insertions(+), 39 deletions(-)
> >>
> >> --
> >> 2.32.0
> >>
> >
> >
--
Best Regards
Masahiro Yamada