| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | /* 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	   When we are done here, we want	a1=argc	a2=argv[0]	a3=argv[argc+1]ARM register quick reference:    Name    Number      APCS Role    a1      0           argument 1 / integer result / scratch register / argc    a2      1           argument 2 / scratch register / argv    a3      2           argument 3 / scratch register / envp    a4      3           argument 4 / scratch register    v1      4           register variable    v2      5           register variable    v3      6           register variable    v4      7           register variable    v5      8           register variable    sb/v6   9           static base / register variable    sl/v7   10          stack limit / stack chunk handle / reg. variable    fp      11          frame pointer    ip      12          scratch register / new-sb in inter-link-unit calls    sp      13          lower end of current stack frame    lr      14          link address / scratch register    pc      15          program counter*/.text	.align 2	.global __environ	.global _start	.global exit	.global main	.type   _start,%function	.type   exit,%function	.type   main,%function@ r0 = argc@ r1 = argv@ r2 = envp@ sl = data segment#define BASEREG	    r9.text_start:	@ adjust the data segment base pointer	ldr r3,=__data_start	sub sl,sl,r3	mov BASEREG,sl	ldr r3, .L3	str r2,[BASEREG,r3]		/* pull argc, argv and envp off the stack */	ldr r0,[sp, #0]	ldr r1,[sp, #4]	ldr r2,[sp, #8]	bl      main/*	ldr r0,=0  */	bl      exit.align 2.L3:	.word __environ.data	.align 2	.global __environ	__environ:  	.long 0.weak environenviron = __environ
 |