arch: arm: push ssf to thread privileged stack to complete stack frame
Pushes the seventh argument named ssf to thread's privileged stack to follow below syscall prototype. uintptr_t z_mrsh_xx(uintptr_t arg0, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, void *more, void *ssf) Fixes: #29386. Signed-off-by: Wentong Wu <wentong.wu@intel.com>
This commit is contained in:
parent
353c76919d
commit
bfc7785da0
1 changed files with 9 additions and 6 deletions
|
@ -374,6 +374,9 @@ SECTION_FUNC(TEXT, z_arm_do_syscall)
|
|||
mov r1, lr
|
||||
b dispatch_syscall
|
||||
valid_syscall:
|
||||
/* push ssf to privileged stack */
|
||||
mov r1, sp
|
||||
push {r1}
|
||||
/* push args to complete stack frame */
|
||||
push {r4,r5}
|
||||
|
||||
|
@ -396,8 +399,7 @@ dispatch_syscall:
|
|||
*/
|
||||
mov ip, r0
|
||||
mov r0, sp
|
||||
adds r0, #12
|
||||
ldr r0, [r0]
|
||||
ldr r0, [r0,#16]
|
||||
mov lr, r0
|
||||
/* Restore r0 */
|
||||
mov r0, ip
|
||||
|
@ -415,7 +417,8 @@ dispatch_syscall:
|
|||
|
||||
valid_syscall:
|
||||
/* push args to complete stack frame */
|
||||
push {r4,r5}
|
||||
mov ip, sp
|
||||
push {r4,r5,ip}
|
||||
|
||||
dispatch_syscall:
|
||||
ldr ip, =_k_syscall_table
|
||||
|
@ -426,7 +429,7 @@ dispatch_syscall:
|
|||
blx ip
|
||||
|
||||
/* restore LR */
|
||||
ldr lr, [sp,#12]
|
||||
ldr lr, [sp,#16]
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -467,14 +470,14 @@ dispatch_syscall:
|
|||
/* set stack back to unprivileged stack */
|
||||
mov ip, r0
|
||||
mov r0, sp
|
||||
ldr r0, [r0,#8]
|
||||
ldr r0, [r0,#12]
|
||||
msr PSP, r0
|
||||
/* Restore r0 */
|
||||
mov r0, ip
|
||||
|
||||
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
|
||||
/* set stack back to unprivileged stack */
|
||||
ldr ip, [sp,#8]
|
||||
ldr ip, [sp,#12]
|
||||
msr PSP, ip
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue