将变量或代码放入指定的段中(GCC)

将变量或代码放入指定的段中(GCC)

Content #

正常情况下,GCC编译出来的目标文件中,代码会被放到“.text”段,全局变量和静态变量会被放到“.data”和“.bss”段。但是有时候你可能希望变量或某些部分代码能够放到你所指定的段中去,以实现某些特定的功能。比如为了满足某些硬件的内存和I/O的地址布局,或者是像Linux操作系统内核中用来完成一些初始化和用户空间复制时出现页错误异常等。

GCC提供了一个扩展机制,使得程序员可以指定变量所处的段:

__attribute__((section("FOO"))) int global = 42;

__attribute__((section("BAR"))) void foo()
{
}

我们在全局变量或函数之前加上“_attribute_((section(“name”)))”属性就可以把相应的变量或函数放到以“name”作为段名的段中。

From #

程序员的自我修养