*/
#define ll_entry_declare(_type, _name, _list) \
_type _u_boot_list_2_##_list##_2_##_name __aligned(4) \
- __attribute__((unused, \
- section(".u_boot_list_2_"#_list"_2_"#_name)))
+ __attribute__((unused)) \
+ __section(".u_boot_list_2_"#_list"_2_"#_name)
/**
* ll_entry_declare_list() - Declare a list of link-generated array entries
*/
#define ll_entry_declare_list(_type, _name, _list) \
_type _u_boot_list_2_##_list##_2_##_name[] __aligned(4) \
- __attribute__((unused, \
- section(".u_boot_list_2_"#_list"_2_"#_name)))
+ __attribute__((unused)) \
+ __section(".u_boot_list_2_"#_list"_2_"#_name)
/*
* We need a 0-byte-size type for iterator symbols, and the compiler
#define ll_entry_start(_type, _list) \
({ \
static char start[0] __aligned(CONFIG_LINKER_LIST_ALIGN) \
- __attribute__((unused, \
- section(".u_boot_list_2_"#_list"_1"))); \
+ __attribute__((unused)) \
+ __section(".u_boot_list_2_"#_list"_1"); \
(_type *)&start; \
})
*/
#define ll_entry_end(_type, _list) \
({ \
- static char end[0] __aligned(4) __attribute__((unused, \
- section(".u_boot_list_2_"#_list"_3"))); \
+ static char end[0] __aligned(4) __attribute__((unused)) \
+ __section(".u_boot_list_2_"#_list"_3"); \
(_type *)&end; \
})
/**
*
* This is like ll_entry_get(), but without the extra code, so it is suitable
* for putting into data structures.
+ *
+ * @_type: C type of the list entry, e.g. 'struct foo'
+ * @_name: name of the entry
+ * @_list: name of the list
*/
#define ll_entry_ref(_type, _name, _list) \
((_type *)&_u_boot_list_2_##_list##_2_##_name)
*/
#define ll_start(_type) \
({ \
- static char start[0] __aligned(4) __attribute__((unused, \
- section(".u_boot_list_1"))); \
+ static char start[0] __aligned(4) __attribute__((unused)) \
+ __section(".u_boot_list_1"); \
(_type *)&start; \
})
*/
#define ll_end(_type) \
({ \
- static char end[0] __aligned(4) __attribute__((unused, \
- section(".u_boot_list_3"))); \
+ static char end[0] __aligned(4) __attribute__((unused)) \
+ __section(".u_boot_list_3"); \
(_type *)&end; \
})