linux下使用readelf -S prog, 可以看到一张elf格式的表。表中以.开头的是一个一个的段。 __attribute((section(name)))的作用就是将被该属性修饰的符号都放到名为name的段中。
示例代码main.c中的_func1与_func2被__section宏修饰,最终都会被放到自定义的名为.app_init_sec段中。
#include <stdio.h>
#include <string.h>
#define __section __attribute((section(".app_init_sec")))
typedef struct init_t{
int (*func)(void);
char *name;
}_init_t;
_init_t __app_init_start__;
_init_t __app_init_end__;
static int func1(void)
{
printf("call %s\n", __FUNCTION__);
return 0;
}
_init_t _func1 __section = {func1, "func1"};
static int func2(void)
{
printf("call %s\n", __FUNCTION__);
return 0;
}
_init_t _func2 __section = {func2, "func2"};
int main(int argc, char **argv)
{
_init_t *p;
for(p = &__app_init_start__; p < &__app_init_end__; p++){
printf("==%s\n&#