From patchwork Tue Feb 18 11:11:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 236483 List-Id: U-Boot discussion From: masahiroy at kernel.org (Masahiro Yamada) Date: Tue, 18 Feb 2020 20:11:23 +0900 Subject: [PATCH B] fixdep: fix U-Boot own code to handle only valid symbol characters Message-ID: <20200218111123.25423-1-masahiroy@kernel.org> Currently, fixdep skips parsing include/linux/kconfig.h, but if it parsed it, it would translate the following code in kconfig.h config_enabled(CONFIG_VAL(option##_MODULE) into: $(wildcard include/config/option##/module.h) When Kbuild includes .*.cmd, it would emit the following error: *** unterminated call to function 'wildcard': missing ')'. Stop. This issue prevents us from importing the upstream Linux commit 638e69cf2230 ("fixdep: do not ignore kconfig.h"). Fix this by handling only alphanumerical characters and underscores. This makes sense because they match to the valid character sets in Kconfig symbols. As a side-note, you can reproduce this issue only on GNU Make <= 4.2.1 For GNU Make <= 4.2.1, the '#' always means the start of a comment. Hence, GNU Make thinks the closing ')' is missing. The following commit in GNU Make changed how it handles '#' in function invocations. So, this does not happen for GNU Make 4.3 | commit c6966b323811c37acedff05b576b907b06aea5f4 | Author: Paul Smith | Date: Thu Dec 22 18:47:26 2016 -0500 | | [SV 20513] Un-escaped # are not comments in function invocations Fixes: 8be60f06c258 ("linux/kconfig.h: add CPP macros useful for per-image config options") Signed-off-by: Masahiro Yamada --- This patch is applicable on top of Tom's resync: scripts/basic/fixdep.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index 8c21dd08d9f7..0ff564a5cc86 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c @@ -255,7 +255,7 @@ static void parse_config_file(const char *p) (q - p == 9 && !memcmp(p, "IS_MODULE(", 10)) || (q - p == 3 && !memcmp(p, "VAL(", 4))) { p = q + 1; - while (*q && *q != ')') + while (isalnum(*q) || *q == '_') q++; r = q; if (r > p && is_spl_build) {