이 변수는 매크로의 변수 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
.