1*c9945492SAndroid Build Coastguard Worker.set noreorder 2*c9945492SAndroid Build Coastguard Worker.global __clone 3*c9945492SAndroid Build Coastguard Worker.hidden __clone 4*c9945492SAndroid Build Coastguard Worker.type __clone,@function 5*c9945492SAndroid Build Coastguard Worker__clone: 6*c9945492SAndroid Build Coastguard Worker # Save function pointer and argument pointer on new thread stack 7*c9945492SAndroid Build Coastguard Worker and $5, $5, -16 # aligning stack to double word 8*c9945492SAndroid Build Coastguard Worker subu $5, $5, 16 9*c9945492SAndroid Build Coastguard Worker sw $4, 0($5) # save function pointer 10*c9945492SAndroid Build Coastguard Worker sw $7, 4($5) # save argument pointer 11*c9945492SAndroid Build Coastguard Worker 12*c9945492SAndroid Build Coastguard Worker # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid) 13*c9945492SAndroid Build Coastguard Worker # sys_clone(u64 flags, u64 ustack_base, u64 parent_tidptr, u64 child_tidptr, u64 tls) 14*c9945492SAndroid Build Coastguard Worker move $4, $6 15*c9945492SAndroid Build Coastguard Worker move $6, $8 16*c9945492SAndroid Build Coastguard Worker move $7, $9 17*c9945492SAndroid Build Coastguard Worker move $8, $10 18*c9945492SAndroid Build Coastguard Worker li $2, 6055 19*c9945492SAndroid Build Coastguard Worker syscall 20*c9945492SAndroid Build Coastguard Worker beq $7, $0, 1f 21*c9945492SAndroid Build Coastguard Worker nop 22*c9945492SAndroid Build Coastguard Worker jr $ra 23*c9945492SAndroid Build Coastguard Worker subu $2, $0, $2 24*c9945492SAndroid Build Coastguard Worker1: beq $2, $0, 1f 25*c9945492SAndroid Build Coastguard Worker nop 26*c9945492SAndroid Build Coastguard Worker jr $ra 27*c9945492SAndroid Build Coastguard Worker nop 28*c9945492SAndroid Build Coastguard Worker1: lw $25, 0($sp) # function pointer 29*c9945492SAndroid Build Coastguard Worker lw $4, 4($sp) # argument pointer 30*c9945492SAndroid Build Coastguard Worker jalr $25 # call the user's function 31*c9945492SAndroid Build Coastguard Worker nop 32*c9945492SAndroid Build Coastguard Worker move $4, $2 33*c9945492SAndroid Build Coastguard Worker li $2, 6058 34*c9945492SAndroid Build Coastguard Worker syscall 35