[PATCH] fixdep: fix U-Boot own code to handle only valid symbol characters

Masahiro Yamada masahiroy at kernel.org
Tue Feb 18 12:35:06 CET 2020


On Tue, Feb 18, 2020 at 8:06 PM Masahiro Yamada <masahiroy at kernel.org> wrote:
>
> 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 <psmith at gnu.org>
> | Date:   Thu Dec 22 18:47:26 2016 -0500
> |
> |    [SV 20513] Un-escaped # are not comments in function invocations
>
> Signed-off-by: Masahiro Yamada <masahiroy at kernel.org>
> ---


Maybe, this can have this tag.

Fixes: 8be60f06c258 ("linux/kconfig.h: add CPP macros useful for
per-image config options")




> This patch is applicable to the current upstream code.
>
>
>  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 da7fb2cd4dde..6a668f114096 100644
> --- a/scripts/basic/fixdep.c
> +++ b/scripts/basic/fixdep.c
> @@ -262,7 +262,7 @@ static void parse_config_file(const char *map, size_t len)
>                     (q - p == 3 && !memcmp(p, "VAL(", 4))) {
>                         p = q + 1;
>                         for (q = p; q < map + len; q++)
> -                               if (*q == ')')
> +                               if (!(isalnum(*q) || *q == '_'))
>                                         goto found2;
>                         continue;
>
> --
> 2.17.1
>


-- 
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list