【发布时间】:2017-08-27 20:09:18
【问题描述】:
我了解到 thread_info 存储在堆栈的底部。
在查看内核源代码时,我试图了解如何在 linux 内核中获取当前的 thread_info?
下面的源码是current_stack_pointer的13bits masking。
这是我无法得到的。 我不明白 thread_info 的位置发生了变化。 为什么是当前栈指针而不是栈的开始?
请帮助我理解这段代码
/* * 如何在 C 中获取当前堆栈指针 */ 注册 unsigned long current_stack_pointer asm ("sp"); /* * 如何从 C 中获取线程信息结构体 */ 静态内联结构 thread_info *current_thread_info(void) __attribute_const__; 静态内联结构 thread_info *current_thread_info(void) { 返回(结构线程信息*) (current_stack_pointer & ~(THREAD_SIZE - 1)); }【问题讨论】:
-
您使用的是什么架构?查找当前任务信息是依赖于架构的。这就是为什么有
include/asm/current.h和#define current。在 x86 上,我们有#define current get_current(),但在 IBM s390 上,我们有#define current ((struct task_struct *const)S390_lowcore.current_task)。所以,要小心地复制堆栈指针。 -
感谢您的评论。我正在使用 ARM 架构。 arch/arm/include/asm/thread_info.h
标签: c linux multithreading stack kernel