import preliminary ppc work by rdp.
[musl] / crt / ppc / crt1.S
1 #include <bits/asm.h>
2         .weak  _init
3         .weak  _fini
4         .global _start
5         .type   _start, %function
6 _start:
7         mr      r9, r1                  // Save the original stack pointer.
8         clrrwi  r1, r1, 4               // Align the stack to 16 bytes.
9         lis     r13, _SDA_BASE_@ha      // r13 points to the small data area.
10         addi    r13, r13, _SDA_BASE_@l  //
11         li      r0, 0                   // Zero the frame pointer.
12         stwu    r1, -16(r1)             // The initial stack frame.
13         mtlr    r0                      // Clear the link register.
14         stw     r0, 0(r1)               // And save it.
15         lis     r3, main@ha             // Get main() ...
16         addi    r3, r3, main@l
17         lwz     r4, 0(r9)               // and argc...
18         addi    r5, r9, 4               // and argv ...
19         lis     r6, _init@ha            // and _init() ...
20         addi    r6, r6, _init@l
21         lis     r7, _fini@ha            // and _fini() ...
22         addi    r7, r7, _fini@l
23         li      r8, 0                   // ldso_fini == NULL
24         bl       __libc_start_main      // Let's go!
25         b       .                       // Never gets here.
26         .end    _start
27         .size   _start, .-_start