github.com/rumpl/bof@v23.0.0-rc.2+incompatible/pkg/platform/architecture_windows.go (about) 1 package platform // import "github.com/docker/docker/pkg/platform" 2 3 import ( 4 "fmt" 5 "syscall" 6 "unsafe" 7 8 "golang.org/x/sys/windows" 9 ) 10 11 var ( 12 modkernel32 = windows.NewLazySystemDLL("kernel32.dll") 13 procGetSystemInfo = modkernel32.NewProc("GetSystemInfo") 14 ) 15 16 // see http://msdn.microsoft.com/en-us/library/windows/desktop/ms724958(v=vs.85).aspx 17 type systeminfo struct { 18 wProcessorArchitecture uint16 19 wReserved uint16 20 dwPageSize uint32 21 lpMinimumApplicationAddress uintptr 22 lpMaximumApplicationAddress uintptr 23 dwActiveProcessorMask uintptr 24 dwNumberOfProcessors uint32 25 dwProcessorType uint32 26 dwAllocationGranularity uint32 27 wProcessorLevel uint16 28 wProcessorRevision uint16 29 } 30 31 // Constants 32 const ( 33 ProcessorArchitecture64 = 9 // PROCESSOR_ARCHITECTURE_AMD64 34 ProcessorArchitectureIA64 = 6 // PROCESSOR_ARCHITECTURE_IA64 35 ProcessorArchitecture32 = 0 // PROCESSOR_ARCHITECTURE_INTEL 36 ProcessorArchitectureArm = 5 // PROCESSOR_ARCHITECTURE_ARM 37 ProcessorArchitectureArm64 = 12 // PROCESSOR_ARCHITECTURE_ARM64 38 ) 39 40 // runtimeArchitecture gets the name of the current architecture (x86, x86_64, …) 41 func runtimeArchitecture() (string, error) { 42 var sysinfo systeminfo 43 syscall.Syscall(procGetSystemInfo.Addr(), 1, uintptr(unsafe.Pointer(&sysinfo)), 0, 0) 44 switch sysinfo.wProcessorArchitecture { 45 case ProcessorArchitecture64, ProcessorArchitectureIA64: 46 return "x86_64", nil 47 case ProcessorArchitecture32: 48 return "i686", nil 49 case ProcessorArchitectureArm: 50 return "arm", nil 51 case ProcessorArchitectureArm64: 52 return "arm64", nil 53 default: 54 return "", fmt.Errorf("unknown processor architecture %+v", sysinfo.wProcessorArchitecture) 55 } 56 } 57 58 // NumProcs returns the number of processors on the system 59 func NumProcs() uint32 { 60 var sysinfo systeminfo 61 syscall.Syscall(procGetSystemInfo.Addr(), 1, uintptr(unsafe.Pointer(&sysinfo)), 0, 0) 62 return sysinfo.dwNumberOfProcessors 63 }