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