github.com/go-xe2/third@v1.0.3/golang.org/x/sys/windows/svc/sys_386.s (about)

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // +build windows
     6  
     7  // func servicemain(argc uint32, argv **uint16)
     8  TEXT ·servicemain(SB),7,$0
     9  	MOVL	argc+0(FP), AX
    10  	MOVL	AX, ·sArgc(SB)
    11  	MOVL	argv+4(FP), AX
    12  	MOVL	AX, ·sArgv(SB)
    13  
    14  	PUSHL	BP
    15  	PUSHL	BX
    16  	PUSHL	SI
    17  	PUSHL	DI
    18  
    19  	SUBL	$12, SP
    20  
    21  	MOVL	·sName(SB), AX
    22  	MOVL	AX, (SP)
    23  	MOVL	$·servicectlhandler(SB), AX
    24  	MOVL	AX, 4(SP)
    25  	MOVL	$0, 8(SP)
    26  	MOVL	·cRegisterServiceCtrlHandlerExW(SB), AX
    27  	MOVL	SP, BP
    28  	CALL	AX
    29  	MOVL	BP, SP
    30  	CMPL	AX, $0
    31  	JE	exit
    32  	MOVL	AX, ·ssHandle(SB)
    33  
    34  	MOVL	·goWaitsH(SB), AX
    35  	MOVL	AX, (SP)
    36  	MOVL	·cSetEvent(SB), AX
    37  	MOVL	SP, BP
    38  	CALL	AX
    39  	MOVL	BP, SP
    40  
    41  	MOVL	·cWaitsH(SB), AX
    42  	MOVL	AX, (SP)
    43  	MOVL	$-1, AX
    44  	MOVL	AX, 4(SP)
    45  	MOVL	·cWaitForSingleObject(SB), AX
    46  	MOVL	SP, BP
    47  	CALL	AX
    48  	MOVL	BP, SP
    49  
    50  exit:
    51  	ADDL	$12, SP
    52  
    53  	POPL	DI
    54  	POPL	SI
    55  	POPL	BX
    56  	POPL	BP
    57  
    58  	MOVL	0(SP), CX
    59  	ADDL	$12, SP
    60  	JMP	CX
    61  
    62  // I do not know why, but this seems to be the only way to call
    63  // ctlHandlerProc on Windows 7.
    64  
    65  // func servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr {
    66  TEXT ·servicectlhandler(SB),7,$0
    67  	MOVL	·ctlHandlerExProc(SB), CX
    68  	JMP	CX