ARM Linux内核head-common.S文件

3
我正在查看 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(递减后)的原因。


相反,完全降序(FD)- ARM的push / pop助记符实现为stmfd sp!,...ldmfd sp!,...因此在推送时是减量前,在弹出时是增量后。但由于ARM上的字只有四个字节,这种差异无法解释为什么它保留了八个。我猜测是一个初始的fp / lr对,但需要查找eABI以验证。 - FrankH.
https://dev59.com/7oLba4cB1Zd3GeqPdVy5#25244273 - auselen
1个回答

2

这根本没有回答“为什么”。如果减去8后它仍然是8字节对齐的,那么在此之前它已经是“已经8字节对齐”的状态了。 - Notlikethat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接