# Pull 'child_tid' off the stack and into the register the kernel
# calling convention expects, and pull 'fn' and 'arg' for later.
ldmfd ip, {r4, r5, r6}
# Make the system call.
ldr r7, =__NR_clone
swi #0
# Are we the child?
movs r0, r0
beq L(bc_child)
# In the parent, reload saved registers then either return or set errno.
ldmfd sp!, {r4, r5, r6, r7}
DO_SYSCALL_RETURN
L(bc_child):
# We're in the child now. Set the end of the frame record chain.
mov fp, #0
# Setting lr to 0 will make the unwinder stop at __start_thread.
mov lr, #0
# Call __start_thread with 'fn' and 'arg'.
mov r0, r5
mov r1, r6
b __start_thread
END(__bionic_clone)
// pid_t __bionic_clone3(struct clone_args* cl_args, size_t size, int (*fn)(void*), void* arg);
ENTRY_PRIVATE(__bionic_clone3)
# Save r7 to the parent stack as it is clobbered by the system call number.
push {r7}
.cfi_def_cfa_offset 4
.cfi_rel_offset r7, 0
# Make the system call.
ldr r7, =__NR_clone3
swi #0
# Are we the child?
movs r0, r0
beq L(bc3_child)
# In the parent, reload saved registers then either return or set errno.
pop {r7}
DO_SYSCALL_RETURN
L(bc3_child):
# We're in the child now. Set the end of the frame record chain.
mov fp, #0
# Setting lr to 0 will make the unwinder stop at __start_thread.
mov lr, #0
# Call __start_thread with the 'fn' and 'arg'
mov r0, r2
mov r1, r3
b __start_thread
END(__bionic_clone3)
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet am 2026-06-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.