mirror of
https://github.com/golang/sys.git
synced 2026-02-08 11:46:04 +03:00
New Context field will be used in the following CL to test ctlHandler parameter alignments. Also adjust TestExample to pass hard coded Context value of 123456 to test service, and verify that correct value is logged. Final part of the test is commented out, and will be adjusted in the next CL. Updates golang/go#25660 Change-Id: Iad2896ae497ee1edc0d62655eaf08671ec2651c5 Reviewed-on: https://go-review.googlesource.com/c/158697 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
70 lines
1.3 KiB
ArmAsm
70 lines
1.3 KiB
ArmAsm
// 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 argc+0(FP), AX
|
|
MOVL AX, ·sArgc(SB)
|
|
MOVL argv+4(FP), AX
|
|
MOVL AX, ·sArgv(SB)
|
|
|
|
PUSHL BP
|
|
PUSHL BX
|
|
PUSHL SI
|
|
PUSHL DI
|
|
|
|
SUBL $12, SP
|
|
|
|
MOVL ·sName(SB), AX
|
|
MOVL AX, (SP)
|
|
MOVL $·servicectlhandler(SB), AX
|
|
MOVL AX, 4(SP)
|
|
// Set context to 123456 to test issue #25660.
|
|
MOVL $123456, 8(SP)
|
|
MOVL ·cRegisterServiceCtrlHandlerExW(SB), AX
|
|
MOVL SP, BP
|
|
CALL AX
|
|
MOVL BP, SP
|
|
CMPL AX, $0
|
|
JE exit
|
|
MOVL AX, ·ssHandle(SB)
|
|
|
|
MOVL ·goWaitsH(SB), AX
|
|
MOVL AX, (SP)
|
|
MOVL ·cSetEvent(SB), AX
|
|
MOVL SP, BP
|
|
CALL AX
|
|
MOVL BP, SP
|
|
|
|
MOVL ·cWaitsH(SB), AX
|
|
MOVL AX, (SP)
|
|
MOVL $-1, AX
|
|
MOVL AX, 4(SP)
|
|
MOVL ·cWaitForSingleObject(SB), AX
|
|
MOVL SP, BP
|
|
CALL AX
|
|
MOVL BP, SP
|
|
|
|
exit:
|
|
ADDL $12, SP
|
|
|
|
POPL DI
|
|
POPL SI
|
|
POPL BX
|
|
POPL BP
|
|
|
|
MOVL 0(SP), CX
|
|
ADDL $12, SP
|
|
JMP CX
|
|
|
|
// I do not know why, but this seems to be the only way to call
|
|
// ctlHandlerProc on Windows 7.
|
|
|
|
// func servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr {
|
|
TEXT ·servicectlhandler(SB),7,$0
|
|
MOVL ·ctlHandlerExProc(SB), CX
|
|
JMP CX
|