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// func servicemain(argc uint32, argv **uint16) 6TEXT ·servicemain(SB),7,$0 7 MOVL argc+0(FP), AX 8 MOVL AX, ·sArgc(SB) 9 MOVL argv+4(FP), AX 10 MOVL AX, ·sArgv(SB) 11 12 PUSHL BP 13 PUSHL BX 14 PUSHL SI 15 PUSHL DI 16 17 SUBL $12, SP 18 19 MOVL ·sName(SB), AX 20 MOVL AX, (SP) 21 MOVL $·servicectlhandler(SB), AX 22 MOVL AX, 4(SP) 23 // Set context to 123456 to test issue #25660. 24 MOVL $123456, 8(SP) 25 MOVL ·cRegisterServiceCtrlHandlerExW(SB), AX 26 MOVL SP, BP 27 CALL AX 28 MOVL BP, SP 29 CMPL AX, $0 30 JE exit 31 MOVL AX, ·ssHandle(SB) 32 33 MOVL ·goWaitsH(SB), AX 34 MOVL AX, (SP) 35 MOVL ·cSetEvent(SB), AX 36 MOVL SP, BP 37 CALL AX 38 MOVL BP, SP 39 40 MOVL ·cWaitsH(SB), AX 41 MOVL AX, (SP) 42 MOVL $-1, AX 43 MOVL AX, 4(SP) 44 MOVL ·cWaitForSingleObject(SB), AX 45 MOVL SP, BP 46 CALL AX 47 MOVL BP, SP 48 49exit: 50 ADDL $12, SP 51 52 POPL DI 53 POPL SI 54 POPL BX 55 POPL BP 56 57 MOVL 0(SP), CX 58 ADDL $12, SP 59 JMP CX 60 61// I do not know why, but this seems to be the only way to call 62// ctlHandlerProc on Windows 7. 63 64// func servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { 65TEXT ·servicectlhandler(SB),7,$0 66 MOVL ·ctlHandlerExProc(SB), CX 67 JMP CX 68