この変数はマクロの変数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
。