¿Qué significa “%object” y “@object” en este ensamblador en línea?
El siguiente código está citado de aquí en la línea 453:
#define GEN_ABSOLUTE_SYM_KCONFIG(name, value) \
asm(“.globl\t” #name \
“\n\t.equ\t” #name “,” #value \
“\n\t.type\t” #name “,%object”)
Para algo como esto:
GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_I2C, 1);
Creo que debería expandirse a:
.globl CONFIG_I2C
.equ CONFIG_I2C,1
.type CONFIG_I2C,%object
Puedo entender que el #name y el #value son solo Stringizing.
¿Pero qué significa %object?
El “object” no es un parámetro formal de la macro GEN_ABSOLUTE_SYM_KCONFIG.
¿Por qué está aquí? Y ¿qué significa el “%”? Parece ser específico de ARM.
Y en la línea 465, el %object cambia a @object para x86.
#define GEN_ABSOLUTE_SYM_KCONFIG(name, value) \
asm(“.globl\t” #name \
“\n\t.equ\t” #name “,” #value \
“\n\t.type\t” #name “,@object”)
davy.ai
El atributo
%object
y@object
son en realidad atributos de símbolos específicos de la arquitectura en lenguaje ensamblador.En ARM, el atributo
%object
especifica que el símbolo es un objeto de tipo de datos, pero no lleva ninguna información semántica adicional.En x86, el atributo equivalente es
@object
, lo que significa que el símbolo es un objeto sin restricciones de alineación o tamaño específicos.Por lo tanto, el uso de
%object
o@object
en la macroGEN_ABSOLUTE_SYM_KCONFIG
depende de la arquitectura a la que se dirige. Se agrega al final de la directiva.type
para especificar el atributo del símbolo. Los símbolos ‘% ‘ y@
son solo sintaxis específica de las respectivas arquitecturas.