关于Linux内核中当前宏的工作(我指的是ARM架构)
当前宏的代码:
return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
这意味着
struct thread_info
被放在堆栈的顶部?这是linux内核开发第三版:
struct thread_info
位于堆栈的底部(对于向下生长的堆栈)和顶部(对于向上生长的堆栈)。如何通过被覆盖来防止这种情况?
最佳答案
THREAD_SIZE
是一个幂为2的常数,它给出为线程堆栈分配的内存量。
表达式~(THREAD_SIZE - 1)
然后给出一个位掩码,用于除去实际的堆栈地址。对于8kb的堆栈,应该是0xffffff00。
通过按位并使用堆栈指针值,我们得到为堆栈分配的最低地址。
堆栈指针对于获取线程信息很有用,因为每个线程都有自己的堆栈。