44 lines
1.3 KiB
C
44 lines
1.3 KiB
C
/* { dg-do compile } */
|
|
/* { dg-skip-if "No section attribute" { { hppa*-*-hpux* } && { ! lp64 } } } */
|
|
/* { dg-options "-fpic -Os -g" } */
|
|
/* { dg-require-effective-target fpic } */
|
|
|
|
struct fit_loadable_tbl {
|
|
int type;
|
|
void (*handler)(int data, int size);
|
|
};
|
|
|
|
#define ll_entry_start(_type, _list) \
|
|
({ \
|
|
static char start[0] __attribute__((aligned(4))) \
|
|
__attribute__((unused, section(".u_boot_list_2_"#_list"_1"))); \
|
|
(_type *)&start; \
|
|
})
|
|
|
|
#define ll_entry_end(_type, _list) \
|
|
({ \
|
|
static char end[0] __attribute__((aligned(4))) \
|
|
__attribute__((unused, section(".u_boot_list_2_"#_list"_3"))); \
|
|
(_type *)&end; \
|
|
})
|
|
|
|
#define ll_entry_count(_type, _list) \
|
|
({ \
|
|
_type *start = ll_entry_start(_type, _list); \
|
|
_type *end = ll_entry_end(_type, _list); \
|
|
unsigned int _ll_result = end - start; \
|
|
_ll_result; \
|
|
})
|
|
|
|
void test(int img_type, int img_data, int img_len)
|
|
{
|
|
int i;
|
|
const unsigned int count =
|
|
ll_entry_count(struct fit_loadable_tbl, fit_loadable);
|
|
struct fit_loadable_tbl *fit_loadable_handler =
|
|
ll_entry_start(struct fit_loadable_tbl, fit_loadable);
|
|
|
|
for (i = 0; i < count; i++, fit_loadable_handler++)
|
|
if (fit_loadable_handler->type == img_type)
|
|
fit_loadable_handler->handler(img_data, img_len);
|
|
}
|