[PATCH v2 02/37] linker_lists: Allow use in data structures

Simon Glass sjg at chromium.org
Sun Feb 7 15:37:23 CET 2021


Hi Heinrich,

On Thu, 4 Feb 2021 at 06:54, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 03.02.21 17:43, Simon Glass wrote:
> > At present linker lists are designed for use in code. They make use of
> > statements within expressions ({...}), for example.
> >
> > It is possible to generate a reference to a linker_list entry that can
> > be used in data structures, where such features are not permitted. It
> > requires that the reference first be declared as extern. In other
> > words the existing macro needs to be split into two parts.
> >
> > Add new macros to support this.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > (no changes since v1)
> >
> >  include/linker_lists.h | 28 ++++++++++++++++++++++++++++
> >  1 file changed, 28 insertions(+)
> >
> > diff --git a/include/linker_lists.h b/include/linker_lists.h
> > index fd98ecd297c..55631f0240c 100644
> > --- a/include/linker_lists.h
> > +++ b/include/linker_lists.h
> > @@ -211,6 +211,34 @@
> >               _ll_result;                                             \
> >       })
> >
> > +/**
> > + * ll_entry_decl() - Declare a linker-generated array entry reference as extern
> > + *
> > + * This declares a reference to a list entry so that it can be used later,
> > + * without needing the code in ll_entry_get().
> > + *
> > + * To use this, put ll_entry_decl() somewhere in your file, then use
> > + * ll_entry_ref() later on, to reference the entry.
> > + *
> > + * @_type:   Data type of the entry
> > + * @_name:   Name of the entry
> > + * @_list:   Name of the list in which this entry is placed
> > + */
> > +#define ll_entry_decl(_type, _name, _list)                           \
> > +     extern _type _u_boot_list_2_##_list##_2_##_name
>
> Can't you simply add the extern keyword to ll_entry_declare()?
>
> Why do we need entries with and entries without extern?

My original reason was because I wanted to prevent the non-extern
versions from being used in code not generated by dtoc, since this of
course breaks the whole thing.

But so far I have not enforced this, so I am OK with doing what you
suggest. It is easy enough to change later if it causes problems.

Regards,
Simon


More information about the U-Boot mailing list