Linux kernel 什么是;拇指;ARM linux代码中的宏是什么?
我正在看head.S的ARM linux代码。 我知道拇指模式是什么。但是有一行,如Linux kernel 什么是;拇指;ARM linux代码中的宏是什么?,linux-kernel,arm,thumb,Linux Kernel,Arm,Thumb,我正在看head.S的ARM linux代码。 我知道拇指模式是什么。但是有一行,如THUMB(it eq),它是一个预定义的宏,如#define THUMB(x…)x 点实际上是写的 请告诉我宏是做什么的 ENTRY(stext) setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode @ and irqs disabled
THUMB(it eq)
,它是一个预定义的宏,如#define THUMB(x…)x
点实际上是写的
请告诉我宏是做什么的
ENTRY(stext)
setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode
@ and irqs disabled
mrc p15, 0, r9, c0, c0 @ get processor id
bl__lookup_processor_type @ r5=procinfo r9=cpuid
movs r10, r5 @ invalid processor (r5=0)?
THUMB( iteq ) @ force fixup-able long branch encoding
beq __error_p @ yes, error 'p'
THUMB()
预处理器宏用于根据目标指令集有条件地编译源程序集。如果内核是为ARM目标编译的,则THUMB()宏为no-op。相反,如果内核是为THUMB编译的,则THUMB()宏将扩展为其参数。请参阅。请参阅:和以获取更多条件化宏。这允许将相同的代码用于Thumb2(高级thumb)和常规ARM内核。宏使汇编程序(本例中为head.S)更容易阅读。通常是一堆#ifdef#endif
会分散注意力。由于90%以上的代码是相同的,因此维护一个文件比维护两个文件更容易。非常感谢。我现在明白了。困扰我的一件事是“it eq”或“it ne”指令,我无法理解。但至少现在,我想我可以跳过thumb things,它是一个特殊的thumb-2指令,允许有条件地执行多达4条后续指令。在Thumb-2模式下,有多种方式进行条件分支:16位条件短分支指令或IT+长分支指令。在本例中,explicitit eq
强制汇编程序使用长偏移量编码。无论如何,它只对拇指目标有意义。如果回答了您的问题,请将答案标记为已接受。