今天遇到一个有趣的问题:
内核栈的栈底(高地址)8个字节是预留出来处理bug的,所以在寻找栈底的时候用到这个宏:
#define task_pt_regs(task) /
({ /
struct pt_regs *__regs__; /
__regs__ = (struct pt_regs *)(KSTK_TOP(task_stack_page(task))-8); /
__regs__ - 1; /
})
KSTK_TOP是实质工作的函数,定义如下:
#define KSTK_TOP(info) /
({ /
unsigned long *__ptr = (unsigned long *)(info); /
(unsigned long)(&__ptr[THREAD_SIZE_LONGS]); /
})
info就是tsk->thread_info这