Masahiro Yamada
6f9ac9f442
fixdep: check return value of printf() and putchar()
...
When there is not enough space on your storage device, the build will
fail with 'No space left on device' error message.
The reason is obvious from the message, so you will free up some disk
space, then you will resume the build.
However, sometimes you may still see a mysterious error message:
unterminated call to function 'wildcard': missing ')'.
If you run out of the disk space, fixdep may end up with generating
incomplete .*.cmd files.
For example, if the disk-full error occurs while fixdep is running
print_dep(), the .*.cmd might be truncated like this:
$(wildcard include/config/
When you run 'make' next time, this broken .*.cmd will be included,
then Make will terminate parsing since it is a wrong syntax.
Once this happens, you need to run 'make clean' or delete the broken
.*.cmd file manually.
Even if you do not see any error message, the .*.cmd files after any
error could be potentially incomplete, and unreliable. You may miss
the re-compilation due to missing header dependency.
If printf() cannot output the string for disk shortage or whatever
reason, it returns a negative value, but currently fixdep does not
check it at all. Consequently, fixdep *successfully* generates a
broken .*.cmd file. Make never notices that since fixdep exits with 0,
which means success.
Given the intended usage of fixdep, it must respect the return value
of not only malloc(), but also printf() and putchar().
This seems a long-standing issue since the introduction of fixdep.
In old days, Kbuild tried to provide an extra safety by letting fixdep
output to a temporary file and renaming it after everything is done:
scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\
rm -f $(depfile); \
mv -f $(dot-target).tmp $(dot-target).cmd)
It was no help to avoid the current issue; fixdep successfully created
a truncated tmp file, which would be renamed to a .*.cmd file.
This problem should be fixed by propagating the error status to the
build system because:
[1] Since commit 9c2af1c737 ("kbuild: add .DELETE_ON_ERROR special
target"), Make will delete the target automatically on any failure
in the recipe.
[2] Since commit 392885ee82 ("kbuild: let fixdep directly write to
.*.cmd files"), .*.cmd file is included only when the corresponding
target already exists.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2019-07-01 10:30:39 +09:00
..
atomic
locking/atomics: Don't assume that scripts are executable
2019-04-19 14:21:43 +02:00
basic
fixdep: check return value of printf() and putchar()
2019-07-01 10:30:39 +09:00
coccinelle
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 257
2019-06-05 17:30:27 +02:00
dtc
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441
2019-06-05 17:37:17 +02:00
gcc-plugins
gcc-plugins: Handle unusual header environment
2019-05-31 10:26:05 -07:00
gdb
scripts/gdb: fix invocation when CONFIG_COMMON_CLK is not set
2019-06-01 15:51:31 -07:00
genksyms
genksyms: Teach parser about 128-bit built-in types
2019-06-24 03:43:03 +09:00
kconfig
kconfig: tests: fix recursive inclusion unit test
2019-06-05 02:33:10 +09:00
ksymoops
mod
kbuild: modversions: Fix relative CRC byte order interpretation
2019-03-28 23:46:56 +09:00
package
kbuild: deb-pkg: do not run headers_check
2019-06-15 19:57:02 +09:00
selinux
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
2019-05-30 11:26:35 -07:00
tracing
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
.gitignore
scripts: remove unnecessary ihex2fw and check-lc_ctypes from .gitignore
2018-12-22 00:37:52 +09:00
adjust_autoksyms.sh
kbuild: source include/config/auto.conf instead of ${KCONFIG_CONFIG}
2019-03-14 02:39:11 +09:00
asn1_compiler.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 36
2019-05-24 17:27:11 +02:00
bin2c.c
bloat-o-meter
bloat-o-meter: ignore __addressable_ symbols
2018-12-28 12:11:44 -08:00
bootgraph.pl
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 391
2019-06-05 17:37:11 +02:00
bpf_helpers_doc.py
bpf: fix script for generating man page on BPF helpers
2019-05-13 01:12:45 +02:00
cc-can-link.sh
check_extable.sh
checkincludes.pl
checkkconfigsymbols.py
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
checkpatch.pl
checkpatch.pl: Update DT vendor prefix check
2019-05-22 14:54:49 -05:00
checkstack.pl
scripts/checkstack.pl: Fix arm64 wrong or unknown architecture
2019-06-05 02:33:10 +09:00
checksyscalls.sh
checksyscalls: fix up mq_timedreceive and stat exceptions
2019-02-19 21:27:53 +01:00
checkversion.pl
clang-version.sh
kbuild: update comment block of scripts/clang-version.sh
2019-03-04 22:34:54 +09:00
cleanfile
cleanpatch
coccicheck
coccicheck: return proper error code on fail
2018-08-14 08:58:56 +09:00
config
conmakehash.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 54
2019-05-24 17:36:42 +02:00
const_structs.checkpatch
decode_stacktrace.sh
scripts/decode_stacktrace.sh: handle RIP address with segment
2019-03-05 21:07:13 -08:00
decodecode
scripts/decodecode: set ARCH when running natively on arm/arm64
2018-12-28 12:11:44 -08:00
depmod.sh
kbuild: modules_install: warn when missing System.map file
2018-09-09 09:14:07 +09:00
diffconfig
documentation-file-ref-check
scripts/documentation-file-ref-check: detect broken :doc:foo
2019-05-03 06:45:22 -06:00
export_report.pl
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 209
2019-05-30 11:29:53 -07:00
extract-cert.c
extract-ikconfig
extract-module-sig.pl
extract-sys-certs.pl
extract-vmlinux
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 378
2019-06-05 17:37:10 +02:00
extract_xc3028.pl
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 339
2019-06-05 17:37:07 +02:00
faddr2line
scripts/faddr2line: fix location of start_kernel in comment
2018-11-18 10:15:09 -08:00
file-size.sh
find-unused-docs.sh
gcc-goto.sh
jump_label: move 'asm goto' support test to Kconfig
2019-01-06 09:46:51 +09:00
gcc-ld
gcc-plugin.sh
gcc-version.sh
kbuild: clean up scripts/gcc-version.sh
2019-03-04 22:35:04 +09:00
gcc-x86_32-has-stack-protector.sh
gcc-x86_64-has-stack-protector.sh
gen_compile_commands.py
scripts: add a tool to produce a compile_commands.json file
2018-12-19 23:41:36 +09:00
gen_ksymdeps.sh
kbuild: simplify dependency generation for CONFIG_TRIM_UNUSED_KSYMS
2018-12-01 23:13:14 +09:00
get_dvb_firmware
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61
2019-05-24 17:36:45 +02:00
get_maintainer.pl
get_maintainer: allow option --mpath <directory> to read all files in <directory>
2018-08-22 10:52:48 -07:00
gfp-translate
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
headerdep.pl
headers_check.pl
headers_install.sh
kbuild: simplify scripts/headers_install.sh
2019-06-15 19:57:02 +09:00
insert-sys-cert.c
kallsyms.c
Kbuild updates for v5.1
2019-03-10 17:48:21 -07:00
Kbuild.include
kbuild: save $(strip ...) for calling if_changed and friends
2019-07-01 10:03:40 +09:00
Kconfig.include
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
kernel-doc
kernel-doc: suppress 'not described' warnings for embedded struct fields
2019-01-16 15:04:01 -07:00
ld-version.sh
leaking_addresses.pl
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
Lindent
link-vmlinux.sh
Kbuild updates for v5.2
2019-05-08 12:25:12 -07:00
Makefile
kbuild: remove build_unifdef target in scripts/Makefile
2019-06-15 19:57:01 +09:00
Makefile.asm-generic
kbuild: force all architectures except um to include mandatory-y
2019-03-17 12:56:32 +09:00
Makefile.build
kbuild: add support for ensuring headers are self-contained
2019-06-15 19:57:02 +09:00
Makefile.clean
kbuild: remove deprecated host-progs variable
2018-08-09 21:51:17 +09:00
Makefile.dtbinst
Makefile.extrawarn
kbuild: Remove unnecessary -Wno-unused-value
2019-06-24 03:43:03 +09:00
Makefile.gcc-plugins
gcc-plugins: structleak: Generalize to all variable types
2019-03-04 09:29:41 -08:00
Makefile.headersinst
kbuild: fix 'No such file or directory' warning for headers_install
2019-06-24 03:43:03 +09:00
Makefile.host
kbuild: remove 'addtree' and 'flags' magic for header search paths
2019-05-18 11:49:57 +09:00
Makefile.kasan
kasan: remove use after scope bugs detection.
2019-03-05 21:07:13 -08:00
Makefile.kcov
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
Makefile.lib
kbuild: add support for ensuring headers are self-contained
2019-06-15 19:57:02 +09:00
Makefile.modbuiltin
kbuild: use $(srctree) instead of KBUILD_SRC to check out-of-tree build
2019-04-02 23:28:04 +09:00
Makefile.modinst
Revert "modsign: Abort modules_install when signing fails"
2019-03-17 12:56:31 +09:00
Makefile.modpost
modpost: make KBUILD_MODPOST_WARN also configurable for external modules
2019-04-11 23:11:51 +09:00
Makefile.modsign
Makefile.ubsan
ubsan: Remove vla bound checks.
2019-05-06 11:12:09 -07:00
makelst
markup_oops.pl
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 373
2019-06-05 17:37:10 +02:00
mkcompile_h
kbuild: remove unnecessary in-subshell execution
2019-01-28 09:11:17 +09:00
mkmakefile
kbuild: mkmakefile: generate a simple wrapper of top Makefile
2019-04-02 23:27:38 +09:00
mksysmap
mkuboot.sh
module-common.lds
modules-check.sh
kbuild: do not check name uniqueness of builtin modules
2019-05-21 08:54:05 +09:00
namespace.pl
objdiff
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 199
2019-05-30 11:29:23 -07:00
parse-maintainers.pl
patch-kernel
pnmtologo.c
profile2linkerlist.pl
prune-kernel
recordmcount.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 378
2019-06-05 17:37:10 +02:00
recordmcount.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 378
2019-06-05 17:37:10 +02:00
recordmcount.pl
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
setlocalversion
scripts/setlocalversion: Improve -dirty check with git-status --no-optional-locks
2018-11-21 23:57:33 +09:00
show_delta
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 438
2019-06-05 17:37:17 +02:00
sign-file.c
sortextable.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 378
2019-06-05 17:37:10 +02:00
sortextable.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 378
2019-06-05 17:37:10 +02:00
spdxcheck-test.sh
scripts: add spdxcheck.py self test
2018-12-28 12:11:44 -08:00
spdxcheck.py
spdxcheck.py: fix directory structures
2019-06-01 15:51:31 -07:00
spelling.txt
scripts/spelling.txt: add more spellings to spelling.txt
2019-03-07 18:31:59 -08:00
sphinx-pre-install
SPDX update for 5.2-rc3, round 1
2019-05-31 08:34:32 -07:00
split-man.pl
stackdelta
stackusage
subarch.include
selftests: add headers_install to lib.mk
2018-09-05 08:12:09 -06:00
tags.sh
treewide: Add SPDX license identifier for missed files
2019-05-21 10:50:45 +02:00
unifdef.c
unifdef: use memcpy instead of strncpy
2018-11-30 14:45:01 -08:00
ver_linux
ver_linux: Assign constant RE to variable name for clarity
2019-01-22 13:34:35 +01:00
xen-hypercalls.sh
xz_wrap.sh