// Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build windows // func servicemain(argc uint32, argv **uint16) TEXT ·servicemain(SB),7,$0 MOVL CX, ·sArgc(SB) MOVL DX, ·sArgv(SB) SUBQ $32, SP // stack for the first 4 syscall params MOVQ ·sName(SB), CX MOVQ $·servicectlhandler(SB), DX MOVQ ·cRegisterServiceCtrlHandlerW(SB), AX CALL AX CMPQ AX, $0 JE exit MOVQ AX, ·ssHandle(SB) MOVQ ·goWaitsH(SB), CX MOVQ ·cSetEvent(SB), AX CALL AX MOVQ ·cWaitsH(SB), CX MOVQ $4294967295, DX MOVQ ·cWaitForSingleObject(SB), AX CALL AX exit: ADDQ $32, SP RET // I do not know why, but this seems to be the only way to call // ctlHandlerProc on Windows 7. // func servicectlhandler(ctl uint32) uintptr TEXT ·servicectlhandler(SB),7,$0 MOVQ ·ctlHandlerProc(SB), AX JMP AX