Linux kernel armlinux内核头common.S
我看起来很普通 在uuu mmap_u开关处:Linux kernel armlinux内核头common.S,linux-kernel,arm,Linux Kernel,Arm,我看起来很普通 在uuu mmap_u开关处: .long init_thread_union + THREAD_START_SP @ sp //for stack pointer THREAD_START_SP是在“THREAD+info.h”中定义的线程大小(8192)-8 设置堆栈大小为8KB(8129)和负8字节 为什么是负8字节 我怀疑,我认为DA(减量后)正确吗?8字节对齐是APCS的要求 在APCS中,第5.2.1章介绍了堆栈 堆栈在公共接口上还必须符合以下约束: SP mo
.long init_thread_union + THREAD_START_SP @ sp //for stack pointer
THREAD_START_SP是在“THREAD+info.h”中定义的线程大小(8192)-8
设置堆栈大小为8KB(8129)和负8字节
为什么是负8字节
我怀疑,我认为DA(减量后)正确吗?8字节对齐是APCS的要求 在APCS中,第5.2.1章介绍了堆栈 堆栈在公共接口上还必须符合以下约束: SP mod 8=0。堆栈必须双字对齐。
相反,在(完全下降-FD)之前减量-ARM
push
/pop
助记符实现为stmfd sp代码>和ldmfd sp代码>所以它在按下之前是递减的,在按下之后是递增的。但由于ARM上的字只有四个字节,这种差异无法解释为什么它保留了八个字节。我猜是一个初始的fp
/lr
对,但需要查找eABI来验证。FrankH//感谢您的评论:)可能的重复项根本无法回答“为什么”。如果减去8使其保持8字节对齐,那么它之前已经是8字节对齐的。