// Do not instrument the following packages at all,
// at best instrumentation would cause infinite recursion.
-var omit_pkgs = []string{"runtime/internal/atomic", "runtime/internal/sys", "runtime", "runtime/race", "runtime/msan"}
+var omit_pkgs = []string{"runtime/internal/atomic", "runtime/internal/sys", "runtime", "runtime/race", "runtime/msan", "internal/cpu"}
// Only insert racefuncenterfp/racefuncexit into the following packages.
// Memory accesses in the packages are either uninteresting or will cause false positives.
HasVX bool // vector facility. Note: the runtime sets this when it processes auxv records.
_ [CacheLineSize]byte
}
+
+// initialize examines the processor and sets the relevant variables above.
+// This is called by the runtime package early in program initialization,
+// before normal init functions are run.
+func initialize() {
+ doinit()
+}
hwcap_ASIMDFHM = (1 << 23)
)
-func init() {
+func doinit() {
// HWCAP feature bits
ARM64.HasFP = isSet(arm64_hwcap, hwcap_FP)
ARM64.HasASIMD = isSet(arm64_hwcap, hwcap_ASIMD)
--- /dev/null
+// 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.
+
+// +build !386
+// +build !amd64
+// +build !amd64p32
+// +build !arm64
+
+package cpu
+
+func doinit() {
+}
// xgetbv with ecx = 0 is implemented in cpu_x86.s.
func xgetbv() (eax, edx uint32)
-func init() {
+func doinit() {
maxID, _, _, _ := cpuid(0, 0)
if maxID < 1 {
_GoidCacheBatch = 16
)
+//go:linkname internal_cpu_initialize internal/cpu.initialize
+func internal_cpu_initialize()
+
// The bootstrap sequence is:
//
// call osinit
stackinit()
mallocinit()
mcommoninit(_g_.m)
- alginit() // maps must not be used before this call
- modulesinit() // provides activeModules
- typelinksinit() // uses maps, activeModules
- itabsinit() // uses activeModules
+ internal_cpu_initialize() // must run before alginit
+ alginit() // maps must not be used before this call
+ modulesinit() // provides activeModules
+ typelinksinit() // uses maps, activeModules
+ itabsinit() // uses activeModules
msigsave(_g_.m)
initSigmask = _g_.m.sigmask