clone.s raw

   1  // __clone(func, stack, flags, arg, ptid, tls, ctid)
   2  //         x0,   x1,    w2,    x3,  x4,   x5,  x6
   3  
   4  // syscall(SYS_clone, flags, stack, ptid, tls, ctid)
   5  //         x8,        x0,    x1,    x2,   x3,  x4
   6  
   7  .global __clone
   8  .hidden __clone
   9  .type   __clone,%function
  10  __clone:
  11  	// align stack and save func,arg
  12  	and x1,x1,#-16
  13  	stp x0,x3,[x1,#-16]!
  14  
  15  	// syscall
  16  	uxtw x0,w2
  17  	mov x2,x4
  18  	mov x3,x5
  19  	mov x4,x6
  20  	mov x8,#220 // SYS_clone
  21  	svc #0
  22  
  23  	cbz x0,1f
  24  	// parent
  25  	ret
  26  	// child
  27  1:	ldp x1,x0,[sp],#16
  28  	blr x1
  29  	mov x8,#93 // SYS_exit
  30  	svc #0
  31