在以下代码行中(声明一个全局变量),
unsigned int __attribute__((section(".myVarSection,\"aw\",@nobits#"))) myVar;
“aw”标志是什么意思?
我的理解是nobits标志会阻止变量初始化为零,但我很难找到有关“aw”标志的信息。
另外,@和#在nobits标志周围有什么意义?
答案 0 :(得分:17)
section("section-name")
属性通过生成以下汇编程序行将变量放在特定部分中:
.section section-name,"aw",@progbits
当您将section-name
设置为".myVarSection,\"aw\",@nobits#"
时,您会利用某种" code injection"在GCC中产生:
.section .myVarSection,"aw",@nobits#,"aw",@progbits
请注意,#
符号会开始一行注释。
有关.section
指令的完整说明,请参阅GNU Assembler manual。一般语法是
.section name [, "flags"[, @type[,flag_specific_arguments]]]
所以"aw"
是标志:
和@nobits
是一种类型:
以上所有内容也适用于functions,而不仅仅是变量。
答案 1 :(得分:4)
“aw”标志是什么意思?
这意味着该部分是可分配的(即它在运行时被加载到内存中)并且是可写的(当然也是可读的)。
我的理解是nobits标志会阻止变量初始化为零,但我很难找到有关“aw”标志的信息。
另外,@和#在nobits标志周围有什么意义?
@nobits(@只是名称的一部分)意味着该部分未存储在磁盘上的映像中,它只存在于运行时(并且在启动时填充为零)。
#character开始注释,因此除了你指定的内容之外,编译器将添加的内容将被忽略。