BACKPORT: kbuild: avoid regex RS for POSIX awk
In 22f26f21774f8 awk was added to deduplicate *.mod files. The awk
invocation passes -v RS='( |\n)' to match a space or newline character
as the record separator. Unfortunately, POSIX states[1]
> If RS contains more than one character, the results are unspecified.
Some implementations (such as the One True Awk[2] used by the BSDs) do
not treat RS as a regular expression. When awk does not support regex
RS, build failures such as the following are produced (first error using
allmodconfig):
CC [M] arch/x86/events/intel/uncore.o
CC [M] arch/x86/events/intel/uncore_nhmex.o
CC [M] arch/x86/events/intel/uncore_snb.o
CC [M] arch/x86/events/intel/uncore_snbep.o
CC [M] arch/x86/events/intel/uncore_discovery.o
LD [M] arch/x86/events/intel/intel-uncore.o
ld: cannot find uncore_nhmex.o: No such file or directory
ld: cannot find uncore_snb.o: No such file or directory
ld: cannot find uncore_snbep.o: No such file or directory
ld: cannot find uncore_discovery.o: No such file or directory
make[3]: *** [scripts/Makefile.build:422: arch/x86/events/intel/intel-uncore.o] Error 1
make[2]: *** [scripts/Makefile.build:487: arch/x86/events/intel] Error 2
make[1]: *** [scripts/Makefile.build:487: arch/x86/events] Error 2
make: *** [Makefile:1839: arch/x86] Error 2
To avoid this, use printf(1) to produce a newline between each object
path, instead of the space produced by echo(1), so that the default RS
can be used by awk.
[1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html
[2]: https://github.com/onetrueawk/awk
Bug: 254441685
Fixes: 22f26f21774f ("kbuild: get rid of duplication in *.mod files")
Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
(cherry picked from commit 7bf179de5b2dfae54a6839eaf7caba44a888ee2e)
Signed-off-by: Lee Jones <joneslee@google.com>
Change-Id: I344c0ead4158cf5704ada130af50fa71f52d12f4
This commit is contained in:
committed by
Treehugger Robot
parent
3153003790
commit
90af5dfd50
@@ -308,8 +308,8 @@ $(obj)/%.lto.o: $(obj)/%.o FORCE
|
|||||||
$(call if_changed,cc_lto_link_modules)
|
$(call if_changed,cc_lto_link_modules)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
cmd_mod = echo $(call real-search, $*.o, .o, -objs -y -m) | \
|
cmd_mod = printf '%s\n' $(call real-search, $*.o, .o, -objs -y -m) | \
|
||||||
$(AWK) -v RS='( |\n)' '!x[$$0]++ { print("$(obj)/"$$0) }' > $@
|
$(AWK) '!x[$$0]++ { print("$(obj)/"$$0) }' > $@
|
||||||
|
|
||||||
$(obj)/%.mod: FORCE
|
$(obj)/%.mod: FORCE
|
||||||
$(call if_changed,mod)
|
$(call if_changed,mod)
|
||||||
|
|||||||
Reference in New Issue
Block a user