arm64アーキテクチャのEntry.SにOverflow_stack変数がどのように含まれていますか?

arm64アーキテクチャのEntry.SにOverflow_stack変数がどのように含まれていますか?

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

関連情報