我正在查看 head-common.S 文件中的 __mmap_switched 函数:
.long init_thread_union + THREAD_START_SP @ sp //for stack pointer
THREAD_START_SP在"thread+info.h"中被定义为THREAD_SIZE(8192)- 8。
设置堆栈大小为8KB(8129),减去8个字节。
为什么要减去8个字节?
我怀疑是因为DA(递减后)的原因。
push
/pop
助记符实现为stmfd sp!,...
和ldmfd sp!,...
因此在推送时是减量前,在弹出时是增量后。但由于ARM上的字只有四个字节,这种差异无法解释为什么它保留了八个。我猜测是一个初始的fp
/lr
对,但需要查找eABI以验证。 - FrankH.