| // Copyright 2022 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. |
| |
| // This file lives in the runtime package |
| // so we can get access to the runtime guts. |
| // The rest of the implementation of this test is in align_test.go. |
| |
| package runtime |
| |
| import "unsafe" |
| |
| // AtomicFields is the set of fields on which we perform 64-bit atomic |
| // operations (all the *64 operations in runtime/internal/atomic). |
| var AtomicFields = []uintptr{ |
| unsafe.Offsetof(m{}.procid), |
| unsafe.Offsetof(p{}.timer0When), |
| unsafe.Offsetof(p{}.timerModifiedEarliest), |
| unsafe.Offsetof(p{}.gcFractionalMarkTime), |
| unsafe.Offsetof(schedt{}.goidgen), |
| unsafe.Offsetof(schedt{}.lastpoll), |
| unsafe.Offsetof(schedt{}.pollUntil), |
| unsafe.Offsetof(schedt{}.timeToRun), |
| unsafe.Offsetof(gcControllerState{}.bgScanCredit), |
| unsafe.Offsetof(gcControllerState{}.maxStackScan), |
| unsafe.Offsetof(gcControllerState{}.heapLive), |
| unsafe.Offsetof(gcControllerState{}.heapScan), |
| unsafe.Offsetof(gcControllerState{}.dedicatedMarkTime), |
| unsafe.Offsetof(gcControllerState{}.dedicatedMarkWorkersNeeded), |
| unsafe.Offsetof(gcControllerState{}.fractionalMarkTime), |
| unsafe.Offsetof(gcControllerState{}.idleMarkTime), |
| unsafe.Offsetof(gcControllerState{}.globalsScan), |
| unsafe.Offsetof(gcControllerState{}.lastStackScan), |
| unsafe.Offsetof(timeHistogram{}.underflow), |
| unsafe.Offsetof(profBuf{}.overflow), |
| unsafe.Offsetof(profBuf{}.overflowTime), |
| unsafe.Offsetof(heapStatsDelta{}.tinyAllocCount), |
| unsafe.Offsetof(heapStatsDelta{}.smallAllocCount), |
| unsafe.Offsetof(heapStatsDelta{}.smallFreeCount), |
| unsafe.Offsetof(heapStatsDelta{}.largeAlloc), |
| unsafe.Offsetof(heapStatsDelta{}.largeAllocCount), |
| unsafe.Offsetof(heapStatsDelta{}.largeFree), |
| unsafe.Offsetof(heapStatsDelta{}.largeFreeCount), |
| unsafe.Offsetof(heapStatsDelta{}.committed), |
| unsafe.Offsetof(heapStatsDelta{}.released), |
| unsafe.Offsetof(heapStatsDelta{}.inHeap), |
| unsafe.Offsetof(heapStatsDelta{}.inStacks), |
| unsafe.Offsetof(heapStatsDelta{}.inPtrScalarBits), |
| unsafe.Offsetof(heapStatsDelta{}.inWorkBufs), |
| unsafe.Offsetof(lfnode{}.next), |
| unsafe.Offsetof(mstats{}.last_gc_nanotime), |
| unsafe.Offsetof(mstats{}.last_gc_unix), |
| unsafe.Offsetof(mstats{}.gcPauseDist), |
| unsafe.Offsetof(ticksType{}.val), |
| unsafe.Offsetof(workType{}.bytesMarked), |
| unsafe.Offsetof(timeHistogram{}.counts), |
| } |
| |
| // AtomicVariables is the set of global variables on which we perform |
| // 64-bit atomic operations. |
| var AtomicVariables = []unsafe.Pointer{ |
| unsafe.Pointer(&ncgocall), |
| unsafe.Pointer(&test_z64), |
| unsafe.Pointer(&blockprofilerate), |
| unsafe.Pointer(&mutexprofilerate), |
| unsafe.Pointer(&gcController), |
| unsafe.Pointer(&memstats), |
| unsafe.Pointer(&sched), |
| unsafe.Pointer(&ticks), |
| unsafe.Pointer(&work), |
| } |