Linux内核为用户模式进程和内核模式进程提供了单独的堆栈,也有一些特殊的堆栈。这种特殊堆栈之一是放置在irq_stack_union中的大小为16千字节的中断堆栈
union irq_stack_union {
char irq_stack[IRQ_STACK_SIZE];
struct {
char gs_base[40];
unsigned long stack_canary;
};
};这里有指向这个堆栈的指针的定义- irq_stack_ptr。根据我的理解,这个irq_stack_ptr必须指向irq_stack的末尾,或者换句话说指向irq_stack + IRQ_STACK_SIZE - 1,但是irq_stack_ptr的定义是:
DEFINE_PER_CPU(char *, irq_stack_ptr) =
init_per_cpu_var(irq_stack_union.irq_stack) + IRQ_STACK_SIZE - 64;为什么我们在这里从irq_stack_union.irq_stack的末尾减去64个字节?
谢谢。
发布于 2016-12-13 08:15:14
作为边界使用,以避免意外越界?
https://stackoverflow.com/questions/32159700
复制相似问题