attribute section 属性
一、__attribute__((__section__(section_name))) 简介
1. __attribute__((section("name"))) 是gcc编译器支持的一个编译特性(arm编译器也支持此特性),实现在编译时把某个函数/数据放到名为name的数据段中。原理如下:
(1) 模块通过 __attribute__((section("name"))),会构建初始化函数表,放到你命名为的name数据段中。
(2) 而默认链接脚本缺少自定义的数据段的声明,需要在链接脚本添加你定义的数据段的声明。
(3) main在执行初始化时,只需要把name数据段中的所有初始化接口执行一遍,即可实现不同模块间的隔离效果。
那么这里有两个问题 :
(1) 如何再链接脚本中添加自己定义的数据段的声明.
(2) main是如何将放入数据段的模块接口都执行了一遍.
2. 链接脚本处理
内核是根据不同的架构,调用内核自己写的对应的链接脚本。ld链接命令有两个关键的选项如下:
ld -T