123456789101112131415161718192021222324252627282930313233343536 |
- /* When we enter this piece of code, the program stack looks like this:
- argc argument counter (integer)
- argv[0] program name (pointer)
- argv[1...N] program args (pointers)
- argv[argc-1] end of args (integer)
- NULL
- env[0...N] environment variables (pointers)
- NULL
- */
- #include <features.h>
- #include "regdef.h"
- .text
- .global __start
- .type __start,@function
- __start:
- #ifdef __PIC__
- .set noreorder
- bltzal zero,0f
- nop
- 0: .cpload $31
- .set reorder
- #endif
- move $31, zero
- lw a0, 0($29) /* argc */
- addu a1, $29, 4 /* argv */
- addu a2, a0, 1 /* load envp */
- sll a2, a2, 2
- add a2, a2, a1
- /* Ok, now run uClibc's main() -- shouldn't return */
- jal __uClibc_main
- hlt: b hlt /* Crash if somehow it does return. */
|