以下C ++函数如何将参数传递给以下手臂装配函数?

在研究Android源代码时,遇到了以下C ++函数:

int clone_result;
clone_result = syscall(__NR_clone, flags, child_stack, parent_tid, new_tls, child_tid);

上面的函数调用以下汇编函数:

ENTRY(syscall)
    mov     ip, sp
    stmfd   sp!, {r4, r5, r6, r7}
    mov     r7, r0
    mov     r0, r1
    mov     r1, r2
    mov     r2, r3
    ldmfd   ip, {r3, r4, r5, r6}
    swi     #0
    ldmfd   sp!, {r4, r5, r6, r7}
    cmn     r0, #(MAX_ERRNO + 1)
    bxls    lr
    neg     r0, r0
    b       __set_errno_internal
END(syscall)

我只知道一些汇编过程调用的知识我知道这个汇编函数是一个系统调用,它将进入内核的syscall函数,但是我不知道它的详细信息。

例如:c ++中的syscall函数如何将6个参数传递给此汇编函数?

我知道'swi#0'调用内核函数,但是它如何将参数传递给内核函数呢?

对于“ ldmfd ip,{r3,r4,r5,r6}”和“ ldmfd sp!,{r4,r5,r6,r7}”应该怎么理解?

评论