xref: /plan9-contrib/sys/src/libc/amd64/main9p.s (revision 272efad760864ee41cfe633b56aea9b4f5cf3ae7)
1#define NPRIVATES	16
2
3TEXT _mainp(SB), 1, $(2*8+NPRIVATES*8)
4	MOVQ	AX, _tos(SB)		/* _tos = arg */
5	LEAQ	16(SP), AX
6	MOVQ	AX, _privates(SB)
7	MOVL	$NPRIVATES, _nprivates(SB)
8
9	CALL	_profmain(SB)		/* _profmain(); */
10
11	MOVQ	_tos+0(SB), DX		/* _tos->prof.pp = _tos->prof.next; */
12	MOVQ	8(DX), CX
13	MOVQ	CX, (DX)
14
15	MOVL	inargc-8(FP), RARG	/* main(argc, argv); */
16	LEAQ	inargv+0(FP), AX
17	MOVQ	AX, 8(SP)
18	CALL	main(SB)
19
20loop:
21	MOVQ	$_exits<>(SB), RARG
22	CALL	exits(SB)
23	MOVQ	$_profin(SB), AX	/* force loading of profile */
24	JMP	loop
25
26TEXT	_savearg(SB), 1, $0
27	MOVQ	RARG, AX
28	RET
29
30TEXT	_saveret(SB), 1, $0
31	RET
32
33TEXT	_restorearg(SB), 1, $0
34	RET				/* we want RARG in RARG */
35
36TEXT	_callpc(SB), 1, $0
37	MOVQ	8(RARG), AX
38	RET
39
40DATA	_exits<>+0(SB)/4, $"main"
41GLOBL	_exits<>+0(SB), $5
42