crt1.S 1.2 KB

123456789101112131415161718192021222324252627
  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