バイナリのセクション ( など) にいくつかの変数を格納し、それらを反復処理しようとして__attribute((__section__("counters")))
いますが、そのセクションの開始方向を取得する方法が見つかりません。
GCC のドキュメントを読むと、(自動的に?) 2 つの変数が作成されていることがわかりまし__start_counters
た__stop_counters
。
私の質問は、セクションにいくつかの変数を保存し、それらの変数を取得するにはどうすればよいですか?
編集:
私が達成しようとしていることを示す最小限のコンパイル可能なコード。
#include <stdio.h>
char a, b, c;
struct counter_info {
int counter;
char *name;
} __attribute__((packed));
#define __PUT_STUFF_IN_SECTION(name) \
do{ \
static struct counter_info __counter_info_##name \
__attribute((__section__("counters"))) \
__attribute((__used__)) = { \
.name = #name, \ <--------- this line causes *a lot of* errors, remove to actually compile the code
.counter = 0, \
}; \
}while(0)
extern struct counter_info __start_counters;
extern struct counter_info __stop_counters;
int main(int argc, char **argv){
printf("Start!\n");
__PUT_STUFF_IN_SECTION(a);
__PUT_STUFF_IN_SECTION(b);
__PUT_STUFF_IN_SECTION(c);
struct counter_info *iter = &__start_counters;
for(; iter < &__stop_counters; ++iter){
printf("Name: %s | Counter: %d.\n", &iter->name, &iter->counter);
}
printf("End!\n");
return 0;
}