windows: port to ARM64

This also fixes up some spaces->tabs issues and moves build tags from
the file contents to the file name.

Updates golang/go#36439.

Change-Id: Iafa03e26575603a802832e587bb18ebd16fd176b
Reviewed-on: https://go-review.googlesource.com/c/sys/+/289449
Trust: Jason A. Donenfeld <Jason@zx2c4.com>
Trust: Alex Brainman <alex.brainman@gmail.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
Jason A. Donenfeld
2021-02-18 14:52:45 +00:00
committed by Russ Cox
parent 9555bcde0c
commit beda7e5e15
5 changed files with 72 additions and 13 deletions
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build windows
// func servicemain(argc uint32, argv **uint16) // func servicemain(argc uint32, argv **uint16)
TEXT ·servicemain(SB),7,$0 TEXT ·servicemain(SB),7,$0
MOVL argc+0(FP), AX MOVL argc+0(FP), AX
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build windows
// func servicemain(argc uint32, argv **uint16) // func servicemain(argc uint32, argv **uint16)
TEXT ·servicemain(SB),7,$0 TEXT ·servicemain(SB),7,$0
MOVQ SP, AX MOVQ SP, AX
@@ -2,15 +2,13 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build windows
#include "textflag.h" #include "textflag.h"
// func servicemain(argc uint32, argv **uint16) // func servicemain(argc uint32, argv **uint16)
TEXT ·servicemain(SB),NOSPLIT|NOFRAME,$0 TEXT ·servicemain(SB),NOSPLIT|NOFRAME,$0
MOVM.DB.W [R4, R14], (R13) // push {r4, lr} MOVM.DB.W [R4, R14], (R13) // push {r4, lr}
MOVW R13, R4 MOVW R13, R4
BIC $0x7, R13 // alignment for ABI BIC $0x7, R13 // alignment for ABI
MOVW R0, ·sArgc(SB) MOVW R0, ·sArgc(SB)
MOVW R1, ·sArgv(SB) MOVW R1, ·sArgv(SB)
@@ -19,19 +17,19 @@ TEXT ·servicemain(SB),NOSPLIT|NOFRAME,$0
MOVW ·ctlHandlerExProc(SB), R1 MOVW ·ctlHandlerExProc(SB), R1
MOVW $0, R2 MOVW $0, R2
MOVW ·cRegisterServiceCtrlHandlerExW(SB), R3 MOVW ·cRegisterServiceCtrlHandlerExW(SB), R3
BL (R3) BL (R3)
CMP $0, R0 CMP $0, R0
BEQ exit BEQ exit
MOVW R0, ·ssHandle(SB) MOVW R0, ·ssHandle(SB)
MOVW ·goWaitsH(SB), R0 MOVW ·goWaitsH(SB), R0
MOVW ·cSetEvent(SB), R1 MOVW ·cSetEvent(SB), R1
BL (R1) BL (R1)
MOVW ·cWaitsH(SB), R0 MOVW ·cWaitsH(SB), R0
MOVW $-1, R1 MOVW $-1, R1
MOVW ·cWaitForSingleObject(SB), R2 MOVW ·cWaitForSingleObject(SB), R2
BL (R2) BL (R2)
exit: exit:
MOVW R4, R13 // free extra stack space MOVW R4, R13 // free extra stack space
+31
View File
@@ -0,0 +1,31 @@
// Copyright 2018 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.
#include "textflag.h"
// func servicemain(argc uint32, argv **uint16)
TEXT ·servicemain(SB),NOSPLIT|NOFRAME,$0
MOVD R0, ·sArgc(SB)
MOVD R1, ·sArgv(SB)
MOVD ·sName(SB), R0
MOVD ·ctlHandlerExProc(SB), R1
MOVD $0, R2
MOVD ·cRegisterServiceCtrlHandlerExW(SB), R3
BL (R3)
CMP $0, R0
BEQ exit
MOVD R0, ·ssHandle(SB)
MOVD ·goWaitsH(SB), R0
MOVD ·cSetEvent(SB), R1
BL (R1)
MOVD ·cWaitsH(SB), R0
MOVD $-1, R1
MOVD ·cWaitForSingleObject(SB), R2
BL (R2)
exit:
RET
+34
View File
@@ -0,0 +1,34 @@
// Copyright 2011 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.
package windows
type WSAData struct {
Version uint16
HighVersion uint16
MaxSockets uint16
MaxUdpDg uint16
VendorInfo *byte
Description [WSADESCRIPTION_LEN + 1]byte
SystemStatus [WSASYS_STATUS_LEN + 1]byte
}
type Servent struct {
Name *byte
Aliases **byte
Proto *byte
Port uint16
}
type JOBOBJECT_BASIC_LIMIT_INFORMATION struct {
PerProcessUserTimeLimit int64
PerJobUserTimeLimit int64
LimitFlags uint32
MinimumWorkingSetSize uintptr
MaximumWorkingSetSize uintptr
ActiveProcessLimit uint32
Affinity uintptr
PriorityClass uint32
SchedulingClass uint32
}