操作约束符号: r I,O 表示使用一个通用寄存器 寄存器约束 m I,O 表示使用系统所支持的任何一种内存方式,不需要借助寄存器〔关键字m〕 内存约束 i I 表示输入表达式是一个立即数(整数),不需要借助任何寄存器 立即数约束 F I 表示输入表达式是一个立即数(浮点数),不需要借助任何寄存器 立即数约束 **/
@ insert the args onto the new stack str r3, [r1, #-4]! // 线程函数参数入栈,(child_stack) str r0, [r1, #-4]! // 线程函数指针入栈
@ do the system call @ get flags mov r0, r2 // flags 存入r0 @ new sp is already in r1 swi SYS_ify(clone) // swi __NR_clone, 产生软中断异常 movs a1, a1 blt PLTJMP(C_SYMBOL_NAME(__syscall_error)) RETINSTR(ne, lr)
@ pick the function arg and call address off the stack and execute ldr r0, [sp, #4] mov lr, pc ldr pc, [sp]
@ and we are done, passing the return value through r0 b PLTJMP(_exit) *********************