more patches for more variants
[ginge.git] / loader / loader_arm.s
1 @ vim:filetype=armasm
2
3 .text
4
5 /* void do_entry(Elf32_Addr entry, void *stack_frame, int stack_frame_elems, void *exitf); */
6
7 .globl do_entry
8 do_entry:
9     sub   sp, sp, r2, lsl #2
10     mov   r4, sp
11     mov   r5, r0
12 0:
13     ldr   r0, [r1], #4
14     subs  r2, r2, #1
15     str   r0, [r4], #4
16     bgt   0b
17
18 /*
19  r0 - atexit func
20  sp - stack frame of:
21    argc
22    argv[0]
23    ...
24    NULL
25    envp[0]
26    ...
27    NULL
28 */
29     mov   r0, r3
30     bx    r5