在arm64架构中,overflow_stack变量如何包含在entry.S中?

在arm64架构中,overflow_stack变量如何包含在entry.S中?

overflow_stack变量用于kernel_ventry变量在宏拱门/arm64/内核/entry.S

    /* Switch to the overflow stack */
    adr_this_cpu sp, overflow_stack + OVERFLOW_STACK_SIZE, x0

在我看来,是在拱门/arm64/include/asm/stacktrace.h

DECLARE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)], overflow_stack);

然而,这个头文件不包含在entry.S中,也不包含在我能找到的任何其他有意义的头文件中。还有其他方式将其包含在内吗?

答案1

不,没有别的办法;overflow_stack未在包含的任何标头中声明或定义entry.S。但这不是一个错误就汇编程序而言;overflow_stack没有本地前缀,因此它最终作为 中的未定义符号arch/arm64/kernel/entry.o,在链接内核时解析。

跑步

make arch/arm64/kernel/entry.o

(或make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 arch/arm64/kernel/entry.o在除 之外的架构上arm64);然后

objdump -t arch/arm64/kernel/entry.o

将显示(除其他外)

0000000000000000         *UND*  0000000000000000 overflow_stack

overflow_stack+0x0000000000001000重定位表包括( overflow_stack + OVERFLOW_STACK_SIZE)的多个条目;跑去objdump -r arch/arm64/kernel/entry.o看他们。

相关内容