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