Re: [RFC PATCH 32/77] dtc-parser: Introduce last_header_flags
David Gibson <[email protected]> Thu, 15 Jan 2026 17:31:24 +1100
| Newsgroups | org.kernel.vger.devicetree-spec,org.kernel.vger.devicetree-compiler,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <aWiJvEEgjl44h6vd@zatzit> |
On Mon, Jan 12, 2026 at 03:19:22PM +0100, Herve Codina wrote: > The parser needs to get header flags value in different places. > > It relies on the fact that the rule used to parse the dts file is always > headers memreserves devicetree > > With that only rule to parse the file, it uses '$<flags>-1' construct to > get the flags value. > > With the future introduction of import symbols parsing, this rule will > change and the parser couldn't rely anymore on '$<flags>-1' to get flags > value. Indeed, import symbols parsing will add a new optional symbol in > this rule leading to two possible rules (with and without the new > symbol) to parse the source file. > > Introduce the last_header_flags variable to explicitly keep track of > flags while also being agnostic of the rule structure and use this new > variable instead of '$<flags>-1'. I'm not sure this approach is safe: I'm not sure bison guarantees that semantic rules will always be executed in the same order, so using global variables is risky. > > Signed-off-by: Herve Codina <[email protected]> > --- > dtc-parser.y | 28 +++++++++------------------- > 1 file changed, 9 insertions(+), 19 deletions(-) > > diff --git a/dtc-parser.y b/dtc-parser.y > index 4e46e9d..48c40e8 100644 > --- a/dtc-parser.y > +++ b/dtc-parser.y > @@ -24,6 +24,8 @@ extern void yyerror(char const *s); > extern struct dt_info *parser_output; > extern bool treesource_error; > > +unsigned int last_header_flags; > + > static bool is_ref_relative(const char *ref) > { > return ref[0] != '/' && strchr(&ref[1], '/'); > @@ -122,14 +124,17 @@ header: > DT_V1 ';' > { > $$ = DTSF_V1; > + last_header_flags = $$; > } > | DT_V1 ';' DT_PLUGIN ';' > { > $$ = DTSF_V1 | DTSF_PLUGIN; > + last_header_flags = $$; > } > | DT_V1 ';' DT_ADDON ';' > { > $$ = DTSF_V1 | DTSF_ADDON; > + last_header_flags = $$; > } > ; > > @@ -179,12 +184,7 @@ devicetree: > } > | dt_ref nodedef > { > - /* > - * We rely on the rule being always: > - * versioninfo plugindecl memreserves devicetree > - * so $-1 is what we want (plugindecl) > - */ > - if (!($<flags>-1 & DTSF_PLUGIN)) > + if (!(last_header_flags & DTSF_PLUGIN)) > ERROR(&@2, "Label or path %s not found", $1); > else if (is_ref_relative($1)) > ERROR(&@2, "Label-relative reference %s not supported in plugin", $1); > @@ -197,7 +197,7 @@ devicetree: > { > struct node *target = get_node_by_ref($1, $3); > > - if (($<flags>-1 & DTSF_PLUGIN) && is_ref_relative($3)) > + if ((last_header_flags & DTSF_PLUGIN) && is_ref_relative($3)) > ERROR(&@2, "Label-relative reference %s not supported in plugin", $3); > > if (target) { > @@ -209,12 +209,7 @@ devicetree: > } > | devicetree DT_PATH_REF nodedef > { > - /* > - * We rely on the rule being always: > - * versioninfo plugindecl memreserves devicetree > - * so $-1 is what we want (plugindecl) > - */ > - if ($<flags>-1 & DTSF_PLUGIN) { > + if (last_header_flags & DTSF_PLUGIN) { > if (is_ref_relative($2)) > ERROR(&@2, "Label-relative reference %s not supported in plugin", $2); > add_orphan_node($1, $3, $2); > @@ -235,12 +230,7 @@ devicetree: > if (target) { > merge_nodes(target, $3); > } else { > - /* > - * We rely on the rule being always: > - * versioninfo plugindecl memreserves devicetree > - * so $-1 is what we want (plugindecl) > - */ > - if ($<flags>-1 & DTSF_PLUGIN) > + if (last_header_flags & DTSF_PLUGIN) > add_orphan_node($1, $3, $2); > else > ERROR(&@2, "Label or path %s not found", $2); > -- > 2.52.0 > > -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson
signature.asc
(application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEO+dNsU4E3yXUXRK2zQJF27ox2GcFAmloibsACgkQzQJF27ox 2GctTxAArIaYcAx5BfzErPm2b3uAnq05+14OaemloPupBOCsIIkR8y50t4lu68S/ LVKUI4lXfa29dixnh7nHiM1YN/EZYvsu4EbuERaxXSMYbYdzJ6NFAvgPYQ5vDLFS rcVjOHB8RIW46VXX/IkdFAgbEk+Z9oIl+D0bDGe37v7EGRdHycHKf/aP11iXr+qK YJ+DX0ijqBKtBPm3/LgRiLTjKAjMLQph1YwJEc2K79YhiUz5slRJV9rIBJ0397n+ 3LRi+ToWvze5HRMXCcxLPqE/v7pv3ONLldkDI109rZpFoNECzLvHFLS+9yiX0Rg7 Oan8JrELq4E7ylrmqmDP3EwG2k/Y4wVJ1BtQaOtuuse3hd1VM9ibl5pz5MKXPj5N lMJv12od9rDuQU8TZctPELVkkPx5vqgDid+jezNEoudQQNhajMw2ARSps/2yjNKk tVlBzIAPpEom/rCe3oT82e5lm59wG7y90LTgJsyqiNKweIflDPsKoHaGntwsXTLD QnZzZ4pRD/cjVmhUBC9QBwW28K6Mozryv5lBamnmNKn8aQn52kb9huzguvEujCpl fhCmNZgXcfbca1LzDpg0D3rCmnw1vijzs272mYXSFYYRv98fEAJIVRKju8M8wMx5 /XIawOht6ZLmgqFIyDkldNi06jonW8Pi6WPGkRnopwCeYpmw5LU= =r0Kz -----END PGP SIGNATURE-----