Viewing file: pr87793.c (1.27 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { 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); }
|