gcc的__attribute__编译属性有很多子项,用于改变作用对象的特性。这里讨论section子项的作用。
__attribute__的section子项使用方式为:
1 |
|
其作用是将作用的函数或数据放入指定名为"section_name"的段。
看以下程序片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
在自定义的.myown段依次填入mspec1/mspec2/mspec3的函数指针,并在do_initcalls中依次调用,从而达到构造并调用初始化函数列表的目的。
两个extern变量:
1 2 |
|
来自ld的链接脚本,可以使用:
1 |
|
获取内置lds脚本,并在:
1 |
|
之前添加以下内容:
1 2 3 4 |
|
即定义了.myown段及_myown_start/_myown_end变量(0x90000000这个数值可能需要调整)。
保存修改后的链接器脚本,假设程序为s.c,链接器脚本保存为s.lds,使用以下命令编译:
1 |
|
执行结果:
1 2 3 4 5 6 7 |
|
Have Fun!
转载:http://my.oschina.net/senmole/blog/50710