【发布时间】:2018-10-02 05:46:14
【问题描述】:
在阅读arm linux系统调用的vector_swi()例程时,我发现r0-r12寄存器被复制到内核堆栈(下面是代码)
ENTRY(vector_swi)
#ifdef CONFIG_CPU_V7M
v7m_exception_entry
#else
sub sp, sp, #S_FRAME_SIZE
stmia sp, {r0 - r12} @ Calling r0 - r12
据我了解,在系统调用期间 arm 进入 svc 模式并跳转到vector_swi() 例程并开始执行。 svc模式的sp寄存器(sp_svc)指向内核栈。 r0-r12 寄存器被复制到内核堆栈。
我的问题是如何设置 sp (sp_svc) 寄存器?
它如何知道内核栈的地址? 这个内核栈和进程(调用系统调用的进程)的内核栈一样吗?
【问题讨论】:
标签: linux linux-kernel operating-system arm system-calls