1// Copyright 2015 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 5package main 6 7import ( 8 "syscall" 9 "unsafe" 10) 11 12var ( 13 modkernel32 = syscall.NewLazyDLL("kernel32.dll") 14 procGetSystemInfo = modkernel32.NewProc("GetSystemInfo") 15) 16 17// see https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info 18type systeminfo struct { 19 wProcessorArchitecture uint16 20 wReserved uint16 21 dwPageSize uint32 22 lpMinimumApplicationAddress uintptr 23 lpMaximumApplicationAddress uintptr 24 dwActiveProcessorMask uintptr 25 dwNumberOfProcessors uint32 26 dwProcessorType uint32 27 dwAllocationGranularity uint32 28 wProcessorLevel uint16 29 wProcessorRevision uint16 30} 31 32// See https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info 33const ( 34 PROCESSOR_ARCHITECTURE_AMD64 = 9 35 PROCESSOR_ARCHITECTURE_INTEL = 0 36 PROCESSOR_ARCHITECTURE_ARM = 5 37 PROCESSOR_ARCHITECTURE_ARM64 = 12 38 PROCESSOR_ARCHITECTURE_IA64 = 6 39) 40 41var sysinfo systeminfo 42 43func sysinit() { 44 syscall.Syscall(procGetSystemInfo.Addr(), 1, uintptr(unsafe.Pointer(&sysinfo)), 0, 0) 45 switch sysinfo.wProcessorArchitecture { 46 case PROCESSOR_ARCHITECTURE_AMD64: 47 gohostarch = "amd64" 48 case PROCESSOR_ARCHITECTURE_INTEL: 49 gohostarch = "386" 50 case PROCESSOR_ARCHITECTURE_ARM: 51 gohostarch = "arm" 52 case PROCESSOR_ARCHITECTURE_ARM64: 53 gohostarch = "arm64" 54 default: 55 fatalf("unknown processor architecture") 56 } 57} 58