12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- ;/*
- ; * Copyright (c) 2006-2022, RT-Thread Development Team
- ; *
- ; * SPDX-License-Identifier: Apache-2.0
- ; *
- ; * Change Logs:
- ; * Date Author Notes
- ; * 2019-10-25 tyx first version
- ; * 2021-03-26 lxf modify bad instruction
- ; */
- ;/*
- ; * @addtogroup cortex-m33
- ; */
- SECTION .text:CODE(2)
- THUMB
- REQUIRE8
- PRESERVE8
- IMPORT rt_secure_svc_handle
- ;/*
- ; * int tzcall(int id, rt_ubase_t arg0, rt_ubase_t arg1, rt_ubase_t arg2);
- ; */
- EXPORT tzcall
- tzcall:
- SVC 1 ;/* call SVC 1 */
- BX LR
- tzcall_entry:
- PUSH {R1, R4, LR}
- MOV R4, R1 ;/* copy thread SP to R4 */
- LDMFD R4!, {r0 - r3} ;/* pop user stack, get input arg0, arg1, arg2 */
- STMFD R4!, {r0 - r3} ;/* push stack, user stack recovery */
- BL rt_secure_svc_handle ;/* call fun */
- POP {R1, R4, LR}
- STR R0, [R1] ;/* update return value */
- BX LR ;/* return to thread */
- syscall_entry:
- BX LR ;/* return to user app */
- EXPORT SVC_Handler
- SVC_Handler:
- ;/* get SP, save to R1 */
- MRS R1, MSP ;/* get fault context from handler. */
- TST LR, #0x04 ;/* if(!EXC_RETURN[2]) */
- BEQ get_sp_done
- MRS R1, PSP ;/* get fault context from thread. */
- get_sp_done:
- ;/* get svc index */
- LDR R0, [R1, #24]
- LDRB R0, [R0, #-2]
- ;/* if svc == 0, do system call */
- CMP R0, #0x0
- BEQ syscall_entry
- ;/* if svc == 1, do TrustZone call */
- CMP R0, #0x1
- BEQ tzcall_entry
- END
|