中断栈的栈指针

3

Linux内核有针对用户模式和内核模式进程以及一些特殊堆栈的独立堆栈。其中之一是中断堆栈,大小为16千字节,位于irq_stack_union中:

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个字节?
谢谢。
1个回答

0

用作边距以避免意外越界?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接