该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
看他们。