summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/alpha/start.S
blob: 850ce24208a3c2f3730191f183da15eae5889e36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
.text
.align 2
	.set noreorder

.global __start
__start:
.global _start
_start:
	clr	$fp		/* clear frame pointer */

	br	$gp,.Lstart	/* set global pointer */
.Lstart:
	ldgp	$gp, 0($gp)

/* prepare to call main */
	ldl	$16, 0($sp)	/* argc / a0 */

	lda	$17, 8($sp)	/* argv / a1 */

	addq	$16,   1, $18	/* argp / a2 */
	s8addq	$18, $17, $18	/* (8*(argc+1))+argv -> argp  */

	stq	$18, environ

#ifdef WANT_DYNAMIC
/* in v0 ($0) is the ld.so _fini pointer */
	mov	 $0, $19	/* mov v0(dynload) to a3 */
	jsr	$26, dyn_start
#else
	jsr	$26, main
#endif
	mov	 $0, $16
	jsr	$26, exit	/* YES, CALL! for threads and atexit ! (+4 byte) */