GCC内联汇编中%object与@object的含义及架构差异是什么?
你对GEN_ABSOLUTE_SYM_KCONFIG宏的展开逻辑、#是C预处理器字符串化操作符的理解完全正确。下面逐一解答你的疑问:
%object的含义与非宏参数的原因
.type是GNU汇编器(GAS)的内置伪指令,作用是给指定符号设置类型属性,供链接器做符号校验、段处理时使用。%object是.type伪指令的固定语法组成部分,作用是声明当前符号的类型为数据对象,不属于C宏的参数范畴,因此不需要出现在宏的形参列表中。
前缀%的作用与架构关联性
这个前缀是不同架构的GNU汇编语法中,用来标识后续标识符是类型关键字的分隔符,避免和同名普通符号产生语法歧义。%作为类型前缀是ARM、ARM64架构下GAS的标准语法要求。
x86版本中@object和%object的区别
二者功能完全一致,仅为不同架构的汇编语法差异:x86(含32位、64位)架构的GNU汇编规定,类型关键字的前缀必须使用@,因此Zephyr在做跨架构适配时,对x86平台做了单独的写法适配。
内容的提问来源于stack exchange,提问作者smwikipedia
相关产品推荐
相关产品推荐

