Thank you for your answer if __ARM_ARCH_2__ is defined by GCC when compiling for the ARMv2 architecture,how do gcc know the architecture is ARMv2? and I can't find thing about __ARM_ARCH_2__ in gcc manual,could you tell me where I can find 2013/8/8 Kyrylo Tkachov <kyrylo.tkachov@xxxxxxx>: >> Hi >> >> In linux/arch/arm/boot/ >> compressed/head.S: >> >> >> #ifndef __ARM_ARCH_2__ >> /* >> * Booting from Angel - need to enter SVC mode and disable >> * FIQs/IRQs (numeric definitions from angel arm.h source). >> * We only do this if we were in user mode on entry. >> */ >> mrs r2, cpsr @ get current mode >> tst r2, #3 @ not user? >> bne not_angel >> mov r0, #0x17 @ angel_SWIreason_EnterSVC >> swi 0x123456 @ angel_SWI_ARM >> >> >> I don't know what the"__ARM_ARCH_2__" mean? > > __ARM_ARCH_2__ is defined by GCC when compiling for the ARMv2 architecture. > GCC defines an __ARM_ARCH_<architecture version>__ predefine when compiling > for a particular architecture. > > In the snippet you posted it is used to make sure the code below the #ifndef > is not used/compiled when targeting ARMv2. > > HTH, > Kyrill > > P.S. In the future, questions like these go on the gcc-help list. The gcc list > is used for discussions on the development of gcc. > > >