Читая подпрограмму vector_swi()
для системного вызова arm linux, я обнаружил, что регистры 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()
и начинает выполнение.Регистр sp режима svc (sp_svc
) указывает на стек ядра.Регистры r0-r12 копируются в стек ядра.
Мой вопрос: как настраивается регистр sp (sp_svc
)?
Как узнать адрес стека ядра?Этот стек ядра совпадает со стеком ядра процесса (процесса, который вызвал системный вызов)?