[PATCH v2 02/37] linker_lists: Allow use in data structures
Heinrich Schuchardt
xypron.glpk at gmx.de
Thu Feb 4 14:54:15 CET 2021
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?
Best regards
Heinrich
> +
> +/**
> + * ll_entry_ref() - Get a reference to a linker-generated array entry
> + *
> + * Once ll_entry_decl() has been used to declare the reference, this macro
> + * allows the entry to be accessed.
> + *
> + * This is like ll_entry_get(), but without the extra code, so it is suitable
> + * for putting into data structures.
> + */
> +#define ll_entry_ref(_type, _name, _list) \
> + ((_type *)&_u_boot_list_2_##_list##_2_##_name)
> +
> /**
> * ll_start() - Point to first entry of first linker-generated array
> * @_type: Data type of the entry
>
More information about the U-Boot
mailing list