Re: [PATCH 5.5 102/170] scripts/dtc: Remove redundant YYLOC global declaration

From: Nathan Chancellor
Date: Tue Mar 31 2020 - 05:53:29 EST


On Tue, Mar 31, 2020 at 10:58:36AM +0200, Greg Kroah-Hartman wrote:
> From: Dirk Mueller <dmueller@xxxxxxxx>
>
> commit e33a814e772cdc36436c8c188d8c42d019fda639 upstream.
>
> gcc 10 will default to -fno-common, which causes this error at link
> time:
>
> (.text+0x0): multiple definition of `yylloc'; dtc-lexer.lex.o (symbol from plugin):(.text+0x0): first defined here
>
> This is because both dtc-lexer as well as dtc-parser define the same
> global symbol yyloc. Before with -fcommon those were merged into one
> defintion. The proper solution would be to to mark this as "extern",
> however that leads to:
>
> dtc-lexer.l:26:16: error: redundant redeclaration of 'yylloc' [-Werror=redundant-decls]
> 26 | extern YYLTYPE yylloc;
> | ^~~~~~
> In file included from dtc-lexer.l:24:
> dtc-parser.tab.h:127:16: note: previous declaration of 'yylloc' was here
> 127 | extern YYLTYPE yylloc;
> | ^~~~~~
> cc1: all warnings being treated as errors
>
> which means the declaration is completely redundant and can just be
> dropped.
>
> Signed-off-by: Dirk Mueller <dmueller@xxxxxxxx>
> Signed-off-by: David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
> [robh: cherry-pick from upstream]
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
>
> ---
> scripts/dtc/dtc-lexer.l | 1 -
> 1 file changed, 1 deletion(-)
>
> --- a/scripts/dtc/dtc-lexer.l
> +++ b/scripts/dtc/dtc-lexer.l
> @@ -23,7 +23,6 @@ LINECOMMENT "//".*\n
> #include "srcpos.h"
> #include "dtc-parser.tab.h"
>
> -YYLTYPE yylloc;
> extern bool treesource_error;
>
> /* CAUTION: this will stop working if we ever use yyless() or yyunput() */
>
>

Hi Greg,

Replying here simply because I am not subscribed to the stable-commits
mailing list and there does not appear to be an easy way to reply to one
of those emails through the existing archives because they are not as
nice as lore.kernel.org.

This patch is fine for the current releases in review but 4.4, 4.9, and
4.14 need to have the patch applied to scripts/dtc/dtc-lexer.lex.c_shipped
because prior to commit e039139be8c2 ("scripts/dtc: generate lexer and
parser during build instead of shipping"), that was the file that was
being built. Running the command below in the stable-queue repo works
for me and I have tested all of the patches to make sure they still
apply (albeit with some fuzz).

$ sed -i 's;scripts/dtc/dtc-lexer.l;scripts/dtc/dtc-lexer.lex.c_shipped;g' \
queue-{4.4,4.9,4.14}/scripts-dtc-remove-redundant-yyloc-global-declaration.patch

If you would prefer a set of patches, let me know.

Cheers,
Nathan