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.

관련 정보