diff --git a/cannon/Dockerfile.diff b/cannon/Dockerfile.diff index dc0ebd78915..3cb33a6f5e9 100644 --- a/cannon/Dockerfile.diff +++ b/cannon/Dockerfile.diff @@ -1,4 +1,4 @@ -FROM golang:1.23.8-alpine3.21 AS builder +FROM golang:1.24.10-alpine3.21 AS builder RUN apk add --no-cache make bash diff --git a/cannon/Makefile b/cannon/Makefile index 0f8f9590b53..54a72ff5478 100644 --- a/cannon/Makefile +++ b/cannon/Makefile @@ -42,7 +42,7 @@ elf: make -C ./testdata elf elf-go-current: - make -C ./testdata/go-1-23 elf + make -C ./testdata/go-1-24 elf sanitize-program: mips-linux-gnu-objdump -d -j .text $$GUEST_PROGRAM > ./bin/dump.txt @@ -64,8 +64,8 @@ diff-%-cannon: cannon elf-go-current # Load an elf file to create a prestate, and check that both cannon versions generate the same prestate @VM=$*; \ echo "Running diff for VM type $${VM}"; \ - $$OTHER_CANNON load-elf --type $$VM --path ./testdata/go-1-23/bin/hello.64.elf --out ./bin/prestate-other.bin.gz --meta ""; \ - ./bin/cannon load-elf --type $$VM --path ./testdata/go-1-23/bin/hello.64.elf --out ./bin/prestate.bin.gz --meta ""; + $$OTHER_CANNON load-elf --type $$VM --path ./testdata/go-1-24/bin/hello.64.elf --out ./bin/prestate-other.bin.gz --meta ""; \ + ./bin/cannon load-elf --type $$VM --path ./testdata/go-1-24/bin/hello.64.elf --out ./bin/prestate.bin.gz --meta ""; @cmp ./bin/prestate-other.bin.gz ./bin/prestate.bin.gz; @if [ $$? -eq 0 ]; then \ echo "Generated identical prestates"; \ diff --git a/cannon/mipsevm/multithreaded/instrumented_test.go b/cannon/mipsevm/multithreaded/instrumented_test.go index 665681d4352..d9d84f5b535 100644 --- a/cannon/mipsevm/multithreaded/instrumented_test.go +++ b/cannon/mipsevm/multithreaded/instrumented_test.go @@ -447,7 +447,6 @@ func runTestsAcrossVms[T any](t *testing.T, testNamer TestNamer[T], testCases [] } variations := []VMVariations{ - {name: "Go 1.23 VM", goTarget: testutil.Go1_23, features: mipsevm.FeatureToggles{}}, {name: "Go 1.24 VM", goTarget: testutil.Go1_24, features: allFeaturesEnabled()}, {name: "Go 1.25 VM", goTarget: testutil.Go1_25, features: allFeaturesEnabled()}, } diff --git a/cannon/mipsevm/multithreaded/state_test.go b/cannon/mipsevm/multithreaded/state_test.go index 7b97291c7a0..3e2b4152886 100644 --- a/cannon/mipsevm/multithreaded/state_test.go +++ b/cannon/mipsevm/multithreaded/state_test.go @@ -101,7 +101,7 @@ func TestState_EncodeWitness(t *testing.T) { } func TestState_JSONCodec(t *testing.T) { - elfProgram, err := elf.Open("../../testdata/go-1-23/bin/hello.64.elf") + elfProgram, err := elf.Open("../../testdata/go-1-24/bin/hello.64.elf") require.NoError(t, err, "open ELF file") state, err := program.LoadELF(elfProgram, CreateInitialState) require.NoError(t, err, "load ELF into state") @@ -138,7 +138,7 @@ func TestState_JSONCodec(t *testing.T) { } func TestState_Binary(t *testing.T) { - elfProgram, err := elf.Open("../../testdata/go-1-23/bin/hello.64.elf") + elfProgram, err := elf.Open("../../testdata/go-1-24/bin/hello.64.elf") require.NoError(t, err, "open ELF file") state, err := program.LoadELF(elfProgram, CreateInitialState) require.NoError(t, err, "load ELF into state") diff --git a/cannon/mipsevm/tests/helpers.go b/cannon/mipsevm/tests/helpers.go index d14ed514e72..a5c5109ecef 100644 --- a/cannon/mipsevm/tests/helpers.go +++ b/cannon/mipsevm/tests/helpers.go @@ -88,7 +88,7 @@ func GetMipsVersionTestCases(t require.TestingT) []VersionedVMTestCase { var cases []VersionedVMTestCase for _, version := range versions.StateVersionTypes { if !arch.IsMips32 && versions.IsSupportedMultiThreaded64(version) { - goTarget := testutil.Go1_23 + goTarget := testutil.Go1_24 features := versions.FeaturesForVersion(version) if features.SupportWorkingSysGetRandom { goTarget = testutil.Go1_25 diff --git a/cannon/mipsevm/testutil/elf.go b/cannon/mipsevm/testutil/elf.go index b53fc3187b9..ba12a45d330 100644 --- a/cannon/mipsevm/testutil/elf.go +++ b/cannon/mipsevm/testutil/elf.go @@ -13,7 +13,6 @@ import ( type GoTarget string const ( - Go1_23 GoTarget = "go-1-23" Go1_24 GoTarget = "go-1-24" Go1_25 GoTarget = "go-1-25" ) diff --git a/cannon/mipsevm/testutil/evm.go b/cannon/mipsevm/testutil/evm.go index fb34b62547b..9086d176d6d 100644 --- a/cannon/mipsevm/testutil/evm.go +++ b/cannon/mipsevm/testutil/evm.go @@ -107,7 +107,7 @@ func NewEVMEnv(t testing.TB, contracts *ContractMetadata) (*vm.EVM, *state.State env := vm.NewEVM(blockContext, state, chainCfg, vmCfg) // pre-deploy the contracts - env.StateDB.SetCode(contracts.Addresses.Oracle, contracts.Artifacts.Oracle.DeployedBytecode.Object) + env.StateDB.SetCode(contracts.Addresses.Oracle, contracts.Artifacts.Oracle.DeployedBytecode.Object, tracing.CodeChangeUnspecified) var ctorArgs []byte if contracts.Version == 0 { // Old MIPS.sol doesn't specify the state version in the constructor diff --git a/cannon/testdata/Makefile b/cannon/testdata/Makefile index 71caa653816..a74e1aeae46 100644 --- a/cannon/testdata/Makefile +++ b/cannon/testdata/Makefile @@ -1,9 +1,5 @@ all: elf -go1-23: - make -C ./go-1-23 elf -.PHONY: go1-23 - go1-24: make -C ./go-1-24 elf .PHONY: go1-24 @@ -13,10 +9,9 @@ go1-25: .PHONY: go1-25 .PHONY: elf -elf: go1-23 go1-24 go1-25 +elf: go1-24 go1-25 .PHONY: clean clean: - make -C ./go-1-23 clean make -C ./go-1-24 clean make -C ./go-1-25 clean diff --git a/cannon/testdata/common/go.mod b/cannon/testdata/common/go.mod index aebe11e6823..e681ec5f90f 100644 --- a/cannon/testdata/common/go.mod +++ b/cannon/testdata/common/go.mod @@ -1,5 +1,5 @@ module common -go 1.23 +go 1.24 -toolchain go1.23.8 +toolchain go1.24.10 diff --git a/cannon/testdata/go-1-23/Makefile b/cannon/testdata/go-1-23/Makefile deleted file mode 100644 index f4a7a51bf81..00000000000 --- a/cannon/testdata/go-1-23/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -all: elf - -.PHONY: elf64 -elf64: $(patsubst %/go.mod,bin/%.64.elf,$(wildcard */go.mod)) - -.PHONY: elf -elf: elf64 - -.PHONY: dump -dump: $(patsubst %/go.mod,bin/%.dump,$(wildcard */go.mod)) - -.PHONY: clean -clean: - @[ -d bin ] && find bin -maxdepth 1 -type f -delete - -bin: - mkdir bin - -# take any directory with a go mod, and build an ELF -# verify output with: readelf -h bin/.elf -# result is mips64, big endian, R3000 -bin/%.64.elf: bin - cd $(@:bin/%.64.elf=%) && GOOS=linux GOARCH=mips64 GOMIPS64=softfloat go build -o ../$@ . - -# take any ELF and dump it -# TODO: currently have the little-endian toolchain, but should use the big-endian one. The -EB compat flag works though. -bin/%.dump: bin - mipsel-linux-gnu-objdump -D --disassembler-options=no-aliases --wide --source -m mips:3000 -EB $(@:%.dump=%.elf) > $@ diff --git a/cannon/testdata/go-1-23/alloc/go.mod b/cannon/testdata/go-1-23/alloc/go.mod deleted file mode 100644 index 9cd0eb04f31..00000000000 --- a/cannon/testdata/go-1-23/alloc/go.mod +++ /dev/null @@ -1,14 +0,0 @@ -module alloc - -go 1.23.0 - -toolchain go1.23.8 - -require github.com/ethereum-optimism/optimism v0.0.0 - -require ( - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sys v0.31.0 // indirect -) - -replace github.com/ethereum-optimism/optimism v0.0.0 => ./../../../.. diff --git a/cannon/testdata/go-1-23/alloc/go.sum b/cannon/testdata/go-1-23/alloc/go.sum deleted file mode 100644 index a52ee74a11e..00000000000 --- a/cannon/testdata/go-1-23/alloc/go.sum +++ /dev/null @@ -1,12 +0,0 @@ -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/testdata/go-1-23/alloc/main.go b/cannon/testdata/go-1-23/alloc/main.go deleted file mode 100644 index 3c7af2f165f..00000000000 --- a/cannon/testdata/go-1-23/alloc/main.go +++ /dev/null @@ -1,38 +0,0 @@ -package main - -import ( - "encoding/binary" - "fmt" - "runtime" - - preimage "github.com/ethereum-optimism/optimism/op-preimage" -) - -func main() { - var mem []byte - po := preimage.NewOracleClient(preimage.ClientPreimageChannel()) - numAllocs := binary.LittleEndian.Uint64(po.Get(preimage.LocalIndexKey(0))) - allocSize := binary.LittleEndian.Uint64(po.Get(preimage.LocalIndexKey(1))) - - fmt.Printf("alloc program. numAllocs=%d allocSize=%d\n", numAllocs, allocSize) - var alloc int - for i := 0; i < int(numAllocs); i++ { - mem = make([]byte, allocSize) - alloc += len(mem) - // touch a couple pages to prevent the runtime from overcommitting memory - for j := 0; j < len(mem); j += 1024 { - mem[j] = 0xFF - } - printGCStats(alloc) - } - - fmt.Println("alloc program exit") - printGCStats(alloc) -} - -func printGCStats(alloc int) { - var m runtime.MemStats - runtime.ReadMemStats(&m) - fmt.Printf("allocated %d bytes. memstats: heap_alloc=%d next_gc=%d frees=%d mallocs=%d num_gc=%d\n", - alloc, m.HeapAlloc, m.NextGC, m.Frees, m.Mallocs, m.NumGC) -} diff --git a/cannon/testdata/go-1-23/claim/go.mod b/cannon/testdata/go-1-23/claim/go.mod deleted file mode 100644 index de70a6a890e..00000000000 --- a/cannon/testdata/go-1-23/claim/go.mod +++ /dev/null @@ -1,14 +0,0 @@ -module claim - -go 1.23.0 - -toolchain go1.23.8 - -require github.com/ethereum-optimism/optimism v0.0.0 - -require ( - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sys v0.31.0 // indirect -) - -replace github.com/ethereum-optimism/optimism v0.0.0 => ./../../../.. diff --git a/cannon/testdata/go-1-23/claim/go.sum b/cannon/testdata/go-1-23/claim/go.sum deleted file mode 100644 index a52ee74a11e..00000000000 --- a/cannon/testdata/go-1-23/claim/go.sum +++ /dev/null @@ -1,12 +0,0 @@ -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/testdata/go-1-23/claim/main.go b/cannon/testdata/go-1-23/claim/main.go deleted file mode 100644 index 72b2064dec9..00000000000 --- a/cannon/testdata/go-1-23/claim/main.go +++ /dev/null @@ -1,54 +0,0 @@ -package main - -import ( - "encoding/binary" - "fmt" - "os" - - preimage "github.com/ethereum-optimism/optimism/op-preimage" -) - -type rawHint string - -func (rh rawHint) Hint() string { - return string(rh) -} - -func main() { - _, _ = os.Stderr.Write([]byte("started!")) - - po := preimage.NewOracleClient(preimage.ClientPreimageChannel()) - hinter := preimage.NewHintWriter(preimage.ClientHinterChannel()) - - preHash := *(*[32]byte)(po.Get(preimage.LocalIndexKey(0))) - diffHash := *(*[32]byte)(po.Get(preimage.LocalIndexKey(1))) - claimData := *(*[8]byte)(po.Get(preimage.LocalIndexKey(2))) - - // Hints are used to indicate which things the program will access, - // so the server can be prepared to serve the corresponding pre-images. - hinter.Hint(rawHint(fmt.Sprintf("fetch-state %x", preHash))) - pre := po.Get(preimage.Keccak256Key(preHash)) - - // Multiple pre-images may be fetched based on a hint. - // E.g. when we need all values of a merkle-tree. - hinter.Hint(rawHint(fmt.Sprintf("fetch-diff %x", diffHash))) - diff := po.Get(preimage.Keccak256Key(diffHash)) - diffPartA := po.Get(preimage.Keccak256Key(*(*[32]byte)(diff[:32]))) - diffPartB := po.Get(preimage.Keccak256Key(*(*[32]byte)(diff[32:]))) - - // Example state-transition function: s' = s*a + b - s := binary.BigEndian.Uint64(pre) - a := binary.BigEndian.Uint64(diffPartA) - b := binary.BigEndian.Uint64(diffPartB) - fmt.Printf("computing %d * %d + %d\n", s, a, b) - sOut := s*a + b - - sClaim := binary.BigEndian.Uint64(claimData[:]) - if sOut != sClaim { - fmt.Printf("claim %d is bad! Correct result is %d\n", sOut, sClaim) - os.Exit(1) - } else { - fmt.Printf("claim %d is good!\n", sOut) - os.Exit(0) - } -} diff --git a/cannon/testdata/go-1-23/entry/go.mod b/cannon/testdata/go-1-23/entry/go.mod deleted file mode 100644 index bb80d36c453..00000000000 --- a/cannon/testdata/go-1-23/entry/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module entry - -go 1.23.0 - -toolchain go1.23.8 diff --git a/cannon/testdata/go-1-23/entry/main.go b/cannon/testdata/go-1-23/entry/main.go deleted file mode 100644 index 78866f88abe..00000000000 --- a/cannon/testdata/go-1-23/entry/main.go +++ /dev/null @@ -1,30 +0,0 @@ -package main - -import ( - "os" - "runtime" -) - -func main() { - if len(os.Args) != 1 { - panic("expected 1 arg") - } - if os.Args[0] != "op-program" { - panic("unexpected arg0") - } - - var memProfileRate bool - env := os.Environ() - for _, env := range env { - if env != "GODEBUG=memprofilerate=0" { - panic("invalid envar") - } - memProfileRate = true - } - if !memProfileRate { - panic("memProfileRate env is not set") - } - if runtime.MemProfileRate != 0 { - panic("runtime.MemProfileRate is non-zero") - } -} diff --git a/cannon/testdata/go-1-23/hello/go.mod b/cannon/testdata/go-1-23/hello/go.mod deleted file mode 100644 index ddbc8546ea6..00000000000 --- a/cannon/testdata/go-1-23/hello/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module hello - -go 1.23.0 - -toolchain go1.23.8 diff --git a/cannon/testdata/go-1-23/hello/main.go b/cannon/testdata/go-1-23/hello/main.go deleted file mode 100644 index bcf1c75fc3f..00000000000 --- a/cannon/testdata/go-1-23/hello/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package main - -import "os" - -func main() { - _, _ = os.Stdout.Write([]byte("hello world!\n")) -} diff --git a/cannon/testdata/go-1-23/keccak/go.mod b/cannon/testdata/go-1-23/keccak/go.mod deleted file mode 100644 index c546cd5600b..00000000000 --- a/cannon/testdata/go-1-23/keccak/go.mod +++ /dev/null @@ -1,11 +0,0 @@ -module keccak - -go 1.23.0 - -toolchain go1.23.8 - -require golang.org/x/crypto v0.35.0 - -require golang.org/x/sys v0.30.0 // indirect - -replace github.com/ethereum-optimism/optimism v0.0.0 => ./../../../.. diff --git a/cannon/testdata/go-1-23/keccak/go.sum b/cannon/testdata/go-1-23/keccak/go.sum deleted file mode 100644 index 265a8fc783b..00000000000 --- a/cannon/testdata/go-1-23/keccak/go.sum +++ /dev/null @@ -1,4 +0,0 @@ -golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= -golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/cannon/testdata/go-1-23/keccak/main.go b/cannon/testdata/go-1-23/keccak/main.go deleted file mode 100644 index 828b1e7e665..00000000000 --- a/cannon/testdata/go-1-23/keccak/main.go +++ /dev/null @@ -1,16 +0,0 @@ -package main - -import ( - "fmt" - - "golang.org/x/crypto/sha3" -) - -func main() { - var result []byte - state := sha3.NewLegacyKeccak256() - state.Write([]byte{1, 2, 3}) - result = state.Sum(result) - - fmt.Printf("keccak program. result=%x\n", result) -} diff --git a/cannon/testdata/go-1-23/mt-atomic/atomic_test_copy.go b/cannon/testdata/go-1-23/mt-atomic/atomic_test_copy.go deleted file mode 100644 index e0cd1ebd69f..00000000000 --- a/cannon/testdata/go-1-23/mt-atomic/atomic_test_copy.go +++ /dev/null @@ -1,2567 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/atomic/atomic_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package main - -import ( - "fmt" - "reflect" - "runtime" - "runtime/debug" - "strings" - . "sync/atomic" - "testing" - "unsafe" - - "utils/testutil" -) - -// Tests of correct behavior, without contention. -// (Does the function work as advertised?) -// -// Test that the Add functions add correctly. -// Test that the CompareAndSwap functions actually -// do the comparison and the swap correctly. -// -// The loop over power-of-two values is meant to -// ensure that the operations apply to the full word size. -// The struct fields x.before and x.after check that the -// operations do not extend past the full word size. - -const ( - magic32 = 0xdedbeef - magic64 = 0xdeddeadbeefbeef -) - -func TestSwapInt32(t *testutil.TestRunner) { - var x struct { - before int32 - i int32 - after int32 - } - x.before = magic32 - x.after = magic32 - var j int32 - for delta := int32(1); delta+delta > delta; delta += delta { - k := SwapInt32(&x.i, delta) - if x.i != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - j = delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestSwapInt32Method(t *testutil.TestRunner) { - var x struct { - before int32 - i Int32 - after int32 - } - x.before = magic32 - x.after = magic32 - var j int32 - for delta := int32(1); delta+delta > delta; delta += delta { - k := x.i.Swap(delta) - if x.i.Load() != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - j = delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestSwapUint32(t *testutil.TestRunner) { - var x struct { - before uint32 - i uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - var j uint32 - for delta := uint32(1); delta+delta > delta; delta += delta { - k := SwapUint32(&x.i, delta) - if x.i != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - j = delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestSwapUint32Method(t *testutil.TestRunner) { - var x struct { - before uint32 - i Uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - var j uint32 - for delta := uint32(1); delta+delta > delta; delta += delta { - k := x.i.Swap(delta) - if x.i.Load() != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - j = delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestSwapInt64(t *testutil.TestRunner) { - var x struct { - before int64 - i int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - var j int64 - for delta := int64(1); delta+delta > delta; delta += delta { - k := SwapInt64(&x.i, delta) - if x.i != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - j = delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestSwapInt64Method(t *testutil.TestRunner) { - var x struct { - before int64 - i Int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - var j int64 - for delta := int64(1); delta+delta > delta; delta += delta { - k := x.i.Swap(delta) - if x.i.Load() != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - j = delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestSwapUint64(t *testutil.TestRunner) { - var x struct { - before uint64 - i uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - var j uint64 - for delta := uint64(1); delta+delta > delta; delta += delta { - k := SwapUint64(&x.i, delta) - if x.i != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - j = delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestSwapUint64Method(t *testutil.TestRunner) { - var x struct { - before uint64 - i Uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - var j uint64 - for delta := uint64(1); delta+delta > delta; delta += delta { - k := x.i.Swap(delta) - if x.i.Load() != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - j = delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestSwapUintptr(t *testutil.TestRunner) { - var x struct { - before uintptr - i uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - var j uintptr - for delta := uintptr(1); delta+delta > delta; delta += delta { - k := SwapUintptr(&x.i, delta) - if x.i != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - j = delta - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestSwapUintptrMethod(t *testutil.TestRunner) { - var x struct { - before uintptr - i Uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - var j uintptr - for delta := uintptr(1); delta+delta > delta; delta += delta { - k := x.i.Swap(delta) - if x.i.Load() != delta || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - j = delta - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -var global [1024]byte - -func testPointers() []unsafe.Pointer { - var pointers []unsafe.Pointer - // globals - for i := 0; i < 10; i++ { - pointers = append(pointers, unsafe.Pointer(&global[1< delta; delta += delta { - k := AddInt32(&x.i, delta) - j += delta - if x.i != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestAddInt32Method(t *testutil.TestRunner) { - var x struct { - before int32 - i Int32 - after int32 - } - x.before = magic32 - x.after = magic32 - var j int32 - for delta := int32(1); delta+delta > delta; delta += delta { - k := x.i.Add(delta) - j += delta - if x.i.Load() != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestAddUint32(t *testutil.TestRunner) { - var x struct { - before uint32 - i uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - var j uint32 - for delta := uint32(1); delta+delta > delta; delta += delta { - k := AddUint32(&x.i, delta) - j += delta - if x.i != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestAddUint32Method(t *testutil.TestRunner) { - var x struct { - before uint32 - i Uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - var j uint32 - for delta := uint32(1); delta+delta > delta; delta += delta { - k := x.i.Add(delta) - j += delta - if x.i.Load() != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestAddInt64(t *testutil.TestRunner) { - var x struct { - before int64 - i int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - var j int64 - for delta := int64(1); delta+delta > delta; delta += delta { - k := AddInt64(&x.i, delta) - j += delta - if x.i != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestAddInt64Method(t *testutil.TestRunner) { - var x struct { - before int64 - i Int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - var j int64 - for delta := int64(1); delta+delta > delta; delta += delta { - k := x.i.Add(delta) - j += delta - if x.i.Load() != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestAddUint64(t *testutil.TestRunner) { - var x struct { - before uint64 - i uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - var j uint64 - for delta := uint64(1); delta+delta > delta; delta += delta { - k := AddUint64(&x.i, delta) - j += delta - if x.i != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestAddUint64Method(t *testutil.TestRunner) { - var x struct { - before uint64 - i Uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - var j uint64 - for delta := uint64(1); delta+delta > delta; delta += delta { - k := x.i.Add(delta) - j += delta - if x.i.Load() != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestAddUintptr(t *testutil.TestRunner) { - var x struct { - before uintptr - i uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - var j uintptr - for delta := uintptr(1); delta+delta > delta; delta += delta { - k := AddUintptr(&x.i, delta) - j += delta - if x.i != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i, j, k) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestAddUintptrMethod(t *testutil.TestRunner) { - var x struct { - before uintptr - i Uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - var j uintptr - for delta := uintptr(1); delta+delta > delta; delta += delta { - k := x.i.Add(delta) - j += delta - if x.i.Load() != j || k != j { - t.Fatalf("delta=%d i=%d j=%d k=%d", delta, x.i.Load(), j, k) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestCompareAndSwapInt32(t *testutil.TestRunner) { - var x struct { - before int32 - i int32 - after int32 - } - x.before = magic32 - x.after = magic32 - for val := int32(1); val+val > val; val += val { - x.i = val - if !CompareAndSwapInt32(&x.i, val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - x.i = val + 1 - if CompareAndSwapInt32(&x.i, val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestCompareAndSwapInt32Method(t *testutil.TestRunner) { - var x struct { - before int32 - i Int32 - after int32 - } - x.before = magic32 - x.after = magic32 - for val := int32(1); val+val > val; val += val { - x.i.Store(val) - if !x.i.CompareAndSwap(val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - x.i.Store(val + 1) - if x.i.CompareAndSwap(val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestCompareAndSwapUint32(t *testutil.TestRunner) { - var x struct { - before uint32 - i uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - for val := uint32(1); val+val > val; val += val { - x.i = val - if !CompareAndSwapUint32(&x.i, val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - x.i = val + 1 - if CompareAndSwapUint32(&x.i, val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestCompareAndSwapUint32Method(t *testutil.TestRunner) { - var x struct { - before uint32 - i Uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - for val := uint32(1); val+val > val; val += val { - x.i.Store(val) - if !x.i.CompareAndSwap(val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - x.i.Store(val + 1) - if x.i.CompareAndSwap(val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestCompareAndSwapInt64(t *testutil.TestRunner) { - var x struct { - before int64 - i int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - for val := int64(1); val+val > val; val += val { - x.i = val - if !CompareAndSwapInt64(&x.i, val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - x.i = val + 1 - if CompareAndSwapInt64(&x.i, val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestCompareAndSwapInt64Method(t *testutil.TestRunner) { - var x struct { - before int64 - i Int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - for val := int64(1); val+val > val; val += val { - x.i.Store(val) - if !x.i.CompareAndSwap(val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - x.i.Store(val + 1) - if x.i.CompareAndSwap(val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func testCompareAndSwapUint64(t testing.TB, cas func(*uint64, uint64, uint64) bool) { - var x struct { - before uint64 - i uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - for val := uint64(1); val+val > val; val += val { - x.i = val - if !cas(&x.i, val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - x.i = val + 1 - if cas(&x.i, val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestCompareAndSwapUint64(t *testutil.TestRunner) { - testCompareAndSwapUint64(t, CompareAndSwapUint64) -} - -func TestCompareAndSwapUint64Method(t *testutil.TestRunner) { - var x struct { - before uint64 - i Uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - for val := uint64(1); val+val > val; val += val { - x.i.Store(val) - if !x.i.CompareAndSwap(val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - x.i.Store(val + 1) - if x.i.CompareAndSwap(val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestCompareAndSwapUintptr(t *testutil.TestRunner) { - var x struct { - before uintptr - i uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - for val := uintptr(1); val+val > val; val += val { - x.i = val - if !CompareAndSwapUintptr(&x.i, val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - x.i = val + 1 - if CompareAndSwapUintptr(&x.i, val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i, val+1) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestCompareAndSwapUintptrMethod(t *testutil.TestRunner) { - var x struct { - before uintptr - i Uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - for val := uintptr(1); val+val > val; val += val { - x.i.Store(val) - if !x.i.CompareAndSwap(val, val+1) { - t.Fatalf("should have swapped %#x %#x", val, val+1) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - x.i.Store(val + 1) - if x.i.CompareAndSwap(val, val+2) { - t.Fatalf("should not have swapped %#x %#x", val, val+2) - } - if x.i.Load() != val+1 { - t.Fatalf("wrong x.i after swap: x.i=%#x val+1=%#x", x.i.Load(), val+1) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, uintptr(magicptr), uintptr(magicptr)) - } -} - -func TestCompareAndSwapPointer(t *testutil.TestRunner) { - var x struct { - before uintptr - i unsafe.Pointer - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - q := unsafe.Pointer(new(byte)) - for _, p := range testPointers() { - x.i = p - if !CompareAndSwapPointer(&x.i, p, q) { - t.Fatalf("should have swapped %p %p", p, q) - } - if x.i != q { - t.Fatalf("wrong x.i after swap: x.i=%p want %p", x.i, q) - } - if CompareAndSwapPointer(&x.i, p, nil) { - t.Fatalf("should not have swapped %p nil", p) - } - if x.i != q { - t.Fatalf("wrong x.i after swap: x.i=%p want %p", x.i, q) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestCompareAndSwapPointerMethod(t *testutil.TestRunner) { - var x struct { - before uintptr - i Pointer[byte] - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - q := new(byte) - for _, p := range testPointers() { - p := (*byte)(p) - x.i.Store(p) - if !x.i.CompareAndSwap(p, q) { - t.Fatalf("should have swapped %p %p", p, q) - } - if x.i.Load() != q { - t.Fatalf("wrong x.i after swap: x.i=%p want %p", x.i.Load(), q) - } - if x.i.CompareAndSwap(p, nil) { - t.Fatalf("should not have swapped %p nil", p) - } - if x.i.Load() != q { - t.Fatalf("wrong x.i after swap: x.i=%p want %p", x.i.Load(), q) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestLoadInt32(t *testutil.TestRunner) { - var x struct { - before int32 - i int32 - after int32 - } - x.before = magic32 - x.after = magic32 - for delta := int32(1); delta+delta > delta; delta += delta { - k := LoadInt32(&x.i) - if k != x.i { - t.Fatalf("delta=%d i=%d k=%d", delta, x.i, k) - } - x.i += delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestLoadInt32Method(t *testutil.TestRunner) { - var x struct { - before int32 - i Int32 - after int32 - } - x.before = magic32 - x.after = magic32 - want := int32(0) - for delta := int32(1); delta+delta > delta; delta += delta { - k := x.i.Load() - if k != want { - t.Fatalf("delta=%d i=%d k=%d want=%d", delta, x.i.Load(), k, want) - } - x.i.Store(k + delta) - want = k + delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestLoadUint32(t *testutil.TestRunner) { - var x struct { - before uint32 - i uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - for delta := uint32(1); delta+delta > delta; delta += delta { - k := LoadUint32(&x.i) - if k != x.i { - t.Fatalf("delta=%d i=%d k=%d", delta, x.i, k) - } - x.i += delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestLoadUint32Method(t *testutil.TestRunner) { - var x struct { - before uint32 - i Uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - want := uint32(0) - for delta := uint32(1); delta+delta > delta; delta += delta { - k := x.i.Load() - if k != want { - t.Fatalf("delta=%d i=%d k=%d want=%d", delta, x.i.Load(), k, want) - } - x.i.Store(k + delta) - want = k + delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestLoadInt64(t *testutil.TestRunner) { - var x struct { - before int64 - i int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - for delta := int64(1); delta+delta > delta; delta += delta { - k := LoadInt64(&x.i) - if k != x.i { - t.Fatalf("delta=%d i=%d k=%d", delta, x.i, k) - } - x.i += delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestLoadInt64Method(t *testutil.TestRunner) { - var x struct { - before int64 - i Int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - want := int64(0) - for delta := int64(1); delta+delta > delta; delta += delta { - k := x.i.Load() - if k != want { - t.Fatalf("delta=%d i=%d k=%d want=%d", delta, x.i.Load(), k, want) - } - x.i.Store(k + delta) - want = k + delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestLoadUint64(t *testutil.TestRunner) { - var x struct { - before uint64 - i uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - for delta := uint64(1); delta+delta > delta; delta += delta { - k := LoadUint64(&x.i) - if k != x.i { - t.Fatalf("delta=%d i=%d k=%d", delta, x.i, k) - } - x.i += delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestLoadUint64Method(t *testutil.TestRunner) { - var x struct { - before uint64 - i Uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - want := uint64(0) - for delta := uint64(1); delta+delta > delta; delta += delta { - k := x.i.Load() - if k != want { - t.Fatalf("delta=%d i=%d k=%d want=%d", delta, x.i.Load(), k, want) - } - x.i.Store(k + delta) - want = k + delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestLoadUintptr(t *testutil.TestRunner) { - var x struct { - before uintptr - i uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - for delta := uintptr(1); delta+delta > delta; delta += delta { - k := LoadUintptr(&x.i) - if k != x.i { - t.Fatalf("delta=%d i=%d k=%d", delta, x.i, k) - } - x.i += delta - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestLoadUintptrMethod(t *testutil.TestRunner) { - var x struct { - before uintptr - i Uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - want := uintptr(0) - for delta := uintptr(1); delta+delta > delta; delta += delta { - k := x.i.Load() - if k != want { - t.Fatalf("delta=%d i=%d k=%d want=%d", delta, x.i.Load(), k, want) - } - x.i.Store(k + delta) - want = k + delta - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestLoadPointer(t *testutil.TestRunner) { - var x struct { - before uintptr - i unsafe.Pointer - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - for _, p := range testPointers() { - x.i = p - k := LoadPointer(&x.i) - if k != p { - t.Fatalf("p=%x k=%x", p, k) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestLoadPointerMethod(t *testutil.TestRunner) { - var x struct { - before uintptr - i Pointer[byte] - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - for _, p := range testPointers() { - p := (*byte)(p) - x.i.Store(p) - k := x.i.Load() - if k != p { - t.Fatalf("p=%x k=%x", p, k) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestStoreInt32(t *testutil.TestRunner) { - var x struct { - before int32 - i int32 - after int32 - } - x.before = magic32 - x.after = magic32 - v := int32(0) - for delta := int32(1); delta+delta > delta; delta += delta { - StoreInt32(&x.i, v) - if x.i != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i, v) - } - v += delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestStoreInt32Method(t *testutil.TestRunner) { - var x struct { - before int32 - i Int32 - after int32 - } - x.before = magic32 - x.after = magic32 - v := int32(0) - for delta := int32(1); delta+delta > delta; delta += delta { - x.i.Store(v) - if x.i.Load() != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i.Load(), v) - } - v += delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestStoreUint32(t *testutil.TestRunner) { - var x struct { - before uint32 - i uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - v := uint32(0) - for delta := uint32(1); delta+delta > delta; delta += delta { - StoreUint32(&x.i, v) - if x.i != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i, v) - } - v += delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestStoreUint32Method(t *testutil.TestRunner) { - var x struct { - before uint32 - i Uint32 - after uint32 - } - x.before = magic32 - x.after = magic32 - v := uint32(0) - for delta := uint32(1); delta+delta > delta; delta += delta { - x.i.Store(v) - if x.i.Load() != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i.Load(), v) - } - v += delta - } - if x.before != magic32 || x.after != magic32 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic32, magic32) - } -} - -func TestStoreInt64(t *testutil.TestRunner) { - var x struct { - before int64 - i int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - v := int64(0) - for delta := int64(1); delta+delta > delta; delta += delta { - StoreInt64(&x.i, v) - if x.i != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i, v) - } - v += delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestStoreInt64Method(t *testutil.TestRunner) { - var x struct { - before int64 - i Int64 - after int64 - } - magic64 := int64(magic64) - x.before = magic64 - x.after = magic64 - v := int64(0) - for delta := int64(1); delta+delta > delta; delta += delta { - x.i.Store(v) - if x.i.Load() != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i.Load(), v) - } - v += delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestStoreUint64(t *testutil.TestRunner) { - var x struct { - before uint64 - i uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - v := uint64(0) - for delta := uint64(1); delta+delta > delta; delta += delta { - StoreUint64(&x.i, v) - if x.i != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i, v) - } - v += delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestStoreUint64Method(t *testutil.TestRunner) { - var x struct { - before uint64 - i Uint64 - after uint64 - } - magic64 := uint64(magic64) - x.before = magic64 - x.after = magic64 - v := uint64(0) - for delta := uint64(1); delta+delta > delta; delta += delta { - x.i.Store(v) - if x.i.Load() != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i.Load(), v) - } - v += delta - } - if x.before != magic64 || x.after != magic64 { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magic64, magic64) - } -} - -func TestStoreUintptr(t *testutil.TestRunner) { - var x struct { - before uintptr - i uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - v := uintptr(0) - for delta := uintptr(1); delta+delta > delta; delta += delta { - StoreUintptr(&x.i, v) - if x.i != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i, v) - } - v += delta - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestStoreUintptrMethod(t *testutil.TestRunner) { - var x struct { - before uintptr - i Uintptr - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - v := uintptr(0) - for delta := uintptr(1); delta+delta > delta; delta += delta { - x.i.Store(v) - if x.i.Load() != v { - t.Fatalf("delta=%d i=%d v=%d", delta, x.i.Load(), v) - } - v += delta - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestStorePointer(t *testutil.TestRunner) { - var x struct { - before uintptr - i unsafe.Pointer - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - for _, p := range testPointers() { - StorePointer(&x.i, p) - if x.i != p { - t.Fatalf("x.i=%p p=%p", x.i, p) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -func TestStorePointerMethod(t *testutil.TestRunner) { - var x struct { - before uintptr - i Pointer[byte] - after uintptr - } - var m uint64 = magic64 - magicptr := uintptr(m) - x.before = magicptr - x.after = magicptr - for _, p := range testPointers() { - p := (*byte)(p) - x.i.Store(p) - if x.i.Load() != p { - t.Fatalf("x.i=%p p=%p", x.i.Load(), p) - } - } - if x.before != magicptr || x.after != magicptr { - t.Fatalf("wrong magic: %#x _ %#x != %#x _ %#x", x.before, x.after, magicptr, magicptr) - } -} - -// Tests of correct behavior, with contention. -// (Is the function atomic?) -// -// For each function, we write a "hammer" function that repeatedly -// uses the atomic operation to add 1 to a value. After running -// multiple hammers in parallel, check that we end with the correct -// total. -// Swap can't add 1, so it uses a different scheme. -// The functions repeatedly generate a pseudo-random number such that -// low bits are equal to high bits, swap, check that the old value -// has low and high bits equal. - -var hammer32 = map[string]func(*uint32, int){ - "SwapInt32": hammerSwapInt32, - "SwapUint32": hammerSwapUint32, - "SwapUintptr": hammerSwapUintptr32, - "AddInt32": hammerAddInt32, - "AddUint32": hammerAddUint32, - "AddUintptr": hammerAddUintptr32, - "CompareAndSwapInt32": hammerCompareAndSwapInt32, - "CompareAndSwapUint32": hammerCompareAndSwapUint32, - "CompareAndSwapUintptr": hammerCompareAndSwapUintptr32, - - "SwapInt32Method": hammerSwapInt32Method, - "SwapUint32Method": hammerSwapUint32Method, - "SwapUintptrMethod": hammerSwapUintptr32Method, - "AddInt32Method": hammerAddInt32Method, - "AddUint32Method": hammerAddUint32Method, - "AddUintptrMethod": hammerAddUintptr32Method, - "CompareAndSwapInt32Method": hammerCompareAndSwapInt32Method, - "CompareAndSwapUint32Method": hammerCompareAndSwapUint32Method, - "CompareAndSwapUintptrMethod": hammerCompareAndSwapUintptr32Method, -} - -func init() { - var v uint64 = 1 << 50 - if uintptr(v) != 0 { - // 64-bit system; clear uintptr tests - delete(hammer32, "SwapUintptr") - delete(hammer32, "AddUintptr") - delete(hammer32, "CompareAndSwapUintptr") - delete(hammer32, "SwapUintptrMethod") - delete(hammer32, "AddUintptrMethod") - delete(hammer32, "CompareAndSwapUintptrMethod") - } -} - -func hammerSwapInt32(uaddr *uint32, count int) { - addr := (*int32)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uint32(seed+i)<<16 | uint32(seed+i)<<16>>16 - old := uint32(SwapInt32(addr, int32(new))) - if old>>16 != old<<16>>16 { - panic(fmt.Sprintf("SwapInt32 is not atomic: %v", old)) - } - } -} - -func hammerSwapInt32Method(uaddr *uint32, count int) { - addr := (*Int32)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uint32(seed+i)<<16 | uint32(seed+i)<<16>>16 - old := uint32(addr.Swap(int32(new))) - if old>>16 != old<<16>>16 { - panic(fmt.Sprintf("SwapInt32 is not atomic: %v", old)) - } - } -} - -func hammerSwapUint32(addr *uint32, count int) { - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uint32(seed+i)<<16 | uint32(seed+i)<<16>>16 - old := SwapUint32(addr, new) - if old>>16 != old<<16>>16 { - panic(fmt.Sprintf("SwapUint32 is not atomic: %v", old)) - } - } -} - -func hammerSwapUint32Method(uaddr *uint32, count int) { - addr := (*Uint32)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uint32(seed+i)<<16 | uint32(seed+i)<<16>>16 - old := addr.Swap(new) - if old>>16 != old<<16>>16 { - panic(fmt.Sprintf("SwapUint32 is not atomic: %v", old)) - } - } -} - -func hammerSwapUintptr32(uaddr *uint32, count int) { - // only safe when uintptr is 32-bit. - // not called on 64-bit systems. - addr := (*uintptr)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uintptr(seed+i)<<16 | uintptr(seed+i)<<16>>16 - old := SwapUintptr(addr, new) - if old>>16 != old<<16>>16 { - panic(fmt.Sprintf("SwapUintptr is not atomic: %#08x", old)) - } - } -} - -func hammerSwapUintptr32Method(uaddr *uint32, count int) { - // only safe when uintptr is 32-bit. - // not called on 64-bit systems. - addr := (*Uintptr)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uintptr(seed+i)<<16 | uintptr(seed+i)<<16>>16 - old := addr.Swap(new) - if old>>16 != old<<16>>16 { - panic(fmt.Sprintf("Uintptr.Swap is not atomic: %#08x", old)) - } - } -} - -func hammerAddInt32(uaddr *uint32, count int) { - addr := (*int32)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - AddInt32(addr, 1) - } -} - -func hammerAddInt32Method(uaddr *uint32, count int) { - addr := (*Int32)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - addr.Add(1) - } -} - -func hammerAddUint32(addr *uint32, count int) { - for i := 0; i < count; i++ { - AddUint32(addr, 1) - } -} - -func hammerAddUint32Method(uaddr *uint32, count int) { - addr := (*Uint32)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - addr.Add(1) - } -} - -func hammerAddUintptr32(uaddr *uint32, count int) { - // only safe when uintptr is 32-bit. - // not called on 64-bit systems. - addr := (*uintptr)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - AddUintptr(addr, 1) - } -} - -func hammerAddUintptr32Method(uaddr *uint32, count int) { - // only safe when uintptr is 32-bit. - // not called on 64-bit systems. - addr := (*Uintptr)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - addr.Add(1) - } -} - -func hammerCompareAndSwapInt32(uaddr *uint32, count int) { - addr := (*int32)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := LoadInt32(addr) - if CompareAndSwapInt32(addr, v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapInt32Method(uaddr *uint32, count int) { - addr := (*Int32)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := addr.Load() - if addr.CompareAndSwap(v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapUint32(addr *uint32, count int) { - for i := 0; i < count; i++ { - for { - v := LoadUint32(addr) - if CompareAndSwapUint32(addr, v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapUint32Method(uaddr *uint32, count int) { - addr := (*Uint32)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := addr.Load() - if addr.CompareAndSwap(v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapUintptr32(uaddr *uint32, count int) { - // only safe when uintptr is 32-bit. - // not called on 64-bit systems. - addr := (*uintptr)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := LoadUintptr(addr) - if CompareAndSwapUintptr(addr, v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapUintptr32Method(uaddr *uint32, count int) { - // only safe when uintptr is 32-bit. - // not called on 64-bit systems. - addr := (*Uintptr)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := addr.Load() - if addr.CompareAndSwap(v, v+1) { - break - } - } - } -} - -func TestHammer32(t *testutil.TestRunner) { - const p = 4 - n := 100000 - if short { - n = 1000 - } - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(p)) - - for name, testf := range hammer32 { - c := make(chan int) - var val uint32 - for i := 0; i < p; i++ { - go func() { - defer func() { - if err := recover(); err != nil { - t.Error(err.(string)) - } - c <- 1 - }() - testf(&val, n) - }() - } - for i := 0; i < p; i++ { - <-c - } - if !strings.HasPrefix(name, "Swap") && val != uint32(n)*p { - t.Fatalf("%s: val=%d want %d", name, val, n*p) - } - } -} - -var hammer64 = map[string]func(*uint64, int){ - "SwapInt64": hammerSwapInt64, - "SwapUint64": hammerSwapUint64, - "SwapUintptr": hammerSwapUintptr64, - "AddInt64": hammerAddInt64, - "AddUint64": hammerAddUint64, - "AddUintptr": hammerAddUintptr64, - "CompareAndSwapInt64": hammerCompareAndSwapInt64, - "CompareAndSwapUint64": hammerCompareAndSwapUint64, - "CompareAndSwapUintptr": hammerCompareAndSwapUintptr64, - - "SwapInt64Method": hammerSwapInt64Method, - "SwapUint64Method": hammerSwapUint64Method, - "SwapUintptrMethod": hammerSwapUintptr64Method, - "AddInt64Method": hammerAddInt64Method, - "AddUint64Method": hammerAddUint64Method, - "AddUintptrMethod": hammerAddUintptr64Method, - "CompareAndSwapInt64Method": hammerCompareAndSwapInt64Method, - "CompareAndSwapUint64Method": hammerCompareAndSwapUint64Method, - "CompareAndSwapUintptrMethod": hammerCompareAndSwapUintptr64Method, -} - -func init() { - var v uint64 = 1 << 50 - if uintptr(v) == 0 { - // 32-bit system; clear uintptr tests - delete(hammer64, "SwapUintptr") - delete(hammer64, "SwapUintptrMethod") - delete(hammer64, "AddUintptr") - delete(hammer64, "AddUintptrMethod") - delete(hammer64, "CompareAndSwapUintptr") - delete(hammer64, "CompareAndSwapUintptrMethod") - } -} - -func hammerSwapInt64(uaddr *uint64, count int) { - addr := (*int64)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uint64(seed+i)<<32 | uint64(seed+i)<<32>>32 - old := uint64(SwapInt64(addr, int64(new))) - if old>>32 != old<<32>>32 { - panic(fmt.Sprintf("SwapInt64 is not atomic: %v", old)) - } - } -} - -func hammerSwapInt64Method(uaddr *uint64, count int) { - addr := (*Int64)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uint64(seed+i)<<32 | uint64(seed+i)<<32>>32 - old := uint64(addr.Swap(int64(new))) - if old>>32 != old<<32>>32 { - panic(fmt.Sprintf("SwapInt64 is not atomic: %v", old)) - } - } -} - -func hammerSwapUint64(addr *uint64, count int) { - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uint64(seed+i)<<32 | uint64(seed+i)<<32>>32 - old := SwapUint64(addr, new) - if old>>32 != old<<32>>32 { - panic(fmt.Sprintf("SwapUint64 is not atomic: %v", old)) - } - } -} - -func hammerSwapUint64Method(uaddr *uint64, count int) { - addr := (*Uint64)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uint64(seed+i)<<32 | uint64(seed+i)<<32>>32 - old := addr.Swap(new) - if old>>32 != old<<32>>32 { - panic(fmt.Sprintf("SwapUint64 is not atomic: %v", old)) - } - } -} - -const arch32 = unsafe.Sizeof(uintptr(0)) == 4 - -func hammerSwapUintptr64(uaddr *uint64, count int) { - // only safe when uintptr is 64-bit. - // not called on 32-bit systems. - if !arch32 { - addr := (*uintptr)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uintptr(seed+i)<<32 | uintptr(seed+i)<<32>>32 - old := SwapUintptr(addr, new) - if old>>32 != old<<32>>32 { - panic(fmt.Sprintf("SwapUintptr is not atomic: %v", old)) - } - } - } -} - -func hammerSwapUintptr64Method(uaddr *uint64, count int) { - // only safe when uintptr is 64-bit. - // not called on 32-bit systems. - if !arch32 { - addr := (*Uintptr)(unsafe.Pointer(uaddr)) - seed := int(uintptr(unsafe.Pointer(&count))) - for i := 0; i < count; i++ { - new := uintptr(seed+i)<<32 | uintptr(seed+i)<<32>>32 - old := addr.Swap(new) - if old>>32 != old<<32>>32 { - panic(fmt.Sprintf("SwapUintptr is not atomic: %v", old)) - } - } - } -} - -func hammerAddInt64(uaddr *uint64, count int) { - addr := (*int64)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - AddInt64(addr, 1) - } -} - -func hammerAddInt64Method(uaddr *uint64, count int) { - addr := (*Int64)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - addr.Add(1) - } -} - -func hammerAddUint64(addr *uint64, count int) { - for i := 0; i < count; i++ { - AddUint64(addr, 1) - } -} - -func hammerAddUint64Method(uaddr *uint64, count int) { - addr := (*Uint64)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - addr.Add(1) - } -} - -func hammerAddUintptr64(uaddr *uint64, count int) { - // only safe when uintptr is 64-bit. - // not called on 32-bit systems. - addr := (*uintptr)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - AddUintptr(addr, 1) - } -} - -func hammerAddUintptr64Method(uaddr *uint64, count int) { - // only safe when uintptr is 64-bit. - // not called on 32-bit systems. - addr := (*Uintptr)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - addr.Add(1) - } -} - -func hammerCompareAndSwapInt64(uaddr *uint64, count int) { - addr := (*int64)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := LoadInt64(addr) - if CompareAndSwapInt64(addr, v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapInt64Method(uaddr *uint64, count int) { - addr := (*Int64)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := addr.Load() - if addr.CompareAndSwap(v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapUint64(addr *uint64, count int) { - for i := 0; i < count; i++ { - for { - v := LoadUint64(addr) - if CompareAndSwapUint64(addr, v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapUint64Method(uaddr *uint64, count int) { - addr := (*Uint64)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := addr.Load() - if addr.CompareAndSwap(v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapUintptr64(uaddr *uint64, count int) { - // only safe when uintptr is 64-bit. - // not called on 32-bit systems. - addr := (*uintptr)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := LoadUintptr(addr) - if CompareAndSwapUintptr(addr, v, v+1) { - break - } - } - } -} - -func hammerCompareAndSwapUintptr64Method(uaddr *uint64, count int) { - // only safe when uintptr is 64-bit. - // not called on 32-bit systems. - addr := (*Uintptr)(unsafe.Pointer(uaddr)) - for i := 0; i < count; i++ { - for { - v := addr.Load() - if addr.CompareAndSwap(v, v+1) { - break - } - } - } -} - -func TestHammer64(t *testutil.TestRunner) { - const p = 4 - n := 100000 - if short { - n = 1000 - } - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(p)) - - for name, testf := range hammer64 { - c := make(chan int) - var val uint64 - for i := 0; i < p; i++ { - go func() { - defer func() { - if err := recover(); err != nil { - t.Error(err.(string)) - } - c <- 1 - }() - testf(&val, n) - }() - } - for i := 0; i < p; i++ { - <-c - } - if !strings.HasPrefix(name, "Swap") && val != uint64(n)*p { - t.Fatalf("%s: val=%d want %d", name, val, n*p) - } - } -} - -func hammerStoreLoadInt32(t testing.TB, paddr unsafe.Pointer) { - addr := (*int32)(paddr) - v := LoadInt32(addr) - vlo := v & ((1 << 16) - 1) - vhi := v >> 16 - if vlo != vhi { - t.Fatalf("Int32: %#x != %#x", vlo, vhi) - } - new := v + 1 + 1<<16 - if vlo == 1e4 { - new = 0 - } - StoreInt32(addr, new) -} - -func hammerStoreLoadInt32Method(t testing.TB, paddr unsafe.Pointer) { - addr := (*int32)(paddr) - v := LoadInt32(addr) - vlo := v & ((1 << 16) - 1) - vhi := v >> 16 - if vlo != vhi { - t.Fatalf("Int32: %#x != %#x", vlo, vhi) - } - new := v + 1 + 1<<16 - if vlo == 1e4 { - new = 0 - } - StoreInt32(addr, new) -} - -func hammerStoreLoadUint32(t testing.TB, paddr unsafe.Pointer) { - addr := (*uint32)(paddr) - v := LoadUint32(addr) - vlo := v & ((1 << 16) - 1) - vhi := v >> 16 - if vlo != vhi { - t.Fatalf("Uint32: %#x != %#x", vlo, vhi) - } - new := v + 1 + 1<<16 - if vlo == 1e4 { - new = 0 - } - StoreUint32(addr, new) -} - -func hammerStoreLoadUint32Method(t testing.TB, paddr unsafe.Pointer) { - addr := (*Uint32)(paddr) - v := addr.Load() - vlo := v & ((1 << 16) - 1) - vhi := v >> 16 - if vlo != vhi { - t.Fatalf("Uint32: %#x != %#x", vlo, vhi) - } - new := v + 1 + 1<<16 - if vlo == 1e4 { - new = 0 - } - addr.Store(new) -} - -func hammerStoreLoadInt64(t testing.TB, paddr unsafe.Pointer) { - addr := (*int64)(paddr) - v := LoadInt64(addr) - vlo := v & ((1 << 32) - 1) - vhi := v >> 32 - if vlo != vhi { - t.Fatalf("Int64: %#x != %#x", vlo, vhi) - } - new := v + 1 + 1<<32 - StoreInt64(addr, new) -} - -func hammerStoreLoadInt64Method(t testing.TB, paddr unsafe.Pointer) { - addr := (*Int64)(paddr) - v := addr.Load() - vlo := v & ((1 << 32) - 1) - vhi := v >> 32 - if vlo != vhi { - t.Fatalf("Int64: %#x != %#x", vlo, vhi) - } - new := v + 1 + 1<<32 - addr.Store(new) -} - -func hammerStoreLoadUint64(t testing.TB, paddr unsafe.Pointer) { - addr := (*uint64)(paddr) - v := LoadUint64(addr) - vlo := v & ((1 << 32) - 1) - vhi := v >> 32 - if vlo != vhi { - t.Fatalf("Uint64: %#x != %#x", vlo, vhi) - } - new := v + 1 + 1<<32 - StoreUint64(addr, new) -} - -func hammerStoreLoadUint64Method(t testing.TB, paddr unsafe.Pointer) { - addr := (*Uint64)(paddr) - v := addr.Load() - vlo := v & ((1 << 32) - 1) - vhi := v >> 32 - if vlo != vhi { - t.Fatalf("Uint64: %#x != %#x", vlo, vhi) - } - new := v + 1 + 1<<32 - addr.Store(new) -} - -func hammerStoreLoadUintptr(t testing.TB, paddr unsafe.Pointer) { - addr := (*uintptr)(paddr) - v := LoadUintptr(addr) - new := v - if arch32 { - vlo := v & ((1 << 16) - 1) - vhi := v >> 16 - if vlo != vhi { - t.Fatalf("Uintptr: %#x != %#x", vlo, vhi) - } - new = v + 1 + 1<<16 - if vlo == 1e4 { - new = 0 - } - } else { - vlo := v & ((1 << 32) - 1) - vhi := v >> 32 - if vlo != vhi { - t.Fatalf("Uintptr: %#x != %#x", vlo, vhi) - } - inc := uint64(1 + 1<<32) - new = v + uintptr(inc) - } - StoreUintptr(addr, new) -} - -//go:nocheckptr -func hammerStoreLoadUintptrMethod(t testing.TB, paddr unsafe.Pointer) { - addr := (*Uintptr)(paddr) - v := addr.Load() - new := v - if arch32 { - vlo := v & ((1 << 16) - 1) - vhi := v >> 16 - if vlo != vhi { - t.Fatalf("Uintptr: %#x != %#x", vlo, vhi) - } - new = v + 1 + 1<<16 - if vlo == 1e4 { - new = 0 - } - } else { - vlo := v & ((1 << 32) - 1) - vhi := v >> 32 - if vlo != vhi { - t.Fatalf("Uintptr: %#x != %#x", vlo, vhi) - } - inc := uint64(1 + 1<<32) - new = v + uintptr(inc) - } - addr.Store(new) -} - -// This code is just testing that LoadPointer/StorePointer operate -// atomically; it's not actually calculating pointers. -// -//go:nocheckptr -func hammerStoreLoadPointer(t testing.TB, paddr unsafe.Pointer) { - addr := (*unsafe.Pointer)(paddr) - v := uintptr(LoadPointer(addr)) - new := v - if arch32 { - vlo := v & ((1 << 16) - 1) - vhi := v >> 16 - if vlo != vhi { - t.Fatalf("Pointer: %#x != %#x", vlo, vhi) - } - new = v + 1 + 1<<16 - if vlo == 1e4 { - new = 0 - } - } else { - vlo := v & ((1 << 32) - 1) - vhi := v >> 32 - if vlo != vhi { - t.Fatalf("Pointer: %#x != %#x", vlo, vhi) - } - inc := uint64(1 + 1<<32) - new = v + uintptr(inc) - } - StorePointer(addr, unsafe.Pointer(new)) -} - -// This code is just testing that LoadPointer/StorePointer operate -// atomically; it's not actually calculating pointers. -// -//go:nocheckptr -func hammerStoreLoadPointerMethod(t testing.TB, paddr unsafe.Pointer) { - addr := (*Pointer[byte])(paddr) - v := uintptr(unsafe.Pointer(addr.Load())) - new := v - if arch32 { - vlo := v & ((1 << 16) - 1) - vhi := v >> 16 - if vlo != vhi { - t.Fatalf("Pointer: %#x != %#x", vlo, vhi) - } - new = v + 1 + 1<<16 - if vlo == 1e4 { - new = 0 - } - } else { - vlo := v & ((1 << 32) - 1) - vhi := v >> 32 - if vlo != vhi { - t.Fatalf("Pointer: %#x != %#x", vlo, vhi) - } - inc := uint64(1 + 1<<32) - new = v + uintptr(inc) - } - addr.Store((*byte)(unsafe.Pointer(new))) -} - -func TestHammerStoreLoad(t *testutil.TestRunner) { - tests := []func(testing.TB, unsafe.Pointer){ - hammerStoreLoadInt32, hammerStoreLoadUint32, - hammerStoreLoadUintptr, hammerStoreLoadPointer, - hammerStoreLoadInt32Method, hammerStoreLoadUint32Method, - hammerStoreLoadUintptrMethod, hammerStoreLoadPointerMethod, - hammerStoreLoadInt64, hammerStoreLoadUint64, - hammerStoreLoadInt64Method, hammerStoreLoadUint64Method, - } - n := int(1e6) - if short { - n = int(1e4) - } - const procs = 8 - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(procs)) - // Disable the GC because hammerStoreLoadPointer invokes - // write barriers on values that aren't real pointers. - defer debug.SetGCPercent(debug.SetGCPercent(-1)) - // Ensure any in-progress GC is finished. - runtime.GC() - for _, tt := range tests { - c := make(chan int) - var val uint64 - for p := 0; p < procs; p++ { - go func() { - for i := 0; i < n; i++ { - tt(t, unsafe.Pointer(&val)) - } - c <- 1 - }() - } - for p := 0; p < procs; p++ { - <-c - } - } -} - -func TestStoreLoadSeqCst32(t *testutil.TestRunner) { - if runtime.NumCPU() == 1 { - t.Skipf("Skipping test on %v processor machine", runtime.NumCPU()) - } - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4)) - N := int32(1e3) - if short { - N = int32(1e2) - } - c := make(chan bool, 2) - X := [2]int32{} - ack := [2][3]int32{{-1, -1, -1}, {-1, -1, -1}} - for p := 0; p < 2; p++ { - go func(me int) { - he := 1 - me - for i := int32(1); i < N; i++ { - StoreInt32(&X[me], i) - my := LoadInt32(&X[he]) - StoreInt32(&ack[me][i%3], my) - for w := 1; LoadInt32(&ack[he][i%3]) == -1; w++ { - if w%1000 == 0 { - runtime.Gosched() - } - } - his := LoadInt32(&ack[he][i%3]) - if (my != i && my != i-1) || (his != i && his != i-1) { - t.Errorf("invalid values: %d/%d (%d)", my, his, i) - break - } - if my != i && his != i { - t.Errorf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i) - break - } - StoreInt32(&ack[me][(i-1)%3], -1) - } - c <- true - }(p) - } - <-c - <-c -} - -func TestStoreLoadSeqCst64(t *testutil.TestRunner) { - if runtime.NumCPU() == 1 { - t.Skipf("Skipping test on %v processor machine", runtime.NumCPU()) - } - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4)) - N := int64(1e3) - if short { - N = int64(1e2) - } - c := make(chan bool, 2) - X := [2]int64{} - ack := [2][3]int64{{-1, -1, -1}, {-1, -1, -1}} - for p := 0; p < 2; p++ { - go func(me int) { - he := 1 - me - for i := int64(1); i < N; i++ { - StoreInt64(&X[me], i) - my := LoadInt64(&X[he]) - StoreInt64(&ack[me][i%3], my) - for w := 1; LoadInt64(&ack[he][i%3]) == -1; w++ { - if w%1000 == 0 { - runtime.Gosched() - } - } - his := LoadInt64(&ack[he][i%3]) - if (my != i && my != i-1) || (his != i && his != i-1) { - t.Errorf("invalid values: %d/%d (%d)", my, his, i) - break - } - if my != i && his != i { - t.Errorf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i) - break - } - StoreInt64(&ack[me][(i-1)%3], -1) - } - c <- true - }(p) - } - <-c - <-c -} - -func TestStoreLoadRelAcq32(t *testutil.TestRunner) { - if runtime.NumCPU() == 1 { - t.Skipf("Skipping test on %v processor machine", runtime.NumCPU()) - } - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4)) - N := int32(1e3) - if short { - N = int32(1e2) - } - c := make(chan bool, 2) - type Data struct { - signal int32 - pad1 [128]int8 - data1 int32 - pad2 [128]int8 - data2 float32 - } - var X Data - for p := int32(0); p < 2; p++ { - go func(p int32) { - for i := int32(1); i < N; i++ { - if (i+p)%2 == 0 { - X.data1 = i - X.data2 = float32(i) - StoreInt32(&X.signal, i) - } else { - for w := 1; LoadInt32(&X.signal) != i; w++ { - if w%1000 == 0 { - runtime.Gosched() - } - } - d1 := X.data1 - d2 := X.data2 - if d1 != i || d2 != float32(i) { - t.Errorf("incorrect data: %d/%g (%d)", d1, d2, i) - break - } - } - } - c <- true - }(p) - } - <-c - <-c -} - -func TestStoreLoadRelAcq64(t *testutil.TestRunner) { - if runtime.NumCPU() == 1 { - t.Skipf("Skipping test on %v processor machine", runtime.NumCPU()) - } - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4)) - N := int64(1e3) - if short { - N = int64(1e2) - } - c := make(chan bool, 2) - type Data struct { - signal int64 - pad1 [128]int8 - data1 int64 - pad2 [128]int8 - data2 float64 - } - var X Data - for p := int64(0); p < 2; p++ { - go func(p int64) { - for i := int64(1); i < N; i++ { - if (i+p)%2 == 0 { - X.data1 = i - X.data2 = float64(i) - StoreInt64(&X.signal, i) - } else { - for w := 1; LoadInt64(&X.signal) != i; w++ { - if w%1000 == 0 { - runtime.Gosched() - } - } - d1 := X.data1 - d2 := X.data2 - if d1 != i || d2 != float64(i) { - t.Errorf("incorrect data: %d/%g (%d)", d1, d2, i) - break - } - } - } - c <- true - }(p) - } - <-c - <-c -} - -func shouldPanic(t testing.TB, name string, f func()) { - defer func() { - // Check that all GC maps are sane. - runtime.GC() - - err := recover() - want := "unaligned 64-bit atomic operation" - if err == nil { - t.Errorf("%s did not panic", name) - } else if s, _ := err.(string); s != want { - t.Errorf("%s: wanted panic %q, got %q", name, want, err) - } - }() - f() -} - -func TestUnaligned64(t *testutil.TestRunner) { - // Unaligned 64-bit atomics on 32-bit systems are - // a continual source of pain. Test that on 32-bit systems they crash - // instead of failing silently. - if !arch32 { - t.Skip("test only runs on 32-bit systems") - } - - x := make([]uint32, 4) - p := (*uint64)(unsafe.Pointer(&x[1])) // misaligned - - shouldPanic(t, "LoadUint64", func() { LoadUint64(p) }) - shouldPanic(t, "LoadUint64Method", func() { (*Uint64)(unsafe.Pointer(p)).Load() }) - shouldPanic(t, "StoreUint64", func() { StoreUint64(p, 1) }) - shouldPanic(t, "StoreUint64Method", func() { (*Uint64)(unsafe.Pointer(p)).Store(1) }) - shouldPanic(t, "CompareAndSwapUint64", func() { CompareAndSwapUint64(p, 1, 2) }) - shouldPanic(t, "CompareAndSwapUint64Method", func() { (*Uint64)(unsafe.Pointer(p)).CompareAndSwap(1, 2) }) - shouldPanic(t, "AddUint64", func() { AddUint64(p, 3) }) - shouldPanic(t, "AddUint64Method", func() { (*Uint64)(unsafe.Pointer(p)).Add(3) }) -} - -func TestAutoAligned64(t *testutil.TestRunner) { - var signed struct { - _ uint32 - i Int64 - } - if o := reflect.TypeOf(&signed).Elem().Field(1).Offset; o != 8 { - t.Fatalf("Int64 offset = %d, want 8", o) - } - if p := reflect.ValueOf(&signed).Elem().Field(1).Addr().Pointer(); p&7 != 0 { - t.Fatalf("Int64 pointer = %#x, want 8-aligned", p) - } - - var unsigned struct { - _ uint32 - i Uint64 - } - if o := reflect.TypeOf(&unsigned).Elem().Field(1).Offset; o != 8 { - t.Fatalf("Uint64 offset = %d, want 8", o) - } - if p := reflect.ValueOf(&unsigned).Elem().Field(1).Addr().Pointer(); p&7 != 0 { - t.Fatalf("Int64 pointer = %#x, want 8-aligned", p) - } -} - -func TestNilDeref(t *testutil.TestRunner) { - funcs := [...]func(){ - func() { CompareAndSwapInt32(nil, 0, 0) }, - func() { (*Int32)(nil).CompareAndSwap(0, 0) }, - func() { CompareAndSwapInt64(nil, 0, 0) }, - func() { (*Int64)(nil).CompareAndSwap(0, 0) }, - func() { CompareAndSwapUint32(nil, 0, 0) }, - func() { (*Uint32)(nil).CompareAndSwap(0, 0) }, - func() { CompareAndSwapUint64(nil, 0, 0) }, - func() { (*Uint64)(nil).CompareAndSwap(0, 0) }, - func() { CompareAndSwapUintptr(nil, 0, 0) }, - func() { (*Uintptr)(nil).CompareAndSwap(0, 0) }, - func() { CompareAndSwapPointer(nil, nil, nil) }, - func() { (*Pointer[byte])(nil).CompareAndSwap(nil, nil) }, - func() { SwapInt32(nil, 0) }, - func() { (*Int32)(nil).Swap(0) }, - func() { SwapUint32(nil, 0) }, - func() { (*Uint32)(nil).Swap(0) }, - func() { SwapInt64(nil, 0) }, - func() { (*Int64)(nil).Swap(0) }, - func() { SwapUint64(nil, 0) }, - func() { (*Uint64)(nil).Swap(0) }, - func() { SwapUintptr(nil, 0) }, - func() { (*Uintptr)(nil).Swap(0) }, - func() { SwapPointer(nil, nil) }, - func() { (*Pointer[byte])(nil).Swap(nil) }, - func() { AddInt32(nil, 0) }, - func() { (*Int32)(nil).Add(0) }, - func() { AddUint32(nil, 0) }, - func() { (*Uint32)(nil).Add(0) }, - func() { AddInt64(nil, 0) }, - func() { (*Int64)(nil).Add(0) }, - func() { AddUint64(nil, 0) }, - func() { (*Uint64)(nil).Add(0) }, - func() { AddUintptr(nil, 0) }, - func() { (*Uintptr)(nil).Add(0) }, - func() { LoadInt32(nil) }, - func() { (*Int32)(nil).Load() }, - func() { LoadInt64(nil) }, - func() { (*Int64)(nil).Load() }, - func() { LoadUint32(nil) }, - func() { (*Uint32)(nil).Load() }, - func() { LoadUint64(nil) }, - func() { (*Uint64)(nil).Load() }, - func() { LoadUintptr(nil) }, - func() { (*Uintptr)(nil).Load() }, - func() { LoadPointer(nil) }, - func() { (*Pointer[byte])(nil).Load() }, - func() { StoreInt32(nil, 0) }, - func() { (*Int32)(nil).Store(0) }, - func() { StoreInt64(nil, 0) }, - func() { (*Int64)(nil).Store(0) }, - func() { StoreUint32(nil, 0) }, - func() { (*Uint32)(nil).Store(0) }, - func() { StoreUint64(nil, 0) }, - func() { (*Uint64)(nil).Store(0) }, - func() { StoreUintptr(nil, 0) }, - func() { (*Uintptr)(nil).Store(0) }, - func() { StorePointer(nil, nil) }, - func() { (*Pointer[byte])(nil).Store(nil) }, - } - for _, f := range funcs { - func() { - defer func() { - runtime.GC() - recover() - }() - f() - }() - } -} - -// Test that this compiles. -// When atomic.Pointer used _ [0]T, it did not. -type List struct { - Next Pointer[List] -} diff --git a/cannon/testdata/go-1-23/mt-atomic/go.mod b/cannon/testdata/go-1-23/mt-atomic/go.mod deleted file mode 100644 index b14dccbbfef..00000000000 --- a/cannon/testdata/go-1-23/mt-atomic/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module atomic - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/mt-atomic/main.go b/cannon/testdata/go-1-23/mt-atomic/main.go deleted file mode 100644 index 9d683c5bd59..00000000000 --- a/cannon/testdata/go-1-23/mt-atomic/main.go +++ /dev/null @@ -1,80 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(TestSwapInt32, "TestSwapInt32") - testutil.RunTest(TestSwapInt32Method, "TestSwapInt32Method") - testutil.RunTest(TestSwapUint32, "TestSwapUint32") - testutil.RunTest(TestSwapUint32Method, "TestSwapUint32Method") - testutil.RunTest(TestSwapInt64, "TestSwapInt64") - testutil.RunTest(TestSwapInt64Method, "TestSwapInt64Method") - testutil.RunTest(TestSwapUint64, "TestSwapUint64") - testutil.RunTest(TestSwapUint64Method, "TestSwapUint64Method") - testutil.RunTest(TestSwapUintptr, "TestSwapUintptr") - testutil.RunTest(TestSwapUintptrMethod, "TestSwapUintptrMethod") - testutil.RunTest(TestSwapPointer, "TestSwapPointer") - testutil.RunTest(TestSwapPointerMethod, "TestSwapPointerMethod") - testutil.RunTest(TestAddInt32, "TestAddInt32") - testutil.RunTest(TestAddInt32Method, "TestAddInt32Method") - testutil.RunTest(TestAddUint32, "TestAddUint32") - testutil.RunTest(TestAddUint32Method, "TestAddUint32Method") - testutil.RunTest(TestAddInt64, "TestAddInt64") - testutil.RunTest(TestAddInt64Method, "TestAddInt64Method") - testutil.RunTest(TestAddUint64, "TestAddUint64") - testutil.RunTest(TestAddUint64Method, "TestAddUint64Method") - testutil.RunTest(TestAddUintptr, "TestAddUintptr") - testutil.RunTest(TestAddUintptrMethod, "TestAddUintptrMethod") - testutil.RunTest(TestCompareAndSwapInt32, "TestCompareAndSwapInt32") - testutil.RunTest(TestCompareAndSwapInt32Method, "TestCompareAndSwapInt32Method") - testutil.RunTest(TestCompareAndSwapUint32, "TestCompareAndSwapUint32") - testutil.RunTest(TestCompareAndSwapUint32Method, "TestCompareAndSwapUint32Method") - testutil.RunTest(TestCompareAndSwapInt64, "TestCompareAndSwapInt64") - testutil.RunTest(TestCompareAndSwapInt64Method, "TestCompareAndSwapInt64Method") - testutil.RunTest(TestCompareAndSwapUint64, "TestCompareAndSwapUint64") - testutil.RunTest(TestCompareAndSwapUint64Method, "TestCompareAndSwapUint64Method") - testutil.RunTest(TestCompareAndSwapUintptr, "TestCompareAndSwapUintptr") - testutil.RunTest(TestCompareAndSwapUintptrMethod, "TestCompareAndSwapUintptrMethod") - testutil.RunTest(TestCompareAndSwapPointer, "TestCompareAndSwapPointer") - testutil.RunTest(TestCompareAndSwapPointerMethod, "TestCompareAndSwapPointerMethod") - testutil.RunTest(TestLoadInt32, "TestLoadInt32") - testutil.RunTest(TestLoadInt32Method, "TestLoadInt32Method") - testutil.RunTest(TestLoadUint32, "TestLoadUint32") - testutil.RunTest(TestLoadUint32Method, "TestLoadUint32Method") - testutil.RunTest(TestLoadInt64, "TestLoadInt64") - testutil.RunTest(TestLoadInt64Method, "TestLoadInt64Method") - testutil.RunTest(TestLoadUint64, "TestLoadUint64") - testutil.RunTest(TestLoadUint64Method, "TestLoadUint64Method") - testutil.RunTest(TestLoadUintptr, "TestLoadUintptr") - testutil.RunTest(TestLoadUintptrMethod, "TestLoadUintptrMethod") - testutil.RunTest(TestLoadPointer, "TestLoadPointer") - testutil.RunTest(TestLoadPointerMethod, "TestLoadPointerMethod") - testutil.RunTest(TestStoreInt32, "TestStoreInt32") - testutil.RunTest(TestStoreInt32Method, "TestStoreInt32Method") - testutil.RunTest(TestStoreUint32, "TestStoreUint32") - testutil.RunTest(TestStoreUint32Method, "TestStoreUint32Method") - testutil.RunTest(TestStoreInt64, "TestStoreInt64") - testutil.RunTest(TestStoreInt64Method, "TestStoreInt64Method") - testutil.RunTest(TestStoreUint64, "TestStoreUint64") - testutil.RunTest(TestStoreUint64Method, "TestStoreUint64Method") - testutil.RunTest(TestStoreUintptr, "TestStoreUintptr") - testutil.RunTest(TestStoreUintptrMethod, "TestStoreUintptrMethod") - testutil.RunTest(TestStorePointer, "TestStorePointer") - testutil.RunTest(TestStorePointerMethod, "TestStorePointerMethod") - testutil.RunTest(TestHammer32, "TestHammer32") - testutil.RunTest(TestHammer64, "TestHammer64") - testutil.RunTest(TestAutoAligned64, "TestAutoAligned64") - testutil.RunTest(TestNilDeref, "TestNilDeref") - testutil.RunTest(TestStoreLoadSeqCst32, "TestStoreLoadSeqCst32") - testutil.RunTest(TestStoreLoadSeqCst64, "TestStoreLoadSeqCst64") - testutil.RunTest(TestStoreLoadRelAcq32, "TestStoreLoadRelAcq32") - testutil.RunTest(TestStoreLoadRelAcq64, "TestStoreLoadRelAcq64") - testutil.RunTest(TestUnaligned64, "TestUnaligned64") - testutil.RunTest(TestHammerStoreLoad, "TestHammerStoreLoad") - - fmt.Println("Atomic tests passed") -} diff --git a/cannon/testdata/go-1-23/mt-cond/go.mod b/cannon/testdata/go-1-23/mt-cond/go.mod deleted file mode 100644 index e211e53553d..00000000000 --- a/cannon/testdata/go-1-23/mt-cond/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module cond - -go 1.23.0 - -toolchain go1.23.8 diff --git a/cannon/testdata/go-1-23/mt-cond/main.go b/cannon/testdata/go-1-23/mt-cond/main.go deleted file mode 100644 index 2b584cec999..00000000000 --- a/cannon/testdata/go-1-23/mt-cond/main.go +++ /dev/null @@ -1,302 +0,0 @@ -// Portions of this code are derived from code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/400433af3660905ecaceaf19ddad3e6c24b141df/src/sync/cond_test.go -// -// --- Original License Notice --- -// -// Copyright 2009 The Go Authors. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google LLC nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -package main - -import ( - "fmt" - "os" - "reflect" - "runtime" - "sync" -) - -func main() { - TestCondSignal() - TestCondSignalGenerations() - TestCondBroadcast() - TestRace() - TestCondSignalStealing() - TestCondCopy() - - fmt.Println("Cond test passed") -} - -func TestCondSignal() { - var m sync.Mutex - c := sync.NewCond(&m) - n := 2 - running := make(chan bool, n) - awake := make(chan bool, n) - for i := 0; i < n; i++ { - go func() { - m.Lock() - running <- true - c.Wait() - awake <- true - m.Unlock() - }() - } - for i := 0; i < n; i++ { - <-running // Wait for everyone to run. - } - for n > 0 { - select { - case <-awake: - _, _ = fmt.Fprintln(os.Stderr, "goroutine not asleep") - os.Exit(1) - default: - } - m.Lock() - c.Signal() - m.Unlock() - <-awake // Will deadlock if no goroutine wakes up - select { - case <-awake: - _, _ = fmt.Fprintln(os.Stderr, "too many goroutines awake") - os.Exit(1) - default: - } - n-- - } - c.Signal() -} - -func TestCondSignalGenerations() { - var m sync.Mutex - c := sync.NewCond(&m) - n := 100 - running := make(chan bool, n) - awake := make(chan int, n) - for i := 0; i < n; i++ { - go func(i int) { - m.Lock() - running <- true - c.Wait() - awake <- i - m.Unlock() - }(i) - if i > 0 { - a := <-awake - if a != i-1 { - _, _ = fmt.Fprintf(os.Stderr, "wrong goroutine woke up: want %d, got %d\n", i-1, a) - os.Exit(1) - } - } - <-running - m.Lock() - c.Signal() - m.Unlock() - } -} - -func TestCondBroadcast() { - var m sync.Mutex - c := sync.NewCond(&m) - n := 5 - running := make(chan int, n) - awake := make(chan int, n) - exit := false - for i := 0; i < n; i++ { - go func(g int) { - m.Lock() - for !exit { - running <- g - c.Wait() - awake <- g - } - m.Unlock() - }(i) - } - for i := 0; i < n; i++ { - for i := 0; i < n; i++ { - <-running // Will deadlock unless n are running. - } - if i == n-1 { - m.Lock() - exit = true - m.Unlock() - } - select { - case <-awake: - _, _ = fmt.Fprintln(os.Stderr, "goroutine not asleep") - os.Exit(1) - default: - } - m.Lock() - c.Broadcast() - m.Unlock() - seen := make([]bool, n) - for i := 0; i < n; i++ { - g := <-awake - if seen[g] { - _, _ = fmt.Fprintln(os.Stderr, "goroutine woke up twice") - os.Exit(1) - } - seen[g] = true - } - } - select { - case <-running: - _, _ = fmt.Fprintln(os.Stderr, "goroutine still running") - os.Exit(1) - default: - } - c.Broadcast() -} - -func TestRace() { - x := 0 - c := sync.NewCond(&sync.Mutex{}) - done := make(chan bool) - go func() { - c.L.Lock() - x = 1 - c.Wait() - if x != 2 { - _, _ = fmt.Fprintln(os.Stderr, "want 2") - os.Exit(1) - } - x = 3 - c.Signal() - c.L.Unlock() - done <- true - }() - go func() { - c.L.Lock() - for { - if x == 1 { - x = 2 - c.Signal() - break - } - c.L.Unlock() - runtime.Gosched() - c.L.Lock() - } - c.L.Unlock() - done <- true - }() - go func() { - c.L.Lock() - for { - if x == 2 { - c.Wait() - if x != 3 { - _, _ = fmt.Fprintln(os.Stderr, "want 3") - os.Exit(1) - } - break - } - if x == 3 { - break - } - c.L.Unlock() - runtime.Gosched() - c.L.Lock() - } - c.L.Unlock() - done <- true - }() - <-done - <-done - <-done -} - -func TestCondSignalStealing() { - for iters := 0; iters < 5; iters++ { - var m sync.Mutex - cond := sync.NewCond(&m) - - // Start a waiter. - ch := make(chan struct{}) - go func() { - m.Lock() - ch <- struct{}{} - cond.Wait() - m.Unlock() - - ch <- struct{}{} - }() - - <-ch - m.Lock() - m.Unlock() - - // We know that the waiter is in the cond.Wait() call because we - // synchronized with it, then acquired/released the mutex it was - // holding when we synchronized. - // - // Start two goroutines that will race: one will broadcast on - // the cond var, the other will wait on it. - // - // The new waiter may or may not get notified, but the first one - // has to be notified. - done := false - go func() { - cond.Broadcast() - }() - - go func() { - m.Lock() - for !done { - cond.Wait() - } - m.Unlock() - }() - - // Check that the first waiter does get signaled. - <-ch - - // Release the second waiter in case it didn't get the - // broadcast. - m.Lock() - done = true - m.Unlock() - cond.Broadcast() - } -} - -func TestCondCopy() { - defer func() { - err := recover() - if err == nil || err.(string) != "sync.Cond is copied" { - _, _ = fmt.Fprintf(os.Stderr, "got %v, expect sync.Cond is copied", err) - os.Exit(1) - } - }() - c := sync.Cond{L: &sync.Mutex{}} - c.Signal() - var c2 sync.Cond - reflect.ValueOf(&c2).Elem().Set(reflect.ValueOf(&c).Elem()) // c2 := c, hidden from vet - c2.Signal() -} diff --git a/cannon/testdata/go-1-23/mt-general/go.mod b/cannon/testdata/go-1-23/mt-general/go.mod deleted file mode 100644 index 2a4d4ba4cb1..00000000000 --- a/cannon/testdata/go-1-23/mt-general/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module mtgeneral - -go 1.23.0 - -toolchain go1.23.8 diff --git a/cannon/testdata/go-1-23/mt-general/main.go b/cannon/testdata/go-1-23/mt-general/main.go deleted file mode 100644 index bc871f56e52..00000000000 --- a/cannon/testdata/go-1-23/mt-general/main.go +++ /dev/null @@ -1,46 +0,0 @@ -package main - -import ( - "fmt" - "os" - "runtime" - "sync" - "sync/atomic" -) - -func main() { - // try some concurrency! - var wg sync.WaitGroup - wg.Add(2) - var x atomic.Int32 - go func() { - x.Add(2) - wg.Done() - }() - go func() { - x.Add(40) - wg.Done() - }() - wg.Wait() - fmt.Printf("waitgroup result: %d\n", x.Load()) - - // channels - a := make(chan int, 1) - b := make(chan int) - c := make(chan int) - go func() { - t0 := <-a - b <- t0 - }() - go func() { - t1 := <-b - c <- t1 - }() - a <- 1234 - out := <-c - fmt.Printf("channels result: %d\n", out) - - // try a GC! (the runtime might not have run one yet) - runtime.GC() - _, _ = os.Stdout.Write([]byte("GC complete!\n")) -} diff --git a/cannon/testdata/go-1-23/mt-map/go.mod b/cannon/testdata/go-1-23/mt-map/go.mod deleted file mode 100644 index 5c84a8082b9..00000000000 --- a/cannon/testdata/go-1-23/mt-map/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module map - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/mt-map/main.go b/cannon/testdata/go-1-23/mt-map/main.go deleted file mode 100644 index 577a19a3ed8..00000000000 --- a/cannon/testdata/go-1-23/mt-map/main.go +++ /dev/null @@ -1,19 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(TestMapMatchesRWMutex, "TestMapMatchesRWMutex") - testutil.RunTest(TestMapMatchesDeepCopy, "TestMapMatchesDeepCopy") - testutil.RunTest(TestConcurrentRange, "TestConcurrentRange") - testutil.RunTest(TestIssue40999, "TestIssue40999") - testutil.RunTest(TestMapRangeNestedCall, "TestMapRangeNestedCall") - testutil.RunTest(TestCompareAndSwap_NonExistingKey, "TestCompareAndSwap_NonExistingKey") - testutil.RunTest(TestMapRangeNoAllocations, "TestMapRangeNoAllocations") - - fmt.Println("Map test passed") -} diff --git a/cannon/testdata/go-1-23/mt-map/map_reference_test_copy.go b/cannon/testdata/go-1-23/mt-map/map_reference_test_copy.go deleted file mode 100644 index 3beeb1501c5..00000000000 --- a/cannon/testdata/go-1-23/mt-map/map_reference_test_copy.go +++ /dev/null @@ -1,299 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/map_reference_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -package main - -import ( - "sync" - "sync/atomic" -) - -// This file contains reference map implementations for unit-tests. - -// mapInterface is the interface Map implements. -type mapInterface interface { - Load(any) (any, bool) - Store(key, value any) - LoadOrStore(key, value any) (actual any, loaded bool) - LoadAndDelete(key any) (value any, loaded bool) - Delete(any) - Swap(key, value any) (previous any, loaded bool) - CompareAndSwap(key, old, new any) (swapped bool) - CompareAndDelete(key, old any) (deleted bool) - Range(func(key, value any) (shouldContinue bool)) -} - -var ( - _ mapInterface = &RWMutexMap{} - _ mapInterface = &DeepCopyMap{} -) - -// RWMutexMap is an implementation of mapInterface using a sync.RWMutex. -type RWMutexMap struct { - mu sync.RWMutex - dirty map[any]any -} - -func (m *RWMutexMap) Load(key any) (value any, ok bool) { - m.mu.RLock() - value, ok = m.dirty[key] - m.mu.RUnlock() - return -} - -func (m *RWMutexMap) Store(key, value any) { - m.mu.Lock() - if m.dirty == nil { - m.dirty = make(map[any]any) - } - m.dirty[key] = value - m.mu.Unlock() -} - -func (m *RWMutexMap) LoadOrStore(key, value any) (actual any, loaded bool) { - m.mu.Lock() - actual, loaded = m.dirty[key] - if !loaded { - actual = value - if m.dirty == nil { - m.dirty = make(map[any]any) - } - m.dirty[key] = value - } - m.mu.Unlock() - return actual, loaded -} - -func (m *RWMutexMap) Swap(key, value any) (previous any, loaded bool) { - m.mu.Lock() - if m.dirty == nil { - m.dirty = make(map[any]any) - } - - previous, loaded = m.dirty[key] - m.dirty[key] = value - m.mu.Unlock() - return -} - -func (m *RWMutexMap) LoadAndDelete(key any) (value any, loaded bool) { - m.mu.Lock() - value, loaded = m.dirty[key] - if !loaded { - m.mu.Unlock() - return nil, false - } - delete(m.dirty, key) - m.mu.Unlock() - return value, loaded -} - -func (m *RWMutexMap) Delete(key any) { - m.mu.Lock() - delete(m.dirty, key) - m.mu.Unlock() -} - -func (m *RWMutexMap) CompareAndSwap(key, old, new any) (swapped bool) { - m.mu.Lock() - defer m.mu.Unlock() - if m.dirty == nil { - return false - } - - value, loaded := m.dirty[key] - if loaded && value == old { - m.dirty[key] = new - return true - } - return false -} - -func (m *RWMutexMap) CompareAndDelete(key, old any) (deleted bool) { - m.mu.Lock() - defer m.mu.Unlock() - if m.dirty == nil { - return false - } - - value, loaded := m.dirty[key] - if loaded && value == old { - delete(m.dirty, key) - return true - } - return false -} - -func (m *RWMutexMap) Range(f func(key, value any) (shouldContinue bool)) { - m.mu.RLock() - keys := make([]any, 0, len(m.dirty)) - for k := range m.dirty { - keys = append(keys, k) - } - m.mu.RUnlock() - - for _, k := range keys { - v, ok := m.Load(k) - if !ok { - continue - } - if !f(k, v) { - break - } - } -} - -// DeepCopyMap is an implementation of mapInterface using a Mutex and -// atomic.Value. It makes deep copies of the map on every write to avoid -// acquiring the Mutex in Load. -type DeepCopyMap struct { - mu sync.Mutex - clean atomic.Value -} - -func (m *DeepCopyMap) Load(key any) (value any, ok bool) { - clean, _ := m.clean.Load().(map[any]any) - value, ok = clean[key] - return value, ok -} - -func (m *DeepCopyMap) Store(key, value any) { - m.mu.Lock() - dirty := m.dirty() - dirty[key] = value - m.clean.Store(dirty) - m.mu.Unlock() -} - -func (m *DeepCopyMap) LoadOrStore(key, value any) (actual any, loaded bool) { - clean, _ := m.clean.Load().(map[any]any) - actual, loaded = clean[key] - if loaded { - return actual, loaded - } - - m.mu.Lock() - // Reload clean in case it changed while we were waiting on m.mu. - clean, _ = m.clean.Load().(map[any]any) - actual, loaded = clean[key] - if !loaded { - dirty := m.dirty() - dirty[key] = value - actual = value - m.clean.Store(dirty) - } - m.mu.Unlock() - return actual, loaded -} - -func (m *DeepCopyMap) Swap(key, value any) (previous any, loaded bool) { - m.mu.Lock() - dirty := m.dirty() - previous, loaded = dirty[key] - dirty[key] = value - m.clean.Store(dirty) - m.mu.Unlock() - return -} - -func (m *DeepCopyMap) LoadAndDelete(key any) (value any, loaded bool) { - m.mu.Lock() - dirty := m.dirty() - value, loaded = dirty[key] - delete(dirty, key) - m.clean.Store(dirty) - m.mu.Unlock() - return -} - -func (m *DeepCopyMap) Delete(key any) { - m.mu.Lock() - dirty := m.dirty() - delete(dirty, key) - m.clean.Store(dirty) - m.mu.Unlock() -} - -func (m *DeepCopyMap) CompareAndSwap(key, old, new any) (swapped bool) { - clean, _ := m.clean.Load().(map[any]any) - if previous, ok := clean[key]; !ok || previous != old { - return false - } - - m.mu.Lock() - defer m.mu.Unlock() - dirty := m.dirty() - value, loaded := dirty[key] - if loaded && value == old { - dirty[key] = new - m.clean.Store(dirty) - return true - } - return false -} - -func (m *DeepCopyMap) CompareAndDelete(key, old any) (deleted bool) { - clean, _ := m.clean.Load().(map[any]any) - if previous, ok := clean[key]; !ok || previous != old { - return false - } - - m.mu.Lock() - defer m.mu.Unlock() - - dirty := m.dirty() - value, loaded := dirty[key] - if loaded && value == old { - delete(dirty, key) - m.clean.Store(dirty) - return true - } - return false -} - -func (m *DeepCopyMap) Range(f func(key, value any) (shouldContinue bool)) { - clean, _ := m.clean.Load().(map[any]any) - for k, v := range clean { - if !f(k, v) { - break - } - } -} - -func (m *DeepCopyMap) dirty() map[any]any { - clean, _ := m.clean.Load().(map[any]any) - dirty := make(map[any]any, len(clean)+1) - for k, v := range clean { - dirty[k] = v - } - return dirty -} diff --git a/cannon/testdata/go-1-23/mt-map/map_test_copy.go b/cannon/testdata/go-1-23/mt-map/map_test_copy.go deleted file mode 100644 index 7b8806698f9..00000000000 --- a/cannon/testdata/go-1-23/mt-map/map_test_copy.go +++ /dev/null @@ -1,325 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/map_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -package main - -import ( - "math/rand" - "reflect" - "runtime" - "sync" - "sync/atomic" - "testing" - "testing/quick" - - "utils/testutil" -) - -type mapOp string - -const ( - opLoad = mapOp("Load") - opStore = mapOp("Store") - opLoadOrStore = mapOp("LoadOrStore") - opLoadAndDelete = mapOp("LoadAndDelete") - opDelete = mapOp("Delete") - opSwap = mapOp("Swap") - opCompareAndSwap = mapOp("CompareAndSwap") - opCompareAndDelete = mapOp("CompareAndDelete") -) - -var mapOps = [...]mapOp{ - opLoad, - opStore, - opLoadOrStore, - opLoadAndDelete, - opDelete, - opSwap, - opCompareAndSwap, - opCompareAndDelete, -} - -// mapCall is a quick.Generator for calls on mapInterface. -type mapCall struct { - op mapOp - k, v any -} - -func (c mapCall) apply(m mapInterface) (any, bool) { - switch c.op { - case opLoad: - return m.Load(c.k) - case opStore: - m.Store(c.k, c.v) - return nil, false - case opLoadOrStore: - return m.LoadOrStore(c.k, c.v) - case opLoadAndDelete: - return m.LoadAndDelete(c.k) - case opDelete: - m.Delete(c.k) - return nil, false - case opSwap: - return m.Swap(c.k, c.v) - case opCompareAndSwap: - if m.CompareAndSwap(c.k, c.v, rand.Int()) { - m.Delete(c.k) - return c.v, true - } - return nil, false - case opCompareAndDelete: - if m.CompareAndDelete(c.k, c.v) { - if _, ok := m.Load(c.k); !ok { - return nil, true - } - } - return nil, false - default: - panic("invalid mapOp") - } -} - -type mapResult struct { - value any - ok bool -} - -func randValue(r *rand.Rand) any { - b := make([]byte, r.Intn(4)) - for i := range b { - b[i] = 'a' + byte(rand.Intn(26)) - } - return string(b) -} - -func (mapCall) Generate(r *rand.Rand, size int) reflect.Value { - c := mapCall{op: mapOps[rand.Intn(len(mapOps))], k: randValue(r)} - switch c.op { - case opStore, opLoadOrStore: - c.v = randValue(r) - } - return reflect.ValueOf(c) -} - -func applyCalls(m mapInterface, calls []mapCall) (results []mapResult, final map[any]any) { - for _, c := range calls { - v, ok := c.apply(m) - results = append(results, mapResult{v, ok}) - } - - final = make(map[any]any) - m.Range(func(k, v any) bool { - final[k] = v - return true - }) - - return results, final -} - -func applyMap(calls []mapCall) ([]mapResult, map[any]any) { - return applyCalls(new(sync.Map), calls) -} - -func applyRWMutexMap(calls []mapCall) ([]mapResult, map[any]any) { - return applyCalls(new(RWMutexMap), calls) -} - -func applyDeepCopyMap(calls []mapCall) ([]mapResult, map[any]any) { - return applyCalls(new(DeepCopyMap), calls) -} - -func TestMapMatchesRWMutex(t *testutil.TestRunner) { - if err := quick.CheckEqual(applyMap, applyRWMutexMap, nil); err != nil { - t.Error(err) - } -} - -func TestMapMatchesDeepCopy(t *testutil.TestRunner) { - if err := quick.CheckEqual(applyMap, applyDeepCopyMap, nil); err != nil { - t.Error(err) - } -} - -func TestConcurrentRange(t *testutil.TestRunner) { - const mapSize = 1 << 10 - - m := new(sync.Map) - for n := int64(1); n <= mapSize; n++ { - m.Store(n, int64(n)) - } - - done := make(chan struct{}) - var wg sync.WaitGroup - defer func() { - close(done) - wg.Wait() - }() - for g := int64(runtime.GOMAXPROCS(0)); g > 0; g-- { - r := rand.New(rand.NewSource(g)) - wg.Add(1) - go func(g int64) { - defer wg.Done() - for i := int64(0); ; i++ { - select { - case <-done: - return - default: - } - for n := int64(1); n < mapSize; n++ { - if r.Int63n(mapSize) == 0 { - m.Store(n, n*i*g) - } else { - m.Load(n) - } - } - } - }(g) - } - - //iters := 1 << 10 - //if testing.Short() { - // iters = 16 - //} - iters := 16 - for n := iters; n > 0; n-- { - seen := make(map[int64]bool, mapSize) - - m.Range(func(ki, vi any) bool { - k, v := ki.(int64), vi.(int64) - if v%k != 0 { - t.Fatalf("while Storing multiples of %v, Range saw value %v", k, v) - } - if seen[k] { - t.Fatalf("Range visited key %v twice", k) - } - seen[k] = true - return true - }) - - if len(seen) != mapSize { - t.Fatalf("Range visited %v elements of %v-element Map", len(seen), mapSize) - } - } -} - -func TestIssue40999(t *testutil.TestRunner) { - var m sync.Map - - // Since the miss-counting in missLocked (via Delete) - // compares the miss count with len(m.dirty), - // add an initial entry to bias len(m.dirty) above the miss count. - m.Store(nil, struct{}{}) - - var finalized uint32 - - // Set finalizers that count for collected keys. A non-zero count - // indicates that keys have not been leaked. - for atomic.LoadUint32(&finalized) == 0 { - p := new(int) - runtime.SetFinalizer(p, func(*int) { - atomic.AddUint32(&finalized, 1) - }) - m.Store(p, struct{}{}) - m.Delete(p) - runtime.GC() - } -} - -func TestMapRangeNestedCall(t *testutil.TestRunner) { // Issue 46399 - var m sync.Map - for i, v := range [3]string{"hello", "world", "Go"} { - m.Store(i, v) - } - m.Range(func(key, value any) bool { - m.Range(func(key, value any) bool { - // We should be able to load the key offered in the Range callback, - // because there are no concurrent Delete involved in this tested map. - if v, ok := m.Load(key); !ok || !reflect.DeepEqual(v, value) { - t.Fatalf("Nested Range loads unexpected value, got %+v want %+v", v, value) - } - - // We didn't keep 42 and a value into the map before, if somehow we loaded - // a value from such a key, meaning there must be an internal bug regarding - // nested range in the Map. - if _, loaded := m.LoadOrStore(42, "dummy"); loaded { - t.Fatalf("Nested Range loads unexpected value, want store a new value") - } - - // Try to Store then LoadAndDelete the corresponding value with the key - // 42 to the Map. In this case, the key 42 and associated value should be - // removed from the Map. Therefore any future range won't observe key 42 - // as we checked in above. - val := "sync.Map" - m.Store(42, val) - if v, loaded := m.LoadAndDelete(42); !loaded || !reflect.DeepEqual(v, val) { - t.Fatalf("Nested Range loads unexpected value, got %v, want %v", v, val) - } - return true - }) - - // Remove key from Map on-the-fly. - m.Delete(key) - return true - }) - - // After a Range of Delete, all keys should be removed and any - // further Range won't invoke the callback. Hence length remains 0. - length := 0 - m.Range(func(key, value any) bool { - length++ - return true - }) - - if length != 0 { - t.Fatalf("Unexpected sync.Map size, got %v want %v", length, 0) - } -} - -func TestCompareAndSwap_NonExistingKey(t *testutil.TestRunner) { - m := &sync.Map{} - if m.CompareAndSwap(m, nil, 42) { - // See https://go.dev/issue/51972#issuecomment-1126408637. - t.Fatalf("CompareAndSwap on a non-existing key succeeded") - } -} - -func TestMapRangeNoAllocations(t *testutil.TestRunner) { // Issue 62404 - var m sync.Map - allocs := testing.AllocsPerRun(10, func() { - m.Range(func(key, value any) bool { - return true - }) - }) - if allocs > 0 { - t.Errorf("AllocsPerRun of m.Range = %v; want 0", allocs) - } -} diff --git a/cannon/testdata/go-1-23/mt-mutex/go.mod b/cannon/testdata/go-1-23/mt-mutex/go.mod deleted file mode 100644 index da7b53fb1e4..00000000000 --- a/cannon/testdata/go-1-23/mt-mutex/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module mutex - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/mt-mutex/main.go b/cannon/testdata/go-1-23/mt-mutex/main.go deleted file mode 100644 index 1a3b75c231b..00000000000 --- a/cannon/testdata/go-1-23/mt-mutex/main.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(TestSemaphore, "TestSemaphore") - testutil.RunTest(TestMutex, "TestMutex") - testutil.RunTest(TestMutexFairness, "TestMutexFairness") - - fmt.Println("Mutex test passed") -} diff --git a/cannon/testdata/go-1-23/mt-mutex/mutex_test_copy.go b/cannon/testdata/go-1-23/mt-mutex/mutex_test_copy.go deleted file mode 100644 index d3ed9343c3d..00000000000 --- a/cannon/testdata/go-1-23/mt-mutex/mutex_test_copy.go +++ /dev/null @@ -1,135 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/mutex_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package main - -import ( - "runtime" - . "sync" - "time" - - "utils/testutil" -) - -func HammerSemaphore(s *uint32, loops int, cdone chan bool) { - for i := 0; i < loops; i++ { - Runtime_Semacquire(s) - Runtime_Semrelease(s, false, 0) - } - cdone <- true -} - -func TestSemaphore(t *testutil.TestRunner) { - s := new(uint32) - *s = 1 - c := make(chan bool) - for i := 0; i < 10; i++ { - go HammerSemaphore(s, 1000, c) - } - for i := 0; i < 10; i++ { - <-c - } -} - -func HammerMutex(m *Mutex, loops int, cdone chan bool) { - for i := 0; i < loops; i++ { - if i%3 == 0 { - if m.TryLock() { - m.Unlock() - } - continue - } - m.Lock() - m.Unlock() - } - cdone <- true -} - -func TestMutex(t *testutil.TestRunner) { - if n := runtime.SetMutexProfileFraction(1); n != 0 { - t.Logf("got mutexrate %d expected 0", n) - } - defer runtime.SetMutexProfileFraction(0) - - m := new(Mutex) - - m.Lock() - if m.TryLock() { - t.Fatalf("TryLock succeeded with mutex locked") - } - m.Unlock() - if !m.TryLock() { - t.Fatalf("TryLock failed with mutex unlocked") - } - m.Unlock() - - c := make(chan bool) - for i := 0; i < 10; i++ { - go HammerMutex(m, 1000, c) - } - for i := 0; i < 10; i++ { - <-c - } -} - -func TestMutexFairness(t *testutil.TestRunner) { - var mu Mutex - stop := make(chan bool) - defer close(stop) - go func() { - for { - mu.Lock() - time.Sleep(100 * time.Microsecond) - mu.Unlock() - select { - case <-stop: - return - default: - } - } - }() - done := make(chan bool, 1) - go func() { - for i := 0; i < 10; i++ { - time.Sleep(100 * time.Microsecond) - mu.Lock() - mu.Unlock() - } - done <- true - }() - select { - case <-done: - case <-time.After(10 * time.Second): - t.Fatalf("can't acquire Mutex in 10 seconds") - } -} diff --git a/cannon/testdata/go-1-23/mt-mutex/runtime.go b/cannon/testdata/go-1-23/mt-mutex/runtime.go deleted file mode 100644 index 8d70cb10b35..00000000000 --- a/cannon/testdata/go-1-23/mt-mutex/runtime.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - _ "unsafe" // Required for go:linkname -) - -var Runtime_Semacquire = runtime_Semacquire -var Runtime_Semrelease = runtime_Semrelease - -//go:linkname runtime_Semacquire sync.runtime_Semacquire -func runtime_Semacquire(s *uint32) - -//go:linkname runtime_Semrelease sync.runtime_Semrelease -func runtime_Semrelease(s *uint32, handoff bool, skipframes int) diff --git a/cannon/testdata/go-1-23/mt-once/go.mod b/cannon/testdata/go-1-23/mt-once/go.mod deleted file mode 100644 index 5e12cee2f4c..00000000000 --- a/cannon/testdata/go-1-23/mt-once/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module once - -go 1.23.0 - -toolchain go1.23.8 diff --git a/cannon/testdata/go-1-23/mt-once/main.go b/cannon/testdata/go-1-23/mt-once/main.go deleted file mode 100644 index 3be753e2f70..00000000000 --- a/cannon/testdata/go-1-23/mt-once/main.go +++ /dev/null @@ -1,98 +0,0 @@ -// Portions of this code are derived from code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/400433af3660905ecaceaf19ddad3e6c24b141df/src/sync/once_test.go -// -// --- Original License Notice --- -// -// Copyright 2009 The Go Authors. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google LLC nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -package main - -import ( - "fmt" - "os" - "sync" -) - -func main() { - TestOnce() - TestOncePanic() - - fmt.Println("Once test passed") -} - -type one int - -func (o *one) Increment() { - *o++ -} - -func run(once *sync.Once, o *one, c chan bool) { - once.Do(func() { o.Increment() }) - if v := *o; v != 1 { - _, _ = fmt.Fprintf(os.Stderr, "once failed inside run: %d is not 1\n", v) - os.Exit(1) - } - c <- true -} - -func TestOnce() { - o := new(one) - once := new(sync.Once) - c := make(chan bool) - const N = 10 - for i := 0; i < N; i++ { - go run(once, o, c) - } - for i := 0; i < N; i++ { - <-c - } - if *o != 1 { - _, _ = fmt.Fprintf(os.Stderr, "once failed outside run: %d is not 1\n", *o) - os.Exit(1) - } -} - -func TestOncePanic() { - var once sync.Once - func() { - defer func() { - if r := recover(); r == nil { - _, _ = fmt.Fprintf(os.Stderr, "Once.Do did not panic") - os.Exit(1) - } - }() - once.Do(func() { - panic("failed") - }) - }() - - once.Do(func() { - _, _ = fmt.Fprintf(os.Stderr, "Once.Do called twice") - os.Exit(1) - }) -} diff --git a/cannon/testdata/go-1-23/mt-oncefunc/go.mod b/cannon/testdata/go-1-23/mt-oncefunc/go.mod deleted file mode 100644 index 540e555cc28..00000000000 --- a/cannon/testdata/go-1-23/mt-oncefunc/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module oncefunc - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/mt-oncefunc/main.go b/cannon/testdata/go-1-23/mt-oncefunc/main.go deleted file mode 100644 index d5b0badc292..00000000000 --- a/cannon/testdata/go-1-23/mt-oncefunc/main.go +++ /dev/null @@ -1,22 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(TestOnceFunc, "TestOnceFunc") - testutil.RunTest(TestOnceValue, "TestOnceValue") - testutil.RunTest(TestOnceValues, "TestOnceValues") - testutil.RunTest(TestOnceFuncPanic, "TestOnceFuncPanic") - testutil.RunTest(TestOnceValuePanic, "TestOnceValuePanic") - testutil.RunTest(TestOnceValuesPanic, "TestOnceValuesPanic") - testutil.RunTest(TestOnceFuncPanicNil, "TestOnceFuncPanicNil") - testutil.RunTest(TestOnceFuncGoexit, "TestOnceFuncGoexit") - testutil.RunTest(TestOnceFuncPanicTraceback, "TestOnceFuncPanicTraceback") - testutil.RunTest(TestOnceXGC, "TestOnceXGC") - - fmt.Println("OnceFunc tests passed") -} diff --git a/cannon/testdata/go-1-23/mt-oncefunc/oncefunc_test_copy.go b/cannon/testdata/go-1-23/mt-oncefunc/oncefunc_test_copy.go deleted file mode 100644 index fdbe93c260a..00000000000 --- a/cannon/testdata/go-1-23/mt-oncefunc/oncefunc_test_copy.go +++ /dev/null @@ -1,265 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/oncefunc_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package main - -import ( - "bytes" - "math" - "runtime" - "runtime/debug" - "sync" - "sync/atomic" - "testing" - _ "unsafe" - - "utils/testutil" -) - -// We assume that the Once.Do tests have already covered parallelism. - -func TestOnceFunc(t *testutil.TestRunner) { - calls := 0 - f := sync.OnceFunc(func() { calls++ }) - allocs := testing.AllocsPerRun(10, f) - if calls != 1 { - t.Errorf("want calls==1, got %d", calls) - } - if allocs != 0 { - t.Errorf("want 0 allocations per call, got %v", allocs) - } -} - -func TestOnceValue(t *testutil.TestRunner) { - calls := 0 - f := sync.OnceValue(func() int { - calls++ - return calls - }) - allocs := testing.AllocsPerRun(10, func() { f() }) - value := f() - if calls != 1 { - t.Errorf("want calls==1, got %d", calls) - } - if value != 1 { - t.Errorf("want value==1, got %d", value) - } - if allocs != 0 { - t.Errorf("want 0 allocations per call, got %v", allocs) - } -} - -func TestOnceValues(t *testutil.TestRunner) { - calls := 0 - f := sync.OnceValues(func() (int, int) { - calls++ - return calls, calls + 1 - }) - allocs := testing.AllocsPerRun(10, func() { f() }) - v1, v2 := f() - if calls != 1 { - t.Errorf("want calls==1, got %d", calls) - } - if v1 != 1 || v2 != 2 { - t.Errorf("want v1==1 and v2==2, got %d and %d", v1, v2) - } - if allocs != 0 { - t.Errorf("want 0 allocations per call, got %v", allocs) - } -} - -func testOncePanicX(t testing.TB, calls *int, f func()) { - testOncePanicWith(t, calls, f, func(label string, p any) { - if p != "x" { - t.Fatalf("%s: want panic %v, got %v", label, "x", p) - } - }) -} - -func testOncePanicWith(t testing.TB, calls *int, f func(), check func(label string, p any)) { - // Check that the each call to f panics with the same value, but the - // underlying function is only called once. - for _, label := range []string{"first time", "second time"} { - var p any - panicked := true - func() { - defer func() { - p = recover() - }() - f() - panicked = false - }() - if !panicked { - t.Fatalf("%s: f did not panic", label) - } - check(label, p) - } - if *calls != 1 { - t.Errorf("want calls==1, got %d", *calls) - } -} - -func TestOnceFuncPanic(t *testutil.TestRunner) { - calls := 0 - f := sync.OnceFunc(func() { - calls++ - panic("x") - }) - testOncePanicX(t, &calls, f) -} - -func TestOnceValuePanic(t *testutil.TestRunner) { - calls := 0 - f := sync.OnceValue(func() int { - calls++ - panic("x") - }) - testOncePanicX(t, &calls, func() { f() }) -} - -func TestOnceValuesPanic(t *testutil.TestRunner) { - calls := 0 - f := sync.OnceValues(func() (int, int) { - calls++ - panic("x") - }) - testOncePanicX(t, &calls, func() { f() }) -} - -func TestOnceFuncPanicNil(t *testutil.TestRunner) { - calls := 0 - f := sync.OnceFunc(func() { - calls++ - panic(nil) - }) - testOncePanicWith(t, &calls, f, func(label string, p any) { - switch p.(type) { - case nil, *runtime.PanicNilError: - return - } - t.Fatalf("%s: want nil panic, got %v", label, p) - }) -} - -func TestOnceFuncGoexit(t *testutil.TestRunner) { - // If f calls Goexit, the results are unspecified. But check that f doesn't - // get called twice. - calls := 0 - f := sync.OnceFunc(func() { - calls++ - runtime.Goexit() - }) - var wg sync.WaitGroup - for i := 0; i < 2; i++ { - wg.Add(1) - go func() { - defer wg.Done() - defer func() { recover() }() - f() - }() - wg.Wait() - } - if calls != 1 { - t.Errorf("want calls==1, got %d", calls) - } -} - -func TestOnceFuncPanicTraceback(t *testutil.TestRunner) { - // Test that on the first invocation of a OnceFunc, the stack trace goes all - // the way to the origin of the panic. - f := sync.OnceFunc(onceFuncPanic) - - defer func() { - if p := recover(); p != "x" { - t.Fatalf("want panic %v, got %v", "x", p) - } - stack := debug.Stack() - //want := "sync_test.onceFuncPanic" - want := "main.onceFuncPanic" - if !bytes.Contains(stack, []byte(want)) { - t.Fatalf("want stack containing %v, got:\n%s", want, string(stack)) - } - }() - f() -} - -func onceFuncPanic() { - panic("x") -} - -func TestOnceXGC(t *testutil.TestRunner) { - fns := map[string]func([]byte) func(){ - "OnceFunc": func(buf []byte) func() { - return sync.OnceFunc(func() { buf[0] = 1 }) - }, - "OnceValue": func(buf []byte) func() { - f := sync.OnceValue(func() any { buf[0] = 1; return nil }) - return func() { f() } - }, - "OnceValues": func(buf []byte) func() { - f := sync.OnceValues(func() (any, any) { buf[0] = 1; return nil, nil }) - return func() { f() } - }, - } - for n, fn := range fns { - t.Run(n, func(t testing.TB) { - buf := make([]byte, 1024) - var gc atomic.Bool - runtime.SetFinalizer(&buf[0], func(_ *byte) { - gc.Store(true) - }) - f := fn(buf) - gcwaitfin() - if gc.Load() != false { - t.Fatal("wrapped function garbage collected too early") - } - f() - gcwaitfin() - if gc.Load() != true { - // Even if f is still alive, the function passed to Once(Func|Value|Values) - // is not kept alive after the first call to f. - t.Fatal("wrapped function should be garbage collected, but still live") - } - f() - }) - } -} - -// gcwaitfin performs garbage collection and waits for all finalizers to run. -func gcwaitfin() { - runtime.GC() - runtime_blockUntilEmptyFinalizerQueue(math.MaxInt64) -} - -//go:linkname runtime_blockUntilEmptyFinalizerQueue runtime.blockUntilEmptyFinalizerQueue -func runtime_blockUntilEmptyFinalizerQueue(int64) bool diff --git a/cannon/testdata/go-1-23/mt-pool/export_test_copy.go b/cannon/testdata/go-1-23/mt-pool/export_test_copy.go deleted file mode 100644 index 37b7c4a92bf..00000000000 --- a/cannon/testdata/go-1-23/mt-pool/export_test_copy.go +++ /dev/null @@ -1,86 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/export_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package main - -// Export for testing. -// var Runtime_Semacquire = runtime_Semacquire -// var Runtime_Semrelease = runtime_Semrelease -var Runtime_procPin = runtime_procPin -var Runtime_procUnpin = runtime_procUnpin - -// poolDequeue testing. -type PoolDequeue interface { - PushHead(val any) bool - PopHead() (any, bool) - PopTail() (any, bool) -} - -func NewPoolDequeue(n int) PoolDequeue { - d := &poolDequeue{ - vals: make([]eface, n), - } - // For testing purposes, set the head and tail indexes close - // to wrapping around. - d.headTail.Store(d.pack(1< ./../../utils diff --git a/cannon/testdata/go-1-23/mt-pool/main.go b/cannon/testdata/go-1-23/mt-pool/main.go deleted file mode 100644 index 2c138b07cd9..00000000000 --- a/cannon/testdata/go-1-23/mt-pool/main.go +++ /dev/null @@ -1,20 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(TestPool, "TestPool") - testutil.RunTest(TestPoolNew, "TestPoolNew") - testutil.RunTest(TestPoolGC, "TestPoolGC") - testutil.RunTest(TestPoolRelease, "TestPoolRelease") - testutil.RunTest(TestPoolStress, "TestPoolStress") - testutil.RunTest(TestPoolDequeue, "TestPoolDequeue") - testutil.RunTest(TestPoolChain, "TestPoolChain") - testutil.RunTest(TestNilPool, "TestNilPool") - - fmt.Println("Pool test passed") -} diff --git a/cannon/testdata/go-1-23/mt-pool/pool_test_copy.go b/cannon/testdata/go-1-23/mt-pool/pool_test_copy.go deleted file mode 100644 index 962cbfce7b5..00000000000 --- a/cannon/testdata/go-1-23/mt-pool/pool_test_copy.go +++ /dev/null @@ -1,298 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/pool_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package main - -import ( - "runtime" - "runtime/debug" - . "sync" - "sync/atomic" - "testing" - "time" - - "utils/testutil" -) - -var short bool = true - -func TestPool(t *testutil.TestRunner) { - // disable GC so we can control when it happens. - defer debug.SetGCPercent(debug.SetGCPercent(-1)) - var p Pool - if p.Get() != nil { - t.Fatal("expected empty") - } - - // Make sure that the goroutine doesn't migrate to another P - // between Put and Get calls. - Runtime_procPin() - p.Put("a") - p.Put("b") - if g := p.Get(); g != "a" { - t.Fatalf("got %#v; want a", g) - } - if g := p.Get(); g != "b" { - t.Fatalf("got %#v; want b", g) - } - if g := p.Get(); g != nil { - t.Fatalf("got %#v; want nil", g) - } - Runtime_procUnpin() - - // Put in a large number of objects so they spill into - // stealable space. - for i := 0; i < 100; i++ { - p.Put("c") - } - // After one GC, the victim cache should keep them alive. - runtime.GC() - if g := p.Get(); g != "c" { - t.Fatalf("got %#v; want c after GC", g) - } - // A second GC should drop the victim cache. - runtime.GC() - if g := p.Get(); g != nil { - t.Fatalf("got %#v; want nil after second GC", g) - } -} - -func TestPoolNew(t *testutil.TestRunner) { - // disable GC so we can control when it happens. - defer debug.SetGCPercent(debug.SetGCPercent(-1)) - - i := 0 - p := Pool{ - New: func() any { - i++ - return i - }, - } - if v := p.Get(); v != 1 { - t.Fatalf("got %v; want 1", v) - } - if v := p.Get(); v != 2 { - t.Fatalf("got %v; want 2", v) - } - - // Make sure that the goroutine doesn't migrate to another P - // between Put and Get calls. - Runtime_procPin() - p.Put(42) - if v := p.Get(); v != 42 { - t.Fatalf("got %v; want 42", v) - } - Runtime_procUnpin() - - if v := p.Get(); v != 3 { - t.Fatalf("got %v; want 3", v) - } -} - -// Test that Pool does not hold pointers to previously cached resources. -func TestPoolGC(t *testutil.TestRunner) { - testPool(t, true) -} - -// Test that Pool releases resources on GC. -func TestPoolRelease(t *testutil.TestRunner) { - testPool(t, false) -} - -func testPool(t testing.TB, drain bool) { - var p Pool - const N = 100 -loop: - for try := 0; try < 3; try++ { - if try == 1 && short { - break - } - var fin, fin1 uint32 - for i := 0; i < N; i++ { - v := new(string) - runtime.SetFinalizer(v, func(vv *string) { - atomic.AddUint32(&fin, 1) - }) - p.Put(v) - } - if drain { - for i := 0; i < N; i++ { - p.Get() - } - } - for i := 0; i < 5; i++ { - runtime.GC() - time.Sleep(time.Duration(i*100+10) * time.Millisecond) - // 1 pointer can remain on stack or elsewhere - if fin1 = atomic.LoadUint32(&fin); fin1 >= N-1 { - continue loop - } - } - t.Fatalf("only %v out of %v resources are finalized on try %v", fin1, N, try) - } -} - -func TestPoolStress(t *testutil.TestRunner) { - const P = 10 - N := int(1e6) - if short { - N /= 100 - } - var p Pool - done := make(chan bool) - for i := 0; i < P; i++ { - go func() { - var v any = 0 - for j := 0; j < N; j++ { - if v == nil { - v = 0 - } - p.Put(v) - v = p.Get() - if v != nil && v.(int) != 0 { - t.Errorf("expect 0, got %v", v) - break - } - } - done <- true - }() - } - for i := 0; i < P; i++ { - <-done - } -} - -func TestPoolDequeue(t *testutil.TestRunner) { - testPoolDequeue(t, NewPoolDequeue(16)) -} - -func TestPoolChain(t *testutil.TestRunner) { - testPoolDequeue(t, NewPoolChain()) -} - -func testPoolDequeue(t testing.TB, d PoolDequeue) { - const P = 10 - var N int = 2e6 - if short { - N = 1e3 - } - have := make([]int32, N) - var stop int32 - var wg WaitGroup - record := func(val int) { - atomic.AddInt32(&have[val], 1) - if val == N-1 { - atomic.StoreInt32(&stop, 1) - } - } - - // Start P-1 consumers. - for i := 1; i < P; i++ { - wg.Add(1) - go func() { - fail := 0 - for atomic.LoadInt32(&stop) == 0 { - val, ok := d.PopTail() - if ok { - fail = 0 - record(val.(int)) - } else { - // Speed up the test by - // allowing the pusher to run. - if fail++; fail%100 == 0 { - runtime.Gosched() - } - } - } - wg.Done() - }() - } - - // Start 1 producer. - nPopHead := 0 - wg.Add(1) - go func() { - for j := 0; j < N; j++ { - for !d.PushHead(j) { - // Allow a popper to run. - runtime.Gosched() - } - if j%10 == 0 { - val, ok := d.PopHead() - if ok { - nPopHead++ - record(val.(int)) - } - } - } - wg.Done() - }() - wg.Wait() - - // Check results. - for i, count := range have { - if count != 1 { - t.Errorf("expected have[%d] = 1, got %d", i, count) - } - } - // Check that at least some PopHeads succeeded. We skip this - // check in short mode because it's common enough that the - // queue will stay nearly empty all the time and a PopTail - // will happen during the window between every PushHead and - // PopHead. - if !short && nPopHead == 0 { - t.Errorf("popHead never succeeded") - } -} - -func TestNilPool(t *testutil.TestRunner) { - catch := func() { - if recover() == nil { - t.Error("expected panic") - } - } - - var p *Pool - t.Run("Get", func(t testing.TB) { - defer catch() - if p.Get() != nil { - t.Error("expected empty") - } - t.Error("should have panicked already") - }) - t.Run("Put", func(t testing.TB) { - defer catch() - p.Put("a") - t.Error("should have panicked already") - }) -} diff --git a/cannon/testdata/go-1-23/mt-pool/poolqueue_copy.go b/cannon/testdata/go-1-23/mt-pool/poolqueue_copy.go deleted file mode 100644 index 5aa7b1ffa7b..00000000000 --- a/cannon/testdata/go-1-23/mt-pool/poolqueue_copy.go +++ /dev/null @@ -1,338 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/poolqueue.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package main - -import ( - "sync/atomic" - "unsafe" -) - -// poolDequeue is a lock-free fixed-size single-producer, -// multi-consumer queue. The single producer can both push and pop -// from the head, and consumers can pop from the tail. -// -// It has the added feature that it nils out unused slots to avoid -// unnecessary retention of objects. This is important for sync.Pool, -// but not typically a property considered in the literature. -type poolDequeue struct { - // headTail packs together a 32-bit head index and a 32-bit - // tail index. Both are indexes into vals modulo len(vals)-1. - // - // tail = index of oldest data in queue - // head = index of next slot to fill - // - // Slots in the range [tail, head) are owned by consumers. - // A consumer continues to own a slot outside this range until - // it nils the slot, at which point ownership passes to the - // producer. - // - // The head index is stored in the most-significant bits so - // that we can atomically add to it and the overflow is - // harmless. - headTail atomic.Uint64 - - // vals is a ring buffer of interface{} values stored in this - // dequeue. The size of this must be a power of 2. - // - // vals[i].typ is nil if the slot is empty and non-nil - // otherwise. A slot is still in use until *both* the tail - // index has moved beyond it and typ has been set to nil. This - // is set to nil atomically by the consumer and read - // atomically by the producer. - vals []eface -} - -type eface struct { - typ, val unsafe.Pointer -} - -const dequeueBits = 32 - -// dequeueLimit is the maximum size of a poolDequeue. -// -// This must be at most (1<> dequeueBits) & mask) - tail = uint32(ptrs & mask) - return -} - -func (d *poolDequeue) pack(head, tail uint32) uint64 { - const mask = 1<= dequeueLimit { - // Can't make it any bigger. - newSize = dequeueLimit - } - - d2 := &poolChainElt{prev: d} - d2.vals = make([]eface, newSize) - c.head = d2 - storePoolChainElt(&d.next, d2) - d2.pushHead(val) -} - -func (c *poolChain) popHead() (any, bool) { - d := c.head - for d != nil { - if val, ok := d.popHead(); ok { - return val, ok - } - // There may still be unconsumed elements in the - // previous dequeue, so try backing up. - d = loadPoolChainElt(&d.prev) - } - return nil, false -} - -func (c *poolChain) popTail() (any, bool) { - d := loadPoolChainElt(&c.tail) - if d == nil { - return nil, false - } - - for { - // It's important that we load the next pointer - // *before* popping the tail. In general, d may be - // transiently empty, but if next is non-nil before - // the pop and the pop fails, then d is permanently - // empty, which is the only condition under which it's - // safe to drop d from the chain. - d2 := loadPoolChainElt(&d.next) - - if val, ok := d.popTail(); ok { - return val, ok - } - - if d2 == nil { - // This is the only dequeue. It's empty right - // now, but could be pushed to in the future. - return nil, false - } - - // The tail of the chain has been drained, so move on - // to the next dequeue. Try to drop it from the chain - // so the next pop doesn't have to look at the empty - // dequeue again. - if atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(&c.tail)), unsafe.Pointer(d), unsafe.Pointer(d2)) { - // We won the race. Clear the prev pointer so - // the garbage collector can collect the empty - // dequeue and so popHead doesn't back up - // further than necessary. - storePoolChainElt(&d2.prev, nil) - } - d = d2 - } -} diff --git a/cannon/testdata/go-1-23/mt-pool/runtime.go b/cannon/testdata/go-1-23/mt-pool/runtime.go deleted file mode 100644 index 1b6dbe3e6cd..00000000000 --- a/cannon/testdata/go-1-23/mt-pool/runtime.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -import ( - _ "unsafe" // Required for go:linkname -) - -//go:linkname runtime_procPin runtime.procPin -func runtime_procPin() int - -//go:linkname runtime_procUnpin runtime.procUnpin -func runtime_procUnpin() diff --git a/cannon/testdata/go-1-23/mt-rwmutex/go.mod b/cannon/testdata/go-1-23/mt-rwmutex/go.mod deleted file mode 100644 index 58af8e7e2bc..00000000000 --- a/cannon/testdata/go-1-23/mt-rwmutex/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module rwmutex - -go 1.23.0 - -toolchain go1.23.8 diff --git a/cannon/testdata/go-1-23/mt-rwmutex/main.go b/cannon/testdata/go-1-23/mt-rwmutex/main.go deleted file mode 100644 index 8553bba75ef..00000000000 --- a/cannon/testdata/go-1-23/mt-rwmutex/main.go +++ /dev/null @@ -1,226 +0,0 @@ -// Portions of this code are derived from code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/400433af3660905ecaceaf19ddad3e6c24b141df/src/sync/rwmutex_test.go -// -// --- Original License Notice --- -// -// Copyright 2009 The Go Authors. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google LLC nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -package main - -import ( - "fmt" - "os" - "runtime" - "sync" - "sync/atomic" -) - -func main() { - TestParallelReaders() - TestRLocker() - TestRWMutex() - - fmt.Println("RWMutex test passed") -} - -func parallelReader(m *sync.RWMutex, clocked, cunlock, cdone chan bool) { - m.RLock() - clocked <- true - <-cunlock - m.RUnlock() - cdone <- true -} - -func doTestParallelReaders(numReaders, gomaxprocs int) { - runtime.GOMAXPROCS(gomaxprocs) - var m sync.RWMutex - clocked := make(chan bool) - cunlock := make(chan bool) - cdone := make(chan bool) - for i := 0; i < numReaders; i++ { - go parallelReader(&m, clocked, cunlock, cdone) - } - // Wait for all parallel RLock()s to succeed. - for i := 0; i < numReaders; i++ { - <-clocked - } - for i := 0; i < numReaders; i++ { - cunlock <- true - } - // Wait for the goroutines to finish. - for i := 0; i < numReaders; i++ { - <-cdone - } -} - -func TestParallelReaders() { - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(-1)) - doTestParallelReaders(1, 4) - doTestParallelReaders(3, 4) - doTestParallelReaders(4, 2) -} - -func reader(rwm *sync.RWMutex, num_iterations int, activity *int32, cdone chan bool) { - for i := 0; i < num_iterations; i++ { - rwm.RLock() - n := atomic.AddInt32(activity, 1) - if n < 1 || n >= 10000 { - rwm.RUnlock() - panic(fmt.Sprintf("wlock(%d)\n", n)) - } - for i := 0; i < 100; i++ { - } - atomic.AddInt32(activity, -1) - rwm.RUnlock() - } - cdone <- true -} - -func writer(rwm *sync.RWMutex, num_iterations int, activity *int32, cdone chan bool) { - for i := 0; i < num_iterations; i++ { - rwm.Lock() - n := atomic.AddInt32(activity, 10000) - if n != 10000 { - rwm.Unlock() - panic(fmt.Sprintf("wlock(%d)\n", n)) - } - for i := 0; i < 100; i++ { - } - atomic.AddInt32(activity, -10000) - rwm.Unlock() - } - cdone <- true -} - -func HammerRWMutex(gomaxprocs, numReaders, num_iterations int) { - runtime.GOMAXPROCS(gomaxprocs) - // Number of active readers + 10000 * number of active writers. - var activity int32 - var rwm sync.RWMutex - cdone := make(chan bool) - go writer(&rwm, num_iterations, &activity, cdone) - var i int - for i = 0; i < numReaders/2; i++ { - go reader(&rwm, num_iterations, &activity, cdone) - } - go writer(&rwm, num_iterations, &activity, cdone) - for ; i < numReaders; i++ { - go reader(&rwm, num_iterations, &activity, cdone) - } - // Wait for the 2 writers and all readers to finish. - for i := 0; i < 2+numReaders; i++ { - <-cdone - } -} - -func TestRWMutex() { - var m sync.RWMutex - - m.Lock() - if m.TryLock() { - _, _ = fmt.Fprintln(os.Stderr, "TryLock succeeded with mutex locked") - os.Exit(1) - } - if m.TryRLock() { - _, _ = fmt.Fprintln(os.Stderr, "TryRLock succeeded with mutex locked") - os.Exit(1) - } - m.Unlock() - - if !m.TryLock() { - _, _ = fmt.Fprintln(os.Stderr, "TryLock failed with mutex unlocked") - os.Exit(1) - } - m.Unlock() - - if !m.TryRLock() { - _, _ = fmt.Fprintln(os.Stderr, "TryRLock failed with mutex unlocked") - os.Exit(1) - } - if !m.TryRLock() { - _, _ = fmt.Fprintln(os.Stderr, "TryRLock failed with mutex unlocked") - os.Exit(1) - } - if m.TryLock() { - _, _ = fmt.Fprintln(os.Stderr, "TryLock succeeded with mutex rlocked") - os.Exit(1) - } - m.RUnlock() - m.RUnlock() - - defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(-1)) - n := 5 - - HammerRWMutex(1, 1, n) - HammerRWMutex(1, 3, n) - HammerRWMutex(1, 10, n) - HammerRWMutex(4, 1, n) - HammerRWMutex(4, 3, n) - HammerRWMutex(4, 10, n) - HammerRWMutex(10, 1, n) - HammerRWMutex(10, 3, n) - HammerRWMutex(10, 10, n) - HammerRWMutex(10, 5, n) -} - -func TestRLocker() { - var wl sync.RWMutex - var rl sync.Locker - wlocked := make(chan bool, 1) - rlocked := make(chan bool, 1) - rl = wl.RLocker() - n := 10 - go func() { - for i := 0; i < n; i++ { - rl.Lock() - rl.Lock() - rlocked <- true - wl.Lock() - wlocked <- true - } - }() - for i := 0; i < n; i++ { - <-rlocked - rl.Unlock() - select { - case <-wlocked: - _, _ = fmt.Fprintln(os.Stderr, "RLocker() didn't read-lock it") - os.Exit(1) - default: - } - rl.Unlock() - <-wlocked - select { - case <-rlocked: - _, _ = fmt.Fprintln(os.Stderr, "RLocker() didn't respect the write lock") - os.Exit(1) - default: - } - wl.Unlock() - } -} diff --git a/cannon/testdata/go-1-23/mt-value/go.mod b/cannon/testdata/go-1-23/mt-value/go.mod deleted file mode 100644 index 204d247c731..00000000000 --- a/cannon/testdata/go-1-23/mt-value/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module mtvalue - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/mt-value/main.go b/cannon/testdata/go-1-23/mt-value/main.go deleted file mode 100644 index 51fd1b2b730..00000000000 --- a/cannon/testdata/go-1-23/mt-value/main.go +++ /dev/null @@ -1,20 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(TestValue, "TestValue") - testutil.RunTest(TestValueLarge, "TestValueLarge") - testutil.RunTest(TestValuePanic, "TestValuePanic") - testutil.RunTest(TestValueConcurrent, "TestValueConcurrent") - testutil.RunTest(TestValue_Swap, "TestValue_Swap") - testutil.RunTest(TestValueSwapConcurrent, "TestValueSwapConcurrent") - testutil.RunTest(TestValue_CompareAndSwap, "TestValue_CompareAndSwap") - testutil.RunTest(TestValueCompareAndSwapConcurrent, "TestValueCompareAndSwapConcurrent") - - fmt.Println("Value tests passed") -} diff --git a/cannon/testdata/go-1-23/mt-value/value_test_copy.go b/cannon/testdata/go-1-23/mt-value/value_test_copy.go deleted file mode 100644 index 32ccc006740..00000000000 --- a/cannon/testdata/go-1-23/mt-value/value_test_copy.go +++ /dev/null @@ -1,312 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/atomic/value_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package main - -import ( - "math/rand" - "runtime" - "strconv" - "sync" - "sync/atomic" - . "sync/atomic" - "testing" - - "utils/testutil" -) - -var short bool = true - -func TestValue(t *testutil.TestRunner) { - var v Value - if v.Load() != nil { - t.Fatal("initial Value is not nil") - } - v.Store(42) - x := v.Load() - if xx, ok := x.(int); !ok || xx != 42 { - t.Fatalf("wrong value: got %+v, want 42", x) - } - v.Store(84) - x = v.Load() - if xx, ok := x.(int); !ok || xx != 84 { - t.Fatalf("wrong value: got %+v, want 84", x) - } -} - -func TestValueLarge(t *testutil.TestRunner) { - var v Value - v.Store("foo") - x := v.Load() - if xx, ok := x.(string); !ok || xx != "foo" { - t.Fatalf("wrong value: got %+v, want foo", x) - } - v.Store("barbaz") - x = v.Load() - if xx, ok := x.(string); !ok || xx != "barbaz" { - t.Fatalf("wrong value: got %+v, want barbaz", x) - } -} - -func TestValuePanic(t *testutil.TestRunner) { - const nilErr = "sync/atomic: store of nil value into Value" - const badErr = "sync/atomic: store of inconsistently typed value into Value" - var v Value - func() { - defer func() { - err := recover() - if err != nilErr { - t.Fatalf("inconsistent store panic: got '%v', want '%v'", err, nilErr) - } - }() - v.Store(nil) - }() - v.Store(42) - func() { - defer func() { - err := recover() - if err != badErr { - t.Fatalf("inconsistent store panic: got '%v', want '%v'", err, badErr) - } - }() - v.Store("foo") - }() - func() { - defer func() { - err := recover() - if err != nilErr { - t.Fatalf("inconsistent store panic: got '%v', want '%v'", err, nilErr) - } - }() - v.Store(nil) - }() -} - -func TestValueConcurrent(t *testutil.TestRunner) { - tests := [][]any{ - {uint16(0), ^uint16(0), uint16(1 + 2<<8), uint16(3 + 4<<8)}, - {uint32(0), ^uint32(0), uint32(1 + 2<<16), uint32(3 + 4<<16)}, - {uint64(0), ^uint64(0), uint64(1 + 2<<32), uint64(3 + 4<<32)}, - {complex(0, 0), complex(1, 2), complex(3, 4), complex(5, 6)}, - } - p := 4 * runtime.GOMAXPROCS(0) - N := int(1e5) - if short { - p /= 2 - //N = 1e3 - N = 1e2 - } - for _, test := range tests { - var v Value - done := make(chan bool, p) - for i := 0; i < p; i++ { - go func() { - r := rand.New(rand.NewSource(rand.Int63())) - expected := true - loop: - for j := 0; j < N; j++ { - x := test[r.Intn(len(test))] - v.Store(x) - x = v.Load() - for _, x1 := range test { - if x == x1 { - continue loop - } - } - t.Logf("loaded unexpected value %+v, want %+v", x, test) - expected = false - break - } - done <- expected - }() - } - for i := 0; i < p; i++ { - if !<-done { - t.FailNow() - } - } - } -} - -func BenchmarkValueRead(b *testing.B) { - var v Value - v.Store(new(int)) - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - x := v.Load().(*int) - if *x != 0 { - b.Fatalf("wrong value: got %v, want 0", *x) - } - } - }) -} - -var Value_SwapTests = []struct { - init any - new any - want any - err any -}{ - {init: nil, new: nil, err: "sync/atomic: swap of nil value into Value"}, - {init: nil, new: true, want: nil, err: nil}, - {init: true, new: "", err: "sync/atomic: swap of inconsistently typed value into Value"}, - {init: true, new: false, want: true, err: nil}, -} - -func TestValue_Swap(t *testutil.TestRunner) { - for i, tt := range Value_SwapTests { - t.Run(strconv.Itoa(i), func(t testing.TB) { - var v Value - if tt.init != nil { - v.Store(tt.init) - } - defer func() { - err := recover() - switch { - case tt.err == nil && err != nil: - t.Errorf("should not panic, got %v", err) - case tt.err != nil && err == nil: - t.Errorf("should panic %v, got ", tt.err) - } - }() - if got := v.Swap(tt.new); got != tt.want { - t.Errorf("got %v, want %v", got, tt.want) - } - if got := v.Load(); got != tt.new { - t.Errorf("got %v, want %v", got, tt.new) - } - }) - } -} - -func TestValueSwapConcurrent(t *testutil.TestRunner) { - var v Value - var count uint64 - var g sync.WaitGroup - var m, n uint64 = 10000, 10000 - if short { - //m = 1000 - //n = 1000 - m = 10 - n = 10 - } - for i := uint64(0); i < m*n; i += n { - i := i - g.Add(1) - go func() { - var c uint64 - for new := i; new < i+n; new++ { - if old := v.Swap(new); old != nil { - c += old.(uint64) - } - } - atomic.AddUint64(&count, c) - g.Done() - }() - } - g.Wait() - if want, got := (m*n-1)*(m*n)/2, count+v.Load().(uint64); got != want { - t.Errorf("sum from 0 to %d was %d, want %v", m*n-1, got, want) - } -} - -var heapA, heapB = struct{ uint }{0}, struct{ uint }{0} - -var Value_CompareAndSwapTests = []struct { - init any - new any - old any - want bool - err any -}{ - {init: nil, new: nil, old: nil, err: "sync/atomic: compare and swap of nil value into Value"}, - {init: nil, new: true, old: "", err: "sync/atomic: compare and swap of inconsistently typed values into Value"}, - {init: nil, new: true, old: true, want: false, err: nil}, - {init: nil, new: true, old: nil, want: true, err: nil}, - {init: true, new: "", err: "sync/atomic: compare and swap of inconsistently typed value into Value"}, - {init: true, new: true, old: false, want: false, err: nil}, - {init: true, new: true, old: true, want: true, err: nil}, - {init: heapA, new: struct{ uint }{1}, old: heapB, want: true, err: nil}, -} - -func TestValue_CompareAndSwap(t *testutil.TestRunner) { - for i, tt := range Value_CompareAndSwapTests { - t.Run(strconv.Itoa(i), func(t testing.TB) { - var v Value - if tt.init != nil { - v.Store(tt.init) - } - defer func() { - err := recover() - switch { - case tt.err == nil && err != nil: - t.Errorf("got %v, wanted no panic", err) - case tt.err != nil && err == nil: - t.Errorf("did not panic, want %v", tt.err) - } - }() - if got := v.CompareAndSwap(tt.old, tt.new); got != tt.want { - t.Errorf("got %v, want %v", got, tt.want) - } - }) - } -} - -func TestValueCompareAndSwapConcurrent(t *testutil.TestRunner) { - var v Value - var w sync.WaitGroup - v.Store(0) - m, n := 1000, 100 - if short { - //m = 100 - //n = 100 - m = 10 - n = 10 - } - for i := 0; i < m; i++ { - i := i - w.Add(1) - go func() { - for j := i; j < m*n; runtime.Gosched() { - if v.CompareAndSwap(j, j+1) { - j += m - } - } - w.Done() - }() - } - w.Wait() - if stop := v.Load().(int); stop != m*n { - t.Errorf("did not get to %v, stopped at %v", m*n, stop) - } -} diff --git a/cannon/testdata/go-1-23/mt-wg/go.mod b/cannon/testdata/go-1-23/mt-wg/go.mod deleted file mode 100644 index 200f68c7909..00000000000 --- a/cannon/testdata/go-1-23/mt-wg/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module wg - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/mt-wg/main.go b/cannon/testdata/go-1-23/mt-wg/main.go deleted file mode 100644 index cfdb3e56b8e..00000000000 --- a/cannon/testdata/go-1-23/mt-wg/main.go +++ /dev/null @@ -1,16 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(TestWaitGroup, "TestWaitGroup") - testutil.RunTest(TestWaitGroupMisuse, "TestWaitGroupMisuse") - testutil.RunTest(TestWaitGroupRace, "TestWaitGroupRace") - testutil.RunTest(TestWaitGroupAlign, "TestWaitGroupAlign") - - fmt.Println("WaitGroup tests passed") -} diff --git a/cannon/testdata/go-1-23/mt-wg/waitgroup_test_copy.go b/cannon/testdata/go-1-23/mt-wg/waitgroup_test_copy.go deleted file mode 100644 index 81f0cd0ce4c..00000000000 --- a/cannon/testdata/go-1-23/mt-wg/waitgroup_test_copy.go +++ /dev/null @@ -1,130 +0,0 @@ -// This file is based on code written by The Go Authors. -// See original source: https://github.com/golang/go/blob/go1.22.7/src/sync/waitgroup_test.go -// -// --- Original License Notice --- -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -package main - -import ( - . "sync" - "sync/atomic" - "testing" - - "utils/testutil" -) - -func testWaitGroup(t testing.TB, wg1 *WaitGroup, wg2 *WaitGroup) { - n := 16 - wg1.Add(n) - wg2.Add(n) - exited := make(chan bool, n) - for i := 0; i != n; i++ { - go func() { - wg1.Done() - wg2.Wait() - exited <- true - }() - } - wg1.Wait() - for i := 0; i != n; i++ { - select { - case <-exited: - t.Fatal("WaitGroup released group too soon") - default: - } - wg2.Done() - } - for i := 0; i != n; i++ { - <-exited // Will block if barrier fails to unlock someone. - } -} - -func TestWaitGroup(t *testutil.TestRunner) { - wg1 := &WaitGroup{} - wg2 := &WaitGroup{} - - // Run the same test a few times to ensure barrier is in a proper state. - for i := 0; i != 8; i++ { - testWaitGroup(t, wg1, wg2) - } -} - -func TestWaitGroupMisuse(t *testutil.TestRunner) { - defer func() { - err := recover() - if err != "sync: negative WaitGroup counter" { - t.Fatalf("Unexpected panic: %#v", err) - } - }() - wg := &WaitGroup{} - wg.Add(1) - wg.Done() - wg.Done() - t.Fatal("Should panic") -} - -func TestWaitGroupRace(t *testutil.TestRunner) { - // Run this test for about 1ms. - for i := 0; i < 1000; i++ { - wg := &WaitGroup{} - n := new(int32) - // spawn goroutine 1 - wg.Add(1) - go func() { - atomic.AddInt32(n, 1) - wg.Done() - }() - // spawn goroutine 2 - wg.Add(1) - go func() { - atomic.AddInt32(n, 1) - wg.Done() - }() - // Wait for goroutine 1 and 2 - wg.Wait() - if atomic.LoadInt32(n) != 2 { - t.Fatal("Spurious wakeup from Wait") - } - } -} - -func TestWaitGroupAlign(t *testutil.TestRunner) { - type X struct { - x byte - wg WaitGroup - } - var x X - x.wg.Add(1) - go func(x *X) { - x.wg.Done() - }(&x) - x.wg.Wait() -} diff --git a/cannon/testdata/go-1-23/syscall-eventfd/go.mod b/cannon/testdata/go-1-23/syscall-eventfd/go.mod deleted file mode 100644 index 135864fa623..00000000000 --- a/cannon/testdata/go-1-23/syscall-eventfd/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module syscalleventfd - -go 1.23.0 - -toolchain go1.23.8 - -require common v0.0.0 - -replace common => ./../../common diff --git a/cannon/testdata/go-1-23/syscall-eventfd/main.go b/cannon/testdata/go-1-23/syscall-eventfd/main.go deleted file mode 100644 index 07efb609324..00000000000 --- a/cannon/testdata/go-1-23/syscall-eventfd/main.go +++ /dev/null @@ -1,9 +0,0 @@ -package main - -import ( - "common/syscalltests" -) - -func main() { - syscalltests.EventfdTest() -} diff --git a/cannon/testdata/go-1-23/utilscheck/go.mod b/cannon/testdata/go-1-23/utilscheck/go.mod deleted file mode 100644 index 86a83d70e2e..00000000000 --- a/cannon/testdata/go-1-23/utilscheck/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module utilscheck - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/utilscheck/main.go b/cannon/testdata/go-1-23/utilscheck/main.go deleted file mode 100644 index ad66a3211ad..00000000000 --- a/cannon/testdata/go-1-23/utilscheck/main.go +++ /dev/null @@ -1,17 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(ShouldFail, "ShouldFail") - - fmt.Println("Passed test that should have failed") -} - -func ShouldFail(t *testutil.TestRunner) { - t.Fail() -} diff --git a/cannon/testdata/go-1-23/utilscheck2/go.mod b/cannon/testdata/go-1-23/utilscheck2/go.mod deleted file mode 100644 index 34662cbed40..00000000000 --- a/cannon/testdata/go-1-23/utilscheck2/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module utilscheck2 - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/utilscheck2/main.go b/cannon/testdata/go-1-23/utilscheck2/main.go deleted file mode 100644 index 6fc619f18fe..00000000000 --- a/cannon/testdata/go-1-23/utilscheck2/main.go +++ /dev/null @@ -1,24 +0,0 @@ -package main - -import ( - "fmt" - "testing" - - "utils/testutil" -) - -func main() { - testutil.RunTest(ShouldFail, "ShouldFail") - - fmt.Println("Passed test that should have failed") -} - -func ShouldFail(t *testutil.TestRunner) { - t.Run("subtest 1", func(t testing.TB) { - // Do something - }) - - t.Run("subtest 2", func(t testing.TB) { - t.Fail() - }) -} diff --git a/cannon/testdata/go-1-23/utilscheck3/go.mod b/cannon/testdata/go-1-23/utilscheck3/go.mod deleted file mode 100644 index 90e2c12c115..00000000000 --- a/cannon/testdata/go-1-23/utilscheck3/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module utilscheck3 - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/utilscheck3/main.go b/cannon/testdata/go-1-23/utilscheck3/main.go deleted file mode 100644 index 248c891808b..00000000000 --- a/cannon/testdata/go-1-23/utilscheck3/main.go +++ /dev/null @@ -1,20 +0,0 @@ -package main - -import ( - "fmt" - "testing" - - "utils/testutil" -) - -func main() { - testutil.RunTest(ShouldFail, "ShouldFail") - - fmt.Println("Passed test that should have failed") -} - -func ShouldFail(t *testutil.TestRunner) { - t.Run("panic test", func(t testing.TB) { - panic("oops") - }) -} diff --git a/cannon/testdata/go-1-23/utilscheck4/go.mod b/cannon/testdata/go-1-23/utilscheck4/go.mod deleted file mode 100644 index af2f4ec5769..00000000000 --- a/cannon/testdata/go-1-23/utilscheck4/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module utilscheck4 - -go 1.23.0 - -toolchain go1.23.8 - -require utils v0.0.0 - -replace utils => ./../../utils diff --git a/cannon/testdata/go-1-23/utilscheck4/main.go b/cannon/testdata/go-1-23/utilscheck4/main.go deleted file mode 100644 index deb78e2cb4d..00000000000 --- a/cannon/testdata/go-1-23/utilscheck4/main.go +++ /dev/null @@ -1,17 +0,0 @@ -package main - -import ( - "fmt" - - "utils/testutil" -) - -func main() { - testutil.RunTest(ShouldFail, "ShouldFail") - - fmt.Println("Passed test that should have failed") -} - -func ShouldFail(t *testutil.TestRunner) { - panic("oops") -} diff --git a/cannon/testdata/go-1-24/alloc/go.mod b/cannon/testdata/go-1-24/alloc/go.mod index 2ba7887a35a..2c44f1e5b49 100644 --- a/cannon/testdata/go-1-24/alloc/go.mod +++ b/cannon/testdata/go-1-24/alloc/go.mod @@ -1,14 +1,14 @@ module alloc -go 1.24 +go 1.24.0 -toolchain go1.24.2 +toolchain go1.24.10 require github.com/ethereum-optimism/optimism v0.0.0 require ( golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/sys v0.36.0 // indirect ) replace github.com/ethereum-optimism/optimism v0.0.0 => ./../../../.. diff --git a/cannon/testdata/go-1-24/alloc/go.sum b/cannon/testdata/go-1-24/alloc/go.sum index a52ee74a11e..71f657baaab 100644 --- a/cannon/testdata/go-1-24/alloc/go.sum +++ b/cannon/testdata/go-1-24/alloc/go.sum @@ -6,7 +6,7 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/testdata/go-1-24/claim/go.mod b/cannon/testdata/go-1-24/claim/go.mod index aec47900e8f..95b5c26f362 100644 --- a/cannon/testdata/go-1-24/claim/go.mod +++ b/cannon/testdata/go-1-24/claim/go.mod @@ -1,14 +1,14 @@ module claim -go 1.24 +go 1.24.0 -toolchain go1.24.2 +toolchain go1.24.10 require github.com/ethereum-optimism/optimism v0.0.0 require ( golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/sys v0.36.0 // indirect ) replace github.com/ethereum-optimism/optimism v0.0.0 => ./../../../.. diff --git a/cannon/testdata/go-1-24/claim/go.sum b/cannon/testdata/go-1-24/claim/go.sum index a52ee74a11e..71f657baaab 100644 --- a/cannon/testdata/go-1-24/claim/go.sum +++ b/cannon/testdata/go-1-24/claim/go.sum @@ -6,7 +6,7 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/testdata/go-1-25/alloc/go.mod b/cannon/testdata/go-1-25/alloc/go.mod index 627f0d9073f..60b83ee6d9e 100644 --- a/cannon/testdata/go-1-25/alloc/go.mod +++ b/cannon/testdata/go-1-25/alloc/go.mod @@ -8,7 +8,7 @@ require github.com/ethereum-optimism/optimism v0.0.0 require ( golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/sys v0.36.0 // indirect ) replace github.com/ethereum-optimism/optimism v0.0.0 => ./../../../.. diff --git a/cannon/testdata/go-1-25/alloc/go.sum b/cannon/testdata/go-1-25/alloc/go.sum index a52ee74a11e..71f657baaab 100644 --- a/cannon/testdata/go-1-25/alloc/go.sum +++ b/cannon/testdata/go-1-25/alloc/go.sum @@ -6,7 +6,7 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/testdata/go-1-25/claim/go.mod b/cannon/testdata/go-1-25/claim/go.mod index 9ffd19eb0a7..50dee1f7c93 100644 --- a/cannon/testdata/go-1-25/claim/go.mod +++ b/cannon/testdata/go-1-25/claim/go.mod @@ -8,7 +8,7 @@ require github.com/ethereum-optimism/optimism v0.0.0 require ( golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/sys v0.36.0 // indirect ) replace github.com/ethereum-optimism/optimism v0.0.0 => ./../../../.. diff --git a/cannon/testdata/go-1-25/claim/go.sum b/cannon/testdata/go-1-25/claim/go.sum index a52ee74a11e..71f657baaab 100644 --- a/cannon/testdata/go-1-25/claim/go.sum +++ b/cannon/testdata/go-1-25/claim/go.sum @@ -6,7 +6,7 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/cannon/testdata/utils/go.mod b/cannon/testdata/utils/go.mod index fae692334f7..b4742f67277 100644 --- a/cannon/testdata/utils/go.mod +++ b/cannon/testdata/utils/go.mod @@ -1,5 +1,5 @@ module utils -go 1.23 +go 1.24 -toolchain go1.23.8 +toolchain go1.24.10 diff --git a/devnet-sdk/testing/systest/multi_client.go b/devnet-sdk/testing/systest/multi_client.go deleted file mode 100644 index c10f3ff3d87..00000000000 --- a/devnet-sdk/testing/systest/multi_client.go +++ /dev/null @@ -1,204 +0,0 @@ -package systest - -import ( - "context" - "errors" - "fmt" - "regexp" - "sync" - - "math/big" - "time" - - "github.com/ethereum-optimism/optimism/devnet-sdk/system" - "github.com/ethereum-optimism/optimism/op-service/retry" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/log" -) - -type HeaderProvider interface { - BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error) - HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error) - HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) - Close() -} - -var _ HeaderProvider = (*ethclient.Client)(nil) - -func getEthClients(chain system.Chain) ([]HeaderProvider, error) { - hps := make([]HeaderProvider, 0, len(chain.Nodes())) - for _, n := range chain.Nodes() { - gethCl, err := n.GethClient() - - if err != nil { - return nil, fmt.Errorf("failed to get geth client: %w", err) - } - if !regexp.MustCompile(`snapsync-\d+$`).MatchString(n.Name()) { - hps = append(hps, gethCl) - } - } - return hps, nil -} - -// CheckForChainFork checks that the L2 chain has not forked now, and returns a -// function that check again (to be called at the end of the test). An error is -// returned from this function (and the returned function) if a chain fork has -// been detected. -func CheckForChainFork(ctx context.Context, chain system.L2Chain, logger log.Logger) (func(bool) error, error) { - clients, err := getEthClients(chain) - if err != nil { - return nil, fmt.Errorf("failed to get eth clients: %w", err) - } - - return checkForChainFork(ctx, clients, logger) -} - -func checkForChainFork(ctx context.Context, clients []HeaderProvider, logger log.Logger) (func(bool) error, error) { - l2MultiClient := NewMultiClient(clients) - - // Setup chain fork detection - logger.Info("Running fork detection precheck") - l2StartHeader, err := l2MultiClient.HeaderByNumber(ctx, nil) - if err != nil { - return nil, fmt.Errorf("fork detection precheck failed: %w", err) - } - - return func(failed bool) error { - logger.Info("Running fork detection postcheck") - l2EndHeader, err := l2MultiClient.HeaderByNumber(ctx, nil) - if err != nil { - return fmt.Errorf("fork detection postcheck failed: %w", err) - } - if l2EndHeader.Number.Cmp(l2StartHeader.Number) <= 0 { - if !failed { - return fmt.Errorf("L2 chain has not progressed: start=%s, end=%s", l2StartHeader.Number, l2EndHeader.Number) - } else { - logger.Debug("L2 chain has not progressed, but the test failed so we will not error again") - } - } - return nil - }, nil -} - -// MultiClient is a simple client that checks hash consistency between underlying clients -type MultiClient struct { - clients []HeaderProvider - retryStrategy retry.Strategy - maxAttempts int -} - -// NewMultiClient creates a new MultiClient with the specified underlying clients -func NewMultiClient(clients []HeaderProvider) *MultiClient { - return &MultiClient{ - clients: clients, - maxAttempts: 3, - retryStrategy: retry.Fixed(500 * time.Millisecond), - } -} - -// Close closes all underlying client connections -func (mc *MultiClient) Close() { - for _, client := range mc.clients { - client.Close() - } -} - -// BlockByNumber returns a block from the first client while verifying hash consistency -func (mc *MultiClient) BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error) { - if len(mc.clients) == 0 { - return nil, errors.New("no clients configured") - } - - // Single client optimization - block, err := mc.clients[0].BlockByNumber(ctx, number) - if err != nil || len(mc.clients) == 1 { - return block, err - } - - // Fetch with consistency check - err = mc.verifyFollowersWithRetry(ctx, number, block.Hash()) - return block, err -} - -// HeaderByNumber returns a header from the first client while verifying hash consistency -func (mc *MultiClient) HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error) { - if len(mc.clients) == 0 { - return nil, errors.New("no clients configured") - } - - header, err := mc.clients[0].HeaderByNumber(ctx, number) - if err != nil { - return nil, err - } - if header == nil { - return nil, fmt.Errorf("no header found for block number %v", number) - } - if len(mc.clients) == 1 { - return header, nil - } - - // Verify consistency with retry for followers - err = mc.verifyFollowersWithRetry(ctx, header.Number, header.Hash()) - - return header, err -} - -// verifyFollowersWithRetry checks hash consistency with retries in case of temporary sync issues -func (mc *MultiClient) verifyFollowersWithRetry( - ctx context.Context, - blockNum *big.Int, - primaryHash common.Hash, -) error { - var wg sync.WaitGroup - errs := make(chan error) - - // Track which clients still need verification - for clientIndex, c := range mc.clients[1:] { - actualIndex := clientIndex + 1 - client := c // copy so the goroutine closure has a stable reference - wg.Add(1) - go func() { - defer wg.Done() - hash, err := retry.Do(ctx, mc.maxAttempts, mc.retryStrategy, func() (common.Hash, error) { - header, err := client.HeaderByNumber(ctx, blockNum) - if err != nil { - return common.Hash{}, err - } - return header.Hash(), nil - }) - if err != nil { - errs <- err - return - } - // Detect chain split - if hash != primaryHash { - errs <- formatChainSplitError(blockNum, primaryHash, actualIndex, hash) - return - } - }() - } - - go func() { - wg.Wait() - close(errs) - }() - - allErrs := []error{} - for err := range errs { - allErrs = append(allErrs, err) - } - - if len(allErrs) > 0 { - return errors.Join(allErrs...) - } - - return nil -} - -// formatChainSplitError creates a descriptive error when a chain split is detected -func formatChainSplitError(blockNum *big.Int, primaryHash common.Hash, clientIdx int, hash common.Hash) error { - return fmt.Errorf("chain split detected at block #%s: primary=%s, client%d=%s", - blockNum, primaryHash.Hex()[:10], clientIdx, hash.Hex()[:10]) -} diff --git a/devnet-sdk/testing/systest/multi_client_test.go b/devnet-sdk/testing/systest/multi_client_test.go deleted file mode 100644 index 474820377b3..00000000000 --- a/devnet-sdk/testing/systest/multi_client_test.go +++ /dev/null @@ -1,132 +0,0 @@ -package systest - -import ( - "context" - "math/big" - "testing" - - "github.com/ethereum-optimism/optimism/op-service/testlog" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - "github.com/stretchr/testify/require" -) - -type mockGethClient struct { - latestBlockNum int - headersByNum map[int]types.Header -} - -func (m mockGethClient) HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error) { - var idx int - if number == nil { - idx = m.latestBlockNum - } else { - idx = int(number.Int64()) - } - h := m.headersByNum[idx] - return &h, nil -} -func (mockGethClient) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { - panic("unimplemented") -} -func (mockGethClient) BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error) { - panic("unimplemented") -} -func (mockGethClient) Close() {} - -var _ HeaderProvider = mockGethClient{} - -func TestDetectsFork(t *testing.T) { - leader := mockGethClient{latestBlockNum: 0, headersByNum: map[int]types.Header{ - 0: { - Number: big.NewInt(0), - TxHash: common.HexToHash("0x0"), - }, - 1: { - Number: big.NewInt(1), - TxHash: common.HexToHash("0x1"), - }, - }, - } - - followerA := mockGethClient{latestBlockNum: 0, headersByNum: map[int]types.Header{ - 0: { - Number: big.NewInt(0), - TxHash: common.HexToHash("0x0"), // in sync with mockA at this block - }, - 1: { - Number: big.NewInt(1), - TxHash: common.HexToHash("0xb"), // forks off from leader at this block - }, - }, - } - - followerB := mockGethClient{latestBlockNum: 0, headersByNum: map[int]types.Header{ - 0: { - Number: big.NewInt(0), - TxHash: common.HexToHash("0x0"), // forks off from leader at this block - }, - 1: { - Number: big.NewInt(1), - TxHash: common.HexToHash("0xb"), // forks off from leader at this block - }, - }, - } - - // First scenario is that the leader and follower are in sync initially, but then split: - secondCheck, firstErr := checkForChainFork(context.Background(), []HeaderProvider{&leader, &followerA}, testlog.Logger(t, log.LevelDebug)) - require.NoError(t, firstErr) - leader.latestBlockNum = 1 // advance the chain head - followerA.latestBlockNum = 1 // advance the chain head - require.Error(t, secondCheck(false), "expected chain split error") - - // Second scenario is that the leader and follower are forked immediately: - _, firstErr = checkForChainFork(context.Background(), []HeaderProvider{&leader, &followerB}, testlog.Logger(t, log.LevelDebug)) - require.Error(t, firstErr, "expected chain split error") -} - -func TestDetectsHealthy(t *testing.T) { - leader := mockGethClient{latestBlockNum: 0, headersByNum: map[int]types.Header{ - 0: { - Number: big.NewInt(0), - TxHash: common.HexToHash("0x0"), - }, - 1: { - Number: big.NewInt(1), - TxHash: common.HexToHash("0x1"), - }, - }, - } - - followerA := mockGethClient{latestBlockNum: 0, headersByNum: map[int]types.Header{ - 0: { - Number: big.NewInt(0), - TxHash: common.HexToHash("0x0"), // in sync with mockA at this block - }, - 1: { - Number: big.NewInt(1), - TxHash: common.HexToHash("0x1"), // forks off from leader at this block - }, - }, - } - - followerB := mockGethClient{latestBlockNum: 0, headersByNum: map[int]types.Header{ - 0: { - Number: big.NewInt(0), - TxHash: common.HexToHash("0x0"), // forks off from leader at this block - }, - 1: { - Number: big.NewInt(1), - TxHash: common.HexToHash("0x1"), // forks off from leader at this block - }, - }, - } - - secondCheck, firstErr := checkForChainFork(context.Background(), []HeaderProvider{&leader, &followerA, &followerB}, testlog.Logger(t, log.LevelDebug)) - require.NoError(t, firstErr) - leader.latestBlockNum = 1 // advance the chain head - followerA.latestBlockNum = 1 // advance the chain head - followerB.latestBlockNum = 1 // advance the chain head - require.NoError(t, secondCheck(false), "did not expect chain split error") -} diff --git a/devnet-sdk/testing/systest/provider.go b/devnet-sdk/testing/systest/provider.go deleted file mode 100644 index 87da920d0d0..00000000000 --- a/devnet-sdk/testing/systest/provider.go +++ /dev/null @@ -1,15 +0,0 @@ -package systest - -import "github.com/ethereum-optimism/optimism/devnet-sdk/system" - -// systemProvider defines the interface for package-level functionality -type systemProvider interface { - NewSystemFromURL(string) (system.System, error) -} - -// defaultProvider is the default implementation of the package -type defaultProvider struct{} - -func (p *defaultProvider) NewSystemFromURL(url string) (system.System, error) { - return system.NewSystemFromURL(url) -} diff --git a/devnet-sdk/testing/systest/systest.go b/devnet-sdk/testing/systest/systest.go deleted file mode 100644 index 1291fe8683b..00000000000 --- a/devnet-sdk/testing/systest/systest.go +++ /dev/null @@ -1,191 +0,0 @@ -package systest - -import ( - "context" - "fmt" - "os" - "strconv" - - "github.com/ethereum-optimism/optimism/devnet-sdk/shell/env" - "github.com/ethereum-optimism/optimism/devnet-sdk/system" -) - -// envGetter abstracts environment variable access -type envGetter interface { - Getenv(key string) string -} - -// osEnvGetter implements envGetter using os package -type osEnvGetter struct{} - -func (g osEnvGetter) Getenv(key string) string { - return os.Getenv(key) -} - -// defaultHelper is the default implementation used by the package-level functions -var defaultHelper systemTestHelper - -func init() { - defaultHelper = newBasicSystemTestHelper(osEnvGetter{}) -} - -// PreconditionError represents an error that occurs when a test precondition is not met -type PreconditionError struct { - err error -} - -func (e *PreconditionError) Error() string { - return fmt.Sprintf("precondition not met: %v", e.err) -} - -func (e *PreconditionError) Unwrap() error { - return e.err -} - -// SystemAcquirer attempts to create a System instance. -// Returns (nil, nil) to indicate this acquirer should be skipped (e.g., when prerequisites are not met). -// Any other result indicates this acquirer was selected and its result (success or failure) should be used. -type SystemAcquirer func(t BasicT) (system.System, error) - -// tryAcquirers attempts to acquire a system using the provided acquirers in order. -// Each acquirer is tried in sequence until one returns a non-(nil,nil) result. -// If an acquirer returns (nil, nil), it is skipped and the next one is tried. -// Any other result from an acquirer (success or failure) is returned immediately. -func tryAcquirers(t BasicT, acquirers []SystemAcquirer) (system.System, error) { - for _, acquirer := range acquirers { - sys, err := acquirer(t) - if sys == nil && err == nil { - // Acquirer signaled it should be skipped - continue - } - // Any other result means this acquirer was selected, return its result - return sys, err - } - return nil, fmt.Errorf("no acquirer was able to create a system") -} - -type PreconditionValidator func(t T, sys system.System) (context.Context, error) -type SystemTestFunc func(t T, sys system.System) -type InteropSystemTestFunc func(t T, sys system.InteropSystem) - -// systemTestHelper defines the interface for system test functionality -type systemTestHelper interface { - SystemTest(t BasicT, f SystemTestFunc, validators ...PreconditionValidator) - InteropSystemTest(t BasicT, f InteropSystemTestFunc, validators ...PreconditionValidator) - WithAcquirers(acquirers []SystemAcquirer) *basicSystemTestHelper - WithProvider(provider systemProvider) *basicSystemTestHelper -} - -// basicSystemTestHelper provides a basic implementation of systemTestHelper using environment variables -type basicSystemTestHelper struct { - expectPreconditionsMet bool - acquirers []SystemAcquirer - provider systemProvider - envGetter envGetter -} - -// acquireFromEnvURL attempts to create a system from the URL specified in the environment variable. -func (h *basicSystemTestHelper) acquireFromEnvURL(t BasicT) (system.System, error) { - url := h.envGetter.Getenv(env.EnvURLVar) - if url == "" { - return nil, nil // Skip this acquirer - } - sys, err := h.provider.NewSystemFromURL(url) - if err != nil { - return nil, fmt.Errorf("failed to create system from URL %q: %w", url, err) - } - return sys, nil -} - -func (h *basicSystemTestHelper) handlePreconditionError(t BasicT, err error) { - t.Helper() - precondErr := &PreconditionError{err: err} - if h.expectPreconditionsMet { - t.Fatalf("%v", precondErr) - } else { - t.Skipf("%v", precondErr) - } -} - -func (h *basicSystemTestHelper) SystemTest(t BasicT, f SystemTestFunc, validators ...PreconditionValidator) { - wt := NewT(t) - wt.Helper() - - ctx, cancel := context.WithCancel(wt.Context()) - defer cancel() - - wt = wt.WithContext(ctx) - - sys, err := tryAcquirers(t, h.acquirers) - if err != nil { - h.handlePreconditionError(t, err) - return - } - - for _, validator := range validators { - ctx, err := validator(wt, sys) - if err != nil { - h.handlePreconditionError(t, err) - } - wt = wt.WithContext(ctx) - } - - f(wt, sys) -} - -func (h *basicSystemTestHelper) InteropSystemTest(t BasicT, f InteropSystemTestFunc, validators ...PreconditionValidator) { - t.Helper() - h.SystemTest(t, func(t T, sys system.System) { - if sys, ok := sys.(system.InteropSystem); ok { - f(t, sys) - } else { - h.handlePreconditionError(t, fmt.Errorf("interop test requested, but system is not an interop system")) - } - }, validators...) -} - -// newBasicSystemTestHelper creates a new basicSystemTestHelper using environment variables -func newBasicSystemTestHelper(envGetter envGetter) *basicSystemTestHelper { - val := envGetter.Getenv(env.ExpectPreconditionsMet) - expectPreconditionsMet, err := strconv.ParseBool(val) - if err != nil { - expectPreconditionsMet = false // empty string or invalid value returns false - } - - helper := &basicSystemTestHelper{ - expectPreconditionsMet: expectPreconditionsMet, - provider: &defaultProvider{}, - envGetter: envGetter, - } - - // Set up acquirers after helper is constructed so we can use the method - helper.acquirers = []SystemAcquirer{ - helper.acquireFromEnvURL, - } - - return helper -} - -// WithAcquirers returns a new helper with the specified acquirers -func (h *basicSystemTestHelper) WithAcquirers(acquirers []SystemAcquirer) *basicSystemTestHelper { - newHelper := *h - newHelper.acquirers = acquirers - return &newHelper -} - -// WithProvider returns a new helper with the specified provider -func (h *basicSystemTestHelper) WithProvider(provider systemProvider) *basicSystemTestHelper { - newHelper := *h - newHelper.provider = provider - return &newHelper -} - -// SystemTest delegates to the default helper -func SystemTest(t BasicT, f SystemTestFunc, validators ...PreconditionValidator) { - defaultHelper.SystemTest(t, f, validators...) -} - -// InteropSystemTest delegates to the default helper -func InteropSystemTest(t BasicT, f InteropSystemTestFunc, validators ...PreconditionValidator) { - defaultHelper.InteropSystemTest(t, f, validators...) -} diff --git a/devnet-sdk/testing/systest/systest_test.go b/devnet-sdk/testing/systest/systest_test.go deleted file mode 100644 index 2f657d3306a..00000000000 --- a/devnet-sdk/testing/systest/systest_test.go +++ /dev/null @@ -1,314 +0,0 @@ -package systest - -import ( - "context" - "fmt" - "testing" - - "github.com/ethereum-optimism/optimism/devnet-sdk/shell/env" - "github.com/ethereum-optimism/optimism/devnet-sdk/system" - "github.com/stretchr/testify/require" -) - -// mockSystemTestHelper is a test implementation of systemTestHelper -type mockSystemTestHelper struct { - expectPreconditionsMet bool - systemTestCalls int - interopTestCalls int - preconditionErrors []error - systemAcquirer func() (system.System, error) -} - -func (h *mockSystemTestHelper) handlePreconditionError(t BasicT, err error) { - h.preconditionErrors = append(h.preconditionErrors, err) - if h.expectPreconditionsMet { - t.Fatalf("%v", &PreconditionError{err: err}) - } else { - t.Skipf("%v", &PreconditionError{err: err}) - } -} - -func (h *mockSystemTestHelper) SystemTest(t BasicT, f SystemTestFunc, validators ...PreconditionValidator) { - h.systemTestCalls++ - wt := NewT(t) - - ctx, cancel := context.WithCancel(wt.Context()) - defer cancel() - wt = wt.WithContext(ctx) - - sys, err := h.systemAcquirer() - if err != nil { - h.handlePreconditionError(t, err) - return - } - - for _, validator := range validators { - ctx, err := validator(wt, sys) - if err != nil { - h.handlePreconditionError(t, err) - return - } - wt = wt.WithContext(ctx) - } - - f(wt, sys) -} - -func (h *mockSystemTestHelper) InteropSystemTest(t BasicT, f InteropSystemTestFunc, validators ...PreconditionValidator) { - h.interopTestCalls++ - h.SystemTest(t, func(t T, sys system.System) { - if sys, ok := sys.(system.InteropSystem); ok { - f(t, sys) - } else { - h.handlePreconditionError(t, fmt.Errorf("interop test requested, but system is not an interop system")) - } - }, validators...) -} - -// mockEnvGetter implements envGetter for testing -type mockEnvGetter struct { - values map[string]string -} - -func (g mockEnvGetter) Getenv(key string) string { - return g.values[key] -} - -// TestSystemTestHelper tests the basic implementation of systemTestHelper -func TestSystemTestHelper(t *testing.T) { - t.Run("newBasicSystemTestHelper initialization", func(t *testing.T) { - testCases := []struct { - name string - envValue string - want bool - }{ - {"empty env", "", false}, - {"invalid value", "invalid", false}, - {"zero", "0", false}, - {"false", "false", false}, - {"FALSE", "FALSE", false}, - {"False", "False", false}, - {"f", "f", false}, - {"F", "F", false}, - {"one", "1", true}, - {"true", "true", true}, - {"TRUE", "TRUE", true}, - {"True", "True", true}, - {"t", "t", true}, - {"T", "T", true}, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - env := mockEnvGetter{ - values: map[string]string{ - env.ExpectPreconditionsMet: tc.envValue, - }, - } - helper := newBasicSystemTestHelper(env) - require.Equal(t, tc.want, helper.expectPreconditionsMet) - }) - } - }) -} - -// TestSystemTest tests the main SystemTest function -func TestSystemTest(t *testing.T) { - t.Run("system acquisition failure", func(t *testing.T) { - testCases := []struct { - name string - expectMet bool - expectSkip bool - expectFatal bool - }{ - { - name: "preconditions not expected skips test", - expectMet: false, - expectSkip: true, - expectFatal: false, - }, - { - name: "preconditions expected fails test", - expectMet: true, - expectSkip: false, - expectFatal: true, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - helper := &mockSystemTestHelper{ - expectPreconditionsMet: tc.expectMet, - systemAcquirer: func() (system.System, error) { - return nil, fmt.Errorf("failed to acquire system") - }, - } - - recorder := &mockTBRecorder{mockTB: mockTB{name: "test"}} - helper.SystemTest(recorder, func(t T, sys system.System) { - t.Fatal("test function should not be called") - }) - - require.Equal(t, tc.expectSkip, recorder.skipped, "unexpected skip state") - require.Equal(t, tc.expectFatal, recorder.failed, "unexpected fatal state") - require.Len(t, helper.preconditionErrors, 1, "expected one precondition error") - require.Contains(t, helper.preconditionErrors[0].Error(), "failed to acquire system") - }) - } - }) - - t.Run("successful system acquisition", func(t *testing.T) { - helper := &mockSystemTestHelper{ - systemAcquirer: func() (system.System, error) { - return newMockSystem(), nil - }, - } - - called := false - helper.SystemTest(t, func(t T, sys system.System) { - called = true - require.NotNil(t, sys) - }) - require.True(t, called) - }) - - t.Run("with validator", func(t *testing.T) { - helper := &mockSystemTestHelper{ - systemAcquirer: func() (system.System, error) { - return newMockSystem(), nil - }, - } - - validatorCalled := false - testCalled := false - - validator := func(t T, sys system.System) (context.Context, error) { - validatorCalled = true - return t.Context(), nil - } - - helper.SystemTest(t, func(t T, sys system.System) { - testCalled = true - }, validator) - - require.True(t, validatorCalled) - require.True(t, testCalled) - }) - - t.Run("multiple validators", func(t *testing.T) { - helper := &mockSystemTestHelper{ - systemAcquirer: func() (system.System, error) { - return newMockSystem(), nil - }, - } - - validatorCount := 0 - validator := func(t T, sys system.System) (context.Context, error) { - validatorCount++ - return t.Context(), nil - } - - helper.SystemTest(t, func(t T, sys system.System) {}, validator, validator, validator) - require.Equal(t, 3, validatorCount) - }) -} - -// TestInteropSystemTest tests the InteropSystemTest function -func TestInteropSystemTest(t *testing.T) { - t.Run("skips non-interop system", func(t *testing.T) { - helper := &mockSystemTestHelper{ - systemAcquirer: func() (system.System, error) { - return newMockSystem(), nil - }, - } - - recorder := &mockTBRecorder{mockTB: mockTB{name: "test"}} - called := false - helper.InteropSystemTest(recorder, func(t T, sys system.InteropSystem) { - called = true - }) - require.False(t, called) - require.Len(t, helper.preconditionErrors, 1) - require.Contains(t, helper.preconditionErrors[0].Error(), "interop test requested") - }) - - t.Run("runs with interop system", func(t *testing.T) { - helper := &mockSystemTestHelper{ - systemAcquirer: func() (system.System, error) { - return newMockInteropSystem(), nil - }, - } - - called := false - helper.InteropSystemTest(t, func(t T, sys system.InteropSystem) { - called = true - require.NotNil(t, sys.InteropSet()) - }) - require.True(t, called) - require.Empty(t, helper.preconditionErrors) - }) -} - -// TestPreconditionError tests the PreconditionError type and its behavior -func TestPreconditionError(t *testing.T) { - t.Run("error wrapping", func(t *testing.T) { - underlying := fmt.Errorf("test error") - precondErr := &PreconditionError{err: underlying} - - require.Equal(t, "precondition not met: test error", precondErr.Error()) - require.ErrorIs(t, precondErr, underlying) - }) -} - -// TestPreconditionHandling tests the precondition error handling behavior -func TestPreconditionHandling(t *testing.T) { - testCases := []struct { - name string - expectMet bool - expectSkip bool - expectFatal bool - }{ - { - name: "preconditions not expected skips test", - expectMet: false, - expectSkip: true, - expectFatal: false, - }, - { - name: "preconditions expected fails test", - expectMet: true, - expectSkip: false, - expectFatal: true, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - helper := &mockSystemTestHelper{ - expectPreconditionsMet: tc.expectMet, - systemAcquirer: func() (system.System, error) { - return newMockSystem(), nil - }, - } - - recorder := &mockTBRecorder{mockTB: mockTB{name: "test"}} - testErr := fmt.Errorf("test precondition error") - - helper.SystemTest(recorder, func(t T, sys system.System) {}, func(t T, sys system.System) (context.Context, error) { - return t.Context(), testErr - }) - - require.Equal(t, tc.expectSkip, recorder.skipped, "unexpected skip state") - require.Equal(t, tc.expectFatal, recorder.failed, "unexpected fatal state") - require.Len(t, helper.preconditionErrors, 1, "expected one precondition error") - require.Equal(t, testErr, helper.preconditionErrors[0]) - - if tc.expectSkip { - require.Contains(t, recorder.skipMsg, "precondition not met") - } - if tc.expectFatal { - require.Contains(t, recorder.fatalMsg, "precondition not met") - } - }) - } -} diff --git a/devnet-sdk/testing/systest/tb.go b/devnet-sdk/testing/systest/tb.go deleted file mode 100644 index 3580df5b31b..00000000000 --- a/devnet-sdk/testing/systest/tb.go +++ /dev/null @@ -1,62 +0,0 @@ -package systest - -import ( - "context" - "testing" - "time" -) - -// tbWrapper converts from testingTB to T -type tbWrapper struct { - testingTB - ctx context.Context -} - -var _ T = (*tbWrapper)(nil) - -func (t *tbWrapper) Context() context.Context { - t.Helper() - return t.ctx -} - -func (t *tbWrapper) WithContext(ctx context.Context) T { - t.Helper() - return &tbWrapper{ - testingTB: t.testingTB, - ctx: ctx, - } -} - -func (t *tbWrapper) Deadline() (deadline time.Time, ok bool) { - t.Helper() - if tt, ok := t.testingTB.(*testing.T); ok { - return tt.Deadline() - } - // TODO: get proper deadline - return time.Time{}, false -} - -func (t *tbWrapper) Parallel() { - t.Helper() - if tt, ok := t.testingTB.(*testing.T); ok { - tt.Parallel() - } - // TODO: implement ourselves. For now, just run sequentially -} - -func (t *tbWrapper) Run(name string, fn func(t T)) { - t.Helper() - if tt, ok := t.testingTB.(*testing.T); ok { - tt.Run(name, func(t *testing.T) { - fn(NewT(t)) - }) - } else { - // TODO: implement proper sub-tests reporting - done := make(chan struct{}) - go func() { - defer close(done) - fn(NewT(t)) - }() - <-done - } -} diff --git a/devnet-sdk/testing/systest/testing.go b/devnet-sdk/testing/systest/testing.go deleted file mode 100644 index 1677165d66c..00000000000 --- a/devnet-sdk/testing/systest/testing.go +++ /dev/null @@ -1,57 +0,0 @@ -package systest - -import ( - "context" - "time" -) - -type BasicT = testingTB - -type testingTB interface { - Cleanup(func()) - Error(args ...any) - Errorf(format string, args ...any) - Fail() - Failed() bool - FailNow() - Fatal(args ...any) - Fatalf(format string, args ...any) - Helper() - Log(args ...any) - Logf(format string, args ...any) - Name() string - Setenv(key, value string) - Skip(args ...any) - SkipNow() - Skipf(format string, args ...any) - Skipped() bool - TempDir() string -} - -type tContext interface { - Context() context.Context -} - -type T interface { - testingTB - Context() context.Context - WithContext(ctx context.Context) T - Deadline() (deadline time.Time, ok bool) - Parallel() - Run(string, func(t T)) -} - -func NewT(t testingTB) T { - t.Helper() - if tt, ok := t.(T); ok { - return tt - } - ctx := context.TODO() - if tt, ok := t.(tContext); ok { - ctx = tt.Context() - } - return &tbWrapper{ - testingTB: t, - ctx: ctx, - } -} diff --git a/devnet-sdk/testing/systest/testing_test.go b/devnet-sdk/testing/systest/testing_test.go deleted file mode 100644 index 797fbf2220f..00000000000 --- a/devnet-sdk/testing/systest/testing_test.go +++ /dev/null @@ -1,526 +0,0 @@ -package systest - -import ( - "context" - "fmt" - "math/big" - "os" - "testing" - - "github.com/ethereum-optimism/optimism/devnet-sdk/shell/env" - "github.com/ethereum-optimism/optimism/devnet-sdk/system" - "github.com/ethereum-optimism/optimism/devnet-sdk/types" - "github.com/ethereum-optimism/optimism/op-service/eth" - supervisorTypes "github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" -) - -var ( - _ system.Chain = (*mockChain[system.Node])(nil) - _ system.L2Chain = (*mockL2Chain[system.Node])(nil) -) - -// mockTB implements a minimal testing.TB for testing -type mockTB struct { - testing.TB - name string - failed bool - lastError string -} - -func (m *mockTB) Helper() {} -func (m *mockTB) Name() string { return m.name } -func (m *mockTB) Cleanup(func()) {} -func (m *mockTB) Error(args ...any) {} -func (m *mockTB) Errorf(string, ...any) {} -func (m *mockTB) Fail() {} -func (m *mockTB) FailNow() {} -func (m *mockTB) Failed() bool { return false } -func (m *mockTB) Fatal(args ...any) { - m.failed = true - m.lastError = fmt.Sprint(args...) -} -func (m *mockTB) Fatalf(format string, args ...any) { - m.failed = true - m.lastError = fmt.Sprintf(format, args...) -} -func (m *mockTB) Log(args ...any) {} -func (m *mockTB) Logf(string, ...any) {} -func (m *mockTB) Skip(args ...any) {} -func (m *mockTB) SkipNow() {} -func (m *mockTB) Skipf(string, ...any) {} -func (m *mockTB) Skipped() bool { return false } -func (m *mockTB) TempDir() string { return "" } -func (m *mockTB) Setenv(key, value string) {} - -// mockTBRecorder extends mockTB to record test outcomes -type mockTBRecorder struct { - mockTB - skipped bool - failed bool - skipMsg string - fatalMsg string -} - -func (m *mockTBRecorder) Skip(args ...any) { m.skipped = true } -func (m *mockTBRecorder) Skipf(f string, args ...any) { - m.skipped = true - m.skipMsg = fmt.Sprintf(f, args...) -} -func (m *mockTBRecorder) Fatal(args ...any) { m.failed = true } -func (m *mockTBRecorder) Fatalf(f string, args ...any) { - m.failed = true - m.fatalMsg = fmt.Sprintf(f, args...) -} -func (m *mockTBRecorder) Failed() bool { return m.failed } -func (m *mockTBRecorder) Skipped() bool { return m.skipped } - -// mockChain implements a minimal system.Chain for testing -type mockChain[T system.Node] struct { - nodes []T -} - -func (m *mockChain[T]) ID() types.ChainID { return types.ChainID(big.NewInt(1)) } -func (m *mockChain[T]) Wallets() system.WalletMap { - return nil -} -func (m *mockChain[T]) Config() (*params.ChainConfig, error) { - return nil, fmt.Errorf("not implemented on lowLevelMockChain") -} -func (m *mockChain[T]) Addresses() system.AddressMap { - return system.AddressMap{} -} -func (m *mockChain[T]) Nodes() []T { - return m.nodes -} - -// mockL2Chain implements a minimal system.L2Chain for testing -type mockL2Chain[T system.Node] struct { - mockChain[T] -} - -func (m *mockL2Chain[T]) L1Addresses() system.AddressMap { - return system.AddressMap{} -} -func (m *mockL2Chain[T]) L1Wallets() system.WalletMap { - return system.WalletMap{} -} - -// mockSystem implements a minimal system.System for testing -type mockSystem struct{} - -func (m *mockSystem) Identifier() string { return "mock" } -func (m *mockSystem) L1() system.Chain { return &mockChain[system.Node]{} } -func (m *mockSystem) L2s() []system.L2Chain { - return []system.L2Chain{&mockL2Chain[system.Node]{}} -} -func (m *mockSystem) Close() error { return nil } - -// mockInteropSet implements a minimal system.InteropSet for testing -type mockInteropSet struct{} - -func (m *mockInteropSet) L2s() []system.L2Chain { - return []system.L2Chain{&mockL2Chain[system.Node]{}} -} - -// mockSupervisor implements the system.Supervisor interface for testing -type mockSupervisor struct{} - -func (m *mockSupervisor) LocalUnsafe(ctx context.Context, chainID eth.ChainID) (eth.BlockID, error) { - return eth.BlockID{}, nil -} - -func (m *mockSupervisor) CrossSafe(ctx context.Context, chainID eth.ChainID) (supervisorTypes.DerivedIDPair, error) { - return supervisorTypes.DerivedIDPair{}, nil -} - -func (m *mockSupervisor) Finalized(ctx context.Context, chainID eth.ChainID) (eth.BlockID, error) { - return eth.BlockID{}, nil -} - -func (m *mockSupervisor) FinalizedL1(ctx context.Context) (eth.BlockRef, error) { - return eth.BlockRef{}, nil -} - -func (m *mockSupervisor) CrossDerivedToSource(ctx context.Context, chainID eth.ChainID, blockID eth.BlockID) (eth.BlockRef, error) { - return eth.BlockRef{}, nil -} - -func (m *mockSupervisor) UpdateLocalUnsafe(ctx context.Context, chainID eth.ChainID, blockRef eth.BlockRef) error { - return nil -} - -func (m *mockSupervisor) UpdateLocalSafe(ctx context.Context, chainID eth.ChainID, l1BlockRef eth.L1BlockRef, blockRef eth.BlockRef) error { - return nil -} - -func (m *mockSupervisor) SuperRootAtTimestamp(ctx context.Context, timestamp hexutil.Uint64) (eth.SuperRootResponse, error) { - return eth.SuperRootResponse{}, nil -} - -func (m *mockSupervisor) AllSafeDerivedAt(ctx context.Context, blockID eth.BlockID) (map[eth.ChainID]eth.BlockID, error) { - return nil, nil -} - -func (m *mockSupervisor) SyncStatus(ctx context.Context) (eth.SupervisorSyncStatus, error) { - return eth.SupervisorSyncStatus{}, nil -} - -// mockInteropSystem implements a minimal system.InteropSystem for testing -type mockInteropSystem struct { - mockSystem -} - -func (m *mockInteropSystem) InteropSet() system.InteropSet { return &mockInteropSet{} } - -// Supervisor implements the system.InteropSystem interface -func (m *mockInteropSystem) Supervisor(ctx context.Context) (system.Supervisor, error) { - return &mockSupervisor{}, nil -} - -// newMockSystem creates a new mock system for testing -func newMockSystem() system.System { - return &mockSystem{} -} - -// newMockInteropSystem creates a new mock interop system for testing -func newMockInteropSystem() system.InteropSystem { - return &mockInteropSystem{} -} - -// testSystemCreator is a function that creates a system for testing -type testSystemCreator func() (system.System, error) - -// testPackage is a test-specific implementation of the package -type testPackage struct { - creator testSystemCreator -} - -func (p *testPackage) NewSystemFromURL(string) (system.System, error) { - return p.creator() -} - -// TestNewT tests the creation and basic functionality of the test wrapper -func TestNewT(t *testing.T) { - t.Run("wraps *testing.T correctly", func(t *testing.T) { - wrapped := NewT(t) - require.NotNil(t, wrapped) - require.NotNil(t, wrapped.Context()) - }) - - t.Run("preserves existing T implementation", func(t *testing.T) { - original := NewT(t) - wrapped := NewT(original) - require.Equal(t, original, wrapped) - }) -} - -// TestTWrapper tests the tbWrapper functionality -func TestTWrapper(t *testing.T) { - t.Run("context operations", func(t *testing.T) { - wrapped := NewT(t) - key := &struct{}{} - ctx := context.WithValue(context.Background(), key, "value") - newWrapped := wrapped.WithContext(ctx) - - require.NotEqual(t, wrapped, newWrapped) - require.Equal(t, "value", newWrapped.Context().Value(key)) - }) - - t.Run("deadline", func(t *testing.T) { - mock := &mockTB{name: "mock"} - wrapped := NewT(mock) - deadline, ok := wrapped.Deadline() - require.False(t, ok, "deadline should not be set") - require.True(t, deadline.IsZero(), "deadline should be zero time") - }) - - t.Run("parallel execution", func(t *testing.T) { - wrapped := NewT(t) - // Should not panic - wrapped.Parallel() - }) - - t.Run("sub-tests", func(t *testing.T) { - wrapped := NewT(t) - subTestCalled := false - wrapped.Run("sub-test", func(t T) { - subTestCalled = true - require.NotNil(t, t) - require.NotNil(t, t.Context()) - }) - require.True(t, subTestCalled) - }) - - t.Run("nested sub-tests", func(t *testing.T) { - wrapped := NewT(t) - level1Called := false - level2Called := false - - wrapped.Run("level-1", func(t T) { - level1Called = true - t.Run("level-2", func(t T) { - level2Called = true - }) - }) - - require.True(t, level1Called) - require.True(t, level2Called) - }) -} - -// mockAcquirer creates a SystemAcquirer that returns the given system and error -func mockAcquirer(sys system.System, err error) SystemAcquirer { - return func(t BasicT) (system.System, error) { - return sys, err - } -} - -// TestTryAcquirers tests the tryAcquirers helper function directly -func TestTryAcquirers(t *testing.T) { - t.Run("empty acquirers list", func(t *testing.T) { - sys, err := tryAcquirers(t, nil) - require.EqualError(t, err, "no acquirer was able to create a system") - require.Nil(t, sys) - }) - - t.Run("skips nil,nil results", func(t *testing.T) { - sys1 := newMockSystem() - acquirers := []SystemAcquirer{ - mockAcquirer(nil, nil), // skipped - mockAcquirer(nil, nil), // skipped - mockAcquirer(sys1, nil), // selected and succeeds - } - sys, err := tryAcquirers(t, acquirers) - require.NoError(t, err) - require.Equal(t, sys1, sys) - }) - - t.Run("returns first non-skip result (success)", func(t *testing.T) { - sys1, sys2 := newMockSystem(), newMockSystem() - acquirers := []SystemAcquirer{ - mockAcquirer(nil, nil), // skipped - mockAcquirer(sys1, nil), // selected and succeeds - mockAcquirer(sys2, nil), // not reached - } - sys, err := tryAcquirers(t, acquirers) - require.NoError(t, err) - require.Equal(t, sys1, sys) - }) - - t.Run("returns first non-skip result (failure)", func(t *testing.T) { - expectedErr := fmt.Errorf("selected acquirer failed") - sys1 := newMockSystem() - acquirers := []SystemAcquirer{ - mockAcquirer(nil, nil), // skipped - mockAcquirer(nil, expectedErr), // selected and fails - mockAcquirer(sys1, nil), // not reached - } - sys, err := tryAcquirers(t, acquirers) - require.ErrorIs(t, err, expectedErr) - require.Nil(t, sys) - }) - - t.Run("all acquirers skip", func(t *testing.T) { - acquirers := []SystemAcquirer{ - mockAcquirer(nil, nil), - mockAcquirer(nil, nil), - } - sys, err := tryAcquirers(t, acquirers) - require.EqualError(t, err, "no acquirer was able to create a system") - require.Nil(t, sys) - }) -} - -// TestSystemAcquisition tests the system acquisition functionality -func TestSystemAcquisition(t *testing.T) { - t.Run("uses first non-skip acquirer (success)", func(t *testing.T) { - sys1, sys2 := newMockSystem(), newMockSystem() - acquirers := []SystemAcquirer{ - mockAcquirer(nil, nil), // skipped - mockAcquirer(sys1, nil), // selected and succeeds - mockAcquirer(sys2, nil), // not reached - } - - helper := newBasicSystemTestHelper(&mockEnvGetter{}). - WithAcquirers(acquirers) - - var acquiredSys system.System - helper.SystemTest(t, func(t T, sys system.System) { - acquiredSys = sys - }) - require.Equal(t, sys1, acquiredSys) - }) - - t.Run("fails when selected acquirer fails", func(t *testing.T) { - testCases := []struct { - name string - expectMet bool - expectSkip bool - expectFatal bool - }{ - { - name: "preconditions not expected skips test", - expectMet: false, - expectSkip: true, - expectFatal: false, - }, - { - name: "preconditions expected fails test", - expectMet: true, - expectSkip: false, - expectFatal: true, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - expectedErr := fmt.Errorf("selected acquirer failed") - acquirers := []SystemAcquirer{ - mockAcquirer(nil, nil), // skipped - mockAcquirer(nil, expectedErr), // selected and fails - } - - // Create a new helper with the right configuration - helper := newBasicSystemTestHelper(&mockEnvGetter{}). - WithAcquirers(acquirers) - helper.expectPreconditionsMet = tc.expectMet - - recorder := &mockTBRecorder{mockTB: mockTB{name: "test"}} - helper.SystemTest(recorder, func(t T, sys system.System) { - require.Fail(t, "should not reach here") - }) - - require.Equal(t, tc.expectSkip, recorder.skipped, "unexpected skip state") - require.Equal(t, tc.expectFatal, recorder.failed, "unexpected fatal state") - if tc.expectSkip { - require.Contains(t, recorder.skipMsg, expectedErr.Error()) - } - if tc.expectFatal { - require.Contains(t, recorder.fatalMsg, expectedErr.Error()) - } - }) - } - }) - - t.Run("fails when all acquirers skip", func(t *testing.T) { - testCases := []struct { - name string - expectMet bool - expectSkip bool - expectFatal bool - }{ - { - name: "preconditions not expected skips test", - expectMet: false, - expectSkip: true, - expectFatal: false, - }, - { - name: "preconditions expected fails test", - expectMet: true, - expectSkip: false, - expectFatal: true, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - acquirers := []SystemAcquirer{ - mockAcquirer(nil, nil), - mockAcquirer(nil, nil), - } - - // Create a new helper with the right configuration - helper := newBasicSystemTestHelper(&mockEnvGetter{}). - WithAcquirers(acquirers) - helper.expectPreconditionsMet = tc.expectMet - - recorder := &mockTBRecorder{mockTB: mockTB{name: "test"}} - helper.SystemTest(recorder, func(t T, sys system.System) { - require.Fail(t, "should not reach here") - }) - - require.Equal(t, tc.expectSkip, recorder.skipped, "unexpected skip state") - require.Equal(t, tc.expectFatal, recorder.failed, "unexpected fatal state") - if tc.expectSkip { - require.Contains(t, recorder.skipMsg, "no acquirer was able to create a system") - } - if tc.expectFatal { - require.Contains(t, recorder.fatalMsg, "no acquirer was able to create a system") - } - }) - } - }) - - t.Run("acquireFromEnvURL behavior", func(t *testing.T) { - // Create a mockEnvGetter with the original env value - origEnv := &mockEnvGetter{ - values: map[string]string{ - env.EnvURLVar: os.Getenv(env.EnvURLVar), - }, - } - - t.Run("skips when env var not set", func(t *testing.T) { - helper := newBasicSystemTestHelper(&mockEnvGetter{ - values: make(map[string]string), - }) - sys, err := helper.acquireFromEnvURL(t) - require.NoError(t, err) - require.Nil(t, sys) - }) - - t.Run("fails with error for invalid URL", func(t *testing.T) { - helper := newBasicSystemTestHelper(&mockEnvGetter{ - values: map[string]string{ - env.EnvURLVar: "invalid://url", - }, - }).WithProvider(&testPackage{ - creator: func() (system.System, error) { - return nil, fmt.Errorf("invalid URL") - }, - }) - sys, err := helper.acquireFromEnvURL(t) - require.Error(t, err) - require.Nil(t, sys) - }) - - t.Run("succeeds with valid URL", func(t *testing.T) { - mockSys := newMockSystem() - helper := newBasicSystemTestHelper(&mockEnvGetter{ - values: map[string]string{ - env.EnvURLVar: "file:///valid/url", - }, - }).WithProvider(&testPackage{ - creator: func() (system.System, error) { - return mockSys, nil - }, - }) - sys, err := helper.acquireFromEnvURL(t) - require.NoError(t, err) - require.Equal(t, mockSys, sys) - }) - - // Verify original environment is preserved by running a test with the original env - t.Run("preserves original environment", func(t *testing.T) { - helper := newBasicSystemTestHelper(origEnv) - sys, err := helper.acquireFromEnvURL(t) - if origEnv.values[env.EnvURLVar] == "" { - require.NoError(t, err) - require.Nil(t, sys) - } else { - // If there was a value, we'd need a provider to handle it properly - helper = helper.WithProvider(&testPackage{ - creator: func() (system.System, error) { - return newMockSystem(), nil - }, - }) - sys, err = helper.acquireFromEnvURL(t) - require.NoError(t, err) - require.NotNil(t, sys) - } - }) - }) -} diff --git a/devnet-sdk/testing/testlib/validators/forks.go b/devnet-sdk/testing/testlib/validators/forks.go deleted file mode 100644 index 2f762ff75e2..00000000000 --- a/devnet-sdk/testing/testlib/validators/forks.go +++ /dev/null @@ -1,126 +0,0 @@ -package validators - -import ( - "context" - "fmt" - - "github.com/ethereum-optimism/optimism/devnet-sdk/system" - "github.com/ethereum-optimism/optimism/devnet-sdk/testing/systest" - "github.com/ethereum-optimism/optimism/op-core/forks" - "github.com/ethereum/go-ethereum/params" -) - -// getChainConfig is a helper function that retrieves the ForkConfig for a specific L2 chain. -func getChainConfig(t systest.T, sys system.System, chainIdx uint64) (*params.ChainConfig, *uint64, error) { - if len(sys.L2s()) <= int(chainIdx) { - return nil, nil, fmt.Errorf("chain index %d out of range, only %d L2 chains available", chainIdx, len(sys.L2s())) - } - - chain := sys.L2s()[chainIdx] - - chainConfig, err := chain.Config() - if err != nil || chainConfig == nil { - return nil, nil, fmt.Errorf("failed to get chain config for L2 chain %d: %w", chainIdx, err) - } - - if len(chain.Nodes()) == 0 { - return nil, nil, fmt.Errorf("no nodes found for L2 chain %d", chainIdx) - } - - block, err := chain.Nodes()[0].BlockByNumber(t.Context(), nil) - if err != nil { - return nil, nil, fmt.Errorf("failed to get latest block for L2 chain %d: %w", chainIdx, err) - } - - timestamp := block.Time() - - return chainConfig, ×tamp, nil -} - -// IsForkActivated checks if a specific fork is activated at the given timestamp -// based on the chain configuration. -func IsForkActivated(c *params.ChainConfig, forkName forks.Name, timestamp uint64) (bool, error) { - if c == nil { - return false, fmt.Errorf("provided chain config is nil") - } - - switch forkName { - case forks.Bedrock: - // Bedrock is activated based on block number, not timestamp - return true, nil // Assuming bedrock is always active in the context of this validator - case forks.Regolith: - return c.IsOptimismRegolith(timestamp), nil - case forks.Canyon: - return c.IsOptimismCanyon(timestamp), nil - case forks.Ecotone: - return c.IsOptimismEcotone(timestamp), nil - case forks.Fjord: - return c.IsOptimismFjord(timestamp), nil - case forks.Granite: - return c.IsOptimismGranite(timestamp), nil - case forks.Holocene: - return c.IsOptimismHolocene(timestamp), nil - case forks.Isthmus: - return c.IsOptimismIsthmus(timestamp), nil - case forks.Jovian: - return c.IsOptimismJovian(timestamp), nil - case forks.Interop: - return c.IsInterop(timestamp), nil - default: - return false, fmt.Errorf("unknown fork name: %s", forkName) - } -} - -// forkConfigValidator is a helper function that checks if a specific L2 chain meets a fork condition. -func forkConfigValidator(chainIdx uint64, forkName forks.Name, shouldBeActive bool, forkConfigMarker interface{}) systest.PreconditionValidator { - return func(t systest.T, sys system.System) (context.Context, error) { - chainConfig, timestamp, err := getChainConfig(t, sys, chainIdx) - if err != nil { - return nil, err - } - if chainConfig == nil { - return nil, fmt.Errorf("chain config is nil") - } - - isActive, err := IsForkActivated(chainConfig, forkName, *timestamp) - if err != nil { - return nil, err - } - - if isActive != shouldBeActive { - if shouldBeActive { - return nil, fmt.Errorf("L2 chain %d does not have fork %s activated, which it should be for this validator to pass", chainIdx, forkName) - } else { - return nil, fmt.Errorf("L2 chain %d has fork %s activated, but it should not be for this validator to pass", chainIdx, forkName) - } - } - - return context.WithValue(t.Context(), forkConfigMarker, chainConfig), nil - } -} - -// ChainConfigGetter is a function type that retrieves a ForkConfig from a context. -type ChainConfigGetter = func(context.Context) *params.ChainConfig - -// AcquireForkConfig returns a ForkConfigGetter and a PreconditionValidator -// that ensures a ForkConfig is available for the specified L2 chain. -// The ForkConfig can be used to check if various forks are activated. -func acquireForkConfig(chainIdx uint64, forkName forks.Name, shouldBeActive bool) (ChainConfigGetter, systest.PreconditionValidator) { - chainConfigMarker := new(byte) - validator := forkConfigValidator(chainIdx, forkName, shouldBeActive, chainConfigMarker) - return func(ctx context.Context) *params.ChainConfig { - return ctx.Value(chainConfigMarker).(*params.ChainConfig) - }, validator -} - -// RequiresFork returns a validator that ensures a specific L2 chain has a specific fork activated. -func AcquireL2WithFork(chainIdx uint64, forkName forks.Name) (ChainConfigGetter, systest.PreconditionValidator) { - return acquireForkConfig(chainIdx, forkName, true) -} - -// RequiresNotFork returns a validator that ensures a specific L2 chain does not -// have a specific fork activated. Will not work with the interop fork -// specifically since interop is not an ordered release fork. -func AcquireL2WithoutFork(chainIdx uint64, forkName forks.Name) (ChainConfigGetter, systest.PreconditionValidator) { - return acquireForkConfig(chainIdx, forkName, false) -} diff --git a/devnet-sdk/testing/testlib/validators/nodes.go b/devnet-sdk/testing/testlib/validators/nodes.go deleted file mode 100644 index 8791b1bd203..00000000000 --- a/devnet-sdk/testing/testlib/validators/nodes.go +++ /dev/null @@ -1,53 +0,0 @@ -package validators - -import ( - "context" - "fmt" - - "github.com/ethereum-optimism/optimism/devnet-sdk/system" - "github.com/ethereum-optimism/optimism/devnet-sdk/testing/systest" -) - -// L2NodeCounter is a function type that retrieves the node count from a context. -type L2NodeCounter = func(context.Context) int - -// HasSufficientL2Nodes returns a validator that ensures a specific L2 chain has at least the specified number of nodes. -func HasSufficientL2Nodes(chainIdx uint64, minNodes int) systest.PreconditionValidator { - return func(t systest.T, sys system.System) (context.Context, error) { - if len(sys.L2s()) <= int(chainIdx) { - return nil, fmt.Errorf("chain index %d out of range, only %d L2 chains available", chainIdx, len(sys.L2s())) - } - - chain := sys.L2s()[chainIdx] - nodeCount := len(chain.Nodes()) - - if nodeCount < minNodes { - return nil, fmt.Errorf("insufficient nodes for L2 chain %d: has %d, requires %d", chainIdx, nodeCount, minNodes) - } - - return t.Context(), nil - } -} - -// AcquireL2NodeCount returns a node counter function and a validator that ensures an L2 chain -// exists and provides the node count in the context. -func AcquireL2NodeCount(chainIdx uint64) (L2NodeCounter, systest.PreconditionValidator) { - nodeCountMarker := new(byte) - - validator := func(t systest.T, sys system.System) (context.Context, error) { - if len(sys.L2s()) <= int(chainIdx) { - return nil, fmt.Errorf("chain index %d out of range, only %d L2 chains available", chainIdx, len(sys.L2s())) - } - - chain := sys.L2s()[chainIdx] - nodeCount := len(chain.Nodes()) - - return context.WithValue(t.Context(), nodeCountMarker, nodeCount), nil - } - - counter := func(ctx context.Context) int { - return ctx.Value(nodeCountMarker).(int) - } - - return counter, validator -} diff --git a/devnet-sdk/testing/testlib/validators/validators_test.go b/devnet-sdk/testing/testlib/validators/validators_test.go deleted file mode 100644 index 056999121a6..00000000000 --- a/devnet-sdk/testing/testlib/validators/validators_test.go +++ /dev/null @@ -1,383 +0,0 @@ -package validators - -import ( - "context" - "fmt" - "math/big" - "testing" - - "github.com/ethereum-optimism/optimism/devnet-sdk/contracts/bindings" - "github.com/ethereum-optimism/optimism/devnet-sdk/interfaces" - "github.com/ethereum-optimism/optimism/devnet-sdk/system" - "github.com/ethereum-optimism/optimism/devnet-sdk/testing/systest" - "github.com/ethereum-optimism/optimism/devnet-sdk/types" - "github.com/ethereum-optimism/optimism/op-core/forks" - "github.com/ethereum-optimism/optimism/op-service/eth" - "github.com/ethereum-optimism/optimism/op-service/sources" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" - - ethtypes "github.com/ethereum/go-ethereum/core/types" -) - -func Uint64Ptr(x uint64) *uint64 { - return &x -} - -// TestSystemTestHelper tests the basic implementation of systemTestHelper -func TestValidators(t *testing.T) { - t.Run("multiple validators", func(t *testing.T) { - walletGetter1, validator1 := AcquireL2WalletWithFunds(0, types.NewBalance(big.NewInt(1))) - walletGetter2, validator2 := AcquireL2WalletWithFunds(0, types.NewBalance(big.NewInt(10))) - chainConfigGetter, l2ForkValidator := AcquireL2WithFork(0, forks.Isthmus) - - // We create a system that has a low-level L1 chain and at least one wallet - systestSystem := &mockSystem{ - l1: &mockChain{}, - l2s: []system.L2Chain{ - &mockL2Chain{ - mockChain: mockChain{ - wallets: system.WalletMap{ - "user1": &mockWallet{ - address: types.Address(common.HexToAddress("0x1")), - balance: types.NewBalance(big.NewInt(2)), - }, - "user2": &mockWallet{ - address: types.Address(common.HexToAddress("0x2")), - balance: types.NewBalance(big.NewInt(11)), - }, - }, - config: ¶ms.ChainConfig{ - Optimism: ¶ms.OptimismConfig{}, - IsthmusTime: Uint64Ptr(0), - }, - nodes: []system.Node{ - &mockNode{}, - }, - }, - }, - }, - } - - // Now we apply all validators, accumulating contexts - - systestT := systest.NewT(t) - - ctx1, err := validator1(systestT, systestSystem) - systestT = systestT.WithContext(ctx1) - require.NoError(t, err) - - ctx2, err := validator2(systestT, systestSystem) - systestT = systestT.WithContext(ctx2) - require.NoError(t, err) - - ctx4, err := l2ForkValidator(systestT, systestSystem) - systestT = systestT.WithContext(ctx4) - require.NoError(t, err) - - ctx := systestT.Context() - - // Now we call all the getters to make sure they work - walletGetter1(ctx) - walletGetter2(ctx) - chainConfig := chainConfigGetter(ctx) - - // And that we got a chain config - require.NotNil(t, chainConfig) - }) - - t.Run("test AcquireL2WithFork - fork active", func(t *testing.T) { - // Create a system with the Isthmus fork active - systestSystem := &mockSystem{ - l2s: []system.L2Chain{ - &mockL2Chain{ - mockChain: mockChain{ - config: ¶ms.ChainConfig{ - Optimism: ¶ms.OptimismConfig{}, - IsthmusTime: Uint64Ptr(50), - }, - nodes: []system.Node{ - &mockNode{}, - }, - }, - }, - }, - } - - // Get the validator for requiring Isthmus fork to be active - chainConfigGetter, validator := AcquireL2WithFork(0, forks.Isthmus) - systestT := systest.NewT(t) - - // Apply the validator - ctx, err := validator(systestT, systestSystem) - require.NoError(t, err, "Validator should pass when fork is active") - - // Verify the chain config getter works - chainConfig := chainConfigGetter(ctx) - require.NotNil(t, chainConfig) - isActive, err := IsForkActivated(chainConfig, forks.Isthmus, 100) - require.NoError(t, err) - require.True(t, isActive) - }) - - t.Run("test AcquireL2WithFork - fork not active", func(t *testing.T) { - // Create a system where the Isthmus fork is not yet active - systestSystem := &mockSystem{ - l2s: []system.L2Chain{ - &mockL2Chain{ - mockChain: mockChain{ - config: ¶ms.ChainConfig{ - Optimism: ¶ms.OptimismConfig{}, - IsthmusTime: Uint64Ptr(150), - }, - nodes: []system.Node{ - &mockNode{}, - }, - }, - }, - }, - } - - // Get the validator for requiring Isthmus fork to be active - _, validator := AcquireL2WithFork(0, forks.Isthmus) - systestT := systest.NewT(t) - - // Apply the validator - should fail since fork is not active - _, err := validator(systestT, systestSystem) - require.Error(t, err, "Validator should fail when fork is not active") - require.Contains(t, err.Error(), "does not have fork", "Error message should indicate fork is not active") - }) - - t.Run("test AcquireRequiresNotL2Fork - fork not active", func(t *testing.T) { - // Create a system where the Isthmus fork is not yet active - systestSystem := &mockSystem{ - l2s: []system.L2Chain{ - &mockL2Chain{ - mockChain: mockChain{ - config: ¶ms.ChainConfig{ - Optimism: ¶ms.OptimismConfig{}, - IsthmusTime: Uint64Ptr(150), // Activates after current timestamp - }, - nodes: []system.Node{ - &mockNode{}, - }, - }, - }, - }, - } - - // Get the validator for requiring Isthmus fork to not be active - chainConfigGetter, validator := AcquireL2WithoutFork(0, forks.Isthmus) - systestT := systest.NewT(t) - - // Apply the validator - ctx, err := validator(systestT, systestSystem) - require.NoError(t, err, "Validator should pass when fork is not active") - - // Verify the chain config getter works - chainConfig := chainConfigGetter(ctx) - require.NotNil(t, chainConfig) - isActive, err := IsForkActivated(chainConfig, forks.Isthmus, 100) - require.NoError(t, err) - require.False(t, isActive) - }) - - t.Run("test AcquireRequiresNotL2Fork - fork active", func(t *testing.T) { - // Create a system with the Isthmus fork active - systestSystem := &mockSystem{ - l2s: []system.L2Chain{ - &mockL2Chain{ - mockChain: mockChain{ - config: ¶ms.ChainConfig{ - Optimism: ¶ms.OptimismConfig{}, - IsthmusTime: Uint64Ptr(50), - }, - nodes: []system.Node{ - &mockNode{}, - }, - }, - }, - }, - } - - // Get the validator for requiring Isthmus fork to not be active - _, validator := AcquireL2WithoutFork(0, forks.Isthmus) - systestT := systest.NewT(t) - - // Apply the validator - should fail since fork is active - _, err := validator(systestT, systestSystem) - require.Error(t, err, "Validator should fail when fork is active") - require.Contains(t, err.Error(), "has fork", "Error message should indicate fork is active") - }) - - t.Run("chain index out of range", func(t *testing.T) { - // Create a system with no L2 chains - systestSystem := &mockSystem{ - l2s: []system.L2Chain{}, - } - - // Try to get chain config for an invalid chain index - _, validator := AcquireL2WithFork(0, forks.Isthmus) - systestT := systest.NewT(t) - - // Apply the validator - should fail since chain index is out of range - _, err := validator(systestT, systestSystem) - require.Error(t, err, "Validator should fail when chain index is out of range") - require.Contains(t, err.Error(), "chain index 0 out of range", "Error message should indicate chain index out of range") - }) -} - -type mockSystem struct { - l1 system.Chain - l2s []system.L2Chain -} - -func (sys *mockSystem) Identifier() string { - return "mock" -} - -func (sys *mockSystem) L1() system.Chain { - return sys.l1 -} - -func (sys *mockSystem) L2s() []system.L2Chain { - return sys.l2s -} - -type mockChain struct { - wallets system.WalletMap - config *params.ChainConfig - nodes []system.Node -} - -func (m *mockChain) ID() types.ChainID { return types.ChainID(big.NewInt(1)) } -func (m *mockChain) Wallets() system.WalletMap { - return m.wallets -} -func (m *mockChain) Config() (*params.ChainConfig, error) { - if m.config == nil { - return nil, fmt.Errorf("chain config not implemented") - } - return m.config, nil -} - -func (m *mockChain) Nodes() []system.Node { - return m.nodes -} -func (m *mockChain) Addresses() system.AddressMap { - return system.AddressMap{} -} - -type mockL2Chain struct { - mockChain - l1Wallets system.WalletMap -} - -func (m *mockL2Chain) L1Addresses() system.AddressMap { - return system.AddressMap{} -} -func (m *mockL2Chain) L1Wallets() system.WalletMap { - return m.l1Wallets -} - -type mockNode struct{} - -func (m *mockNode) GasPrice(ctx context.Context) (*big.Int, error) { - return nil, fmt.Errorf("not implemented") -} - -func (m *mockNode) GasLimit(ctx context.Context, tx system.TransactionData) (uint64, error) { - return 0, fmt.Errorf("not implemented") -} - -func (m *mockNode) PendingNonceAt(ctx context.Context, addr common.Address) (uint64, error) { - return 0, fmt.Errorf("not implemented") -} - -func (m *mockNode) BlockByNumber(ctx context.Context, number *big.Int) (eth.BlockInfo, error) { - header := ethtypes.Header{Time: 100} - info := eth.HeaderBlockInfo(&header) - return info, nil -} - -func (m *mockNode) Client() (*sources.EthClient, error) { - return nil, fmt.Errorf("not implemented") -} - -func (m *mockNode) GethClient() (*ethclient.Client, error) { - return nil, fmt.Errorf("not implemented") -} - -func (m *mockNode) SupportsEIP(ctx context.Context, eip uint64) bool { - return false -} - -func (m *mockNode) RPCURL() string { - return "" -} - -func (m *mockNode) ContractsRegistry() interfaces.ContractsRegistry { - return nil -} - -func (m *mockNode) Name() string { - return "mock" -} - -type mockWallet struct { - balance types.Balance - address types.Address -} - -func (m mockWallet) Balance() types.Balance { - return m.balance -} - -func (m mockWallet) Address() types.Address { - return m.address -} - -func (m mockWallet) PrivateKey() types.Key { - key, _ := crypto.HexToECDSA("123") - return types.Key(key) -} - -func (m mockWallet) SendETH(to types.Address, amount types.Balance) types.WriteInvocation[any] { - panic("not implemented") -} - -func (m mockWallet) InitiateMessage(chainID types.ChainID, target common.Address, message []byte) types.WriteInvocation[any] { - panic("not implemented") -} - -func (m mockWallet) ExecuteMessage(identifier bindings.Identifier, sentMessage []byte) types.WriteInvocation[any] { - panic("not implemented") -} - -func (m mockWallet) Nonce() uint64 { - return 0 -} - -func (m mockWallet) Sign(tx system.Transaction) (system.Transaction, error) { - return tx, nil -} - -func (m mockWallet) Send(ctx context.Context, tx system.Transaction) error { - return nil -} - -func (m mockWallet) Transactor() *bind.TransactOpts { - return nil -} - -var ( - _ system.Chain = (*mockChain)(nil) - _ system.L2Chain = (*mockL2Chain)(nil) - _ system.System = (*mockSystem)(nil) - _ system.Wallet = (*mockWallet)(nil) - _ system.Node = (*mockNode)(nil) -) diff --git a/devnet-sdk/testing/testlib/validators/wallet.go b/devnet-sdk/testing/testlib/validators/wallet.go deleted file mode 100644 index 2e0acc00e21..00000000000 --- a/devnet-sdk/testing/testlib/validators/wallet.go +++ /dev/null @@ -1,61 +0,0 @@ -package validators - -import ( - "context" - "fmt" - - "github.com/ethereum-optimism/optimism/devnet-sdk/constraints" - "github.com/ethereum-optimism/optimism/devnet-sdk/system" - "github.com/ethereum-optimism/optimism/devnet-sdk/testing/systest" - "github.com/ethereum-optimism/optimism/devnet-sdk/types" -) - -type WalletGetter = func(context.Context) system.Wallet - -func walletFundsValidator(chain system.Chain, minFunds types.Balance, userMarker interface{}) systest.PreconditionValidator { - constraint := constraints.WithBalance(minFunds) - return func(t systest.T, sys system.System) (context.Context, error) { - wallets := chain.Wallets() - - for _, wallet := range wallets { - if constraint.CheckWallet(wallet) { - return context.WithValue(t.Context(), userMarker, wallet), nil - } - } - - return nil, fmt.Errorf("no available wallet with balance of at least of %s", minFunds) - } -} - -func AcquireL2WalletWithFunds(chainIndex uint64, minFunds types.Balance) (WalletGetter, systest.PreconditionValidator) { - walletMarker := new(byte) - return func(ctx context.Context) system.Wallet { - return ctx.Value(walletMarker).(system.Wallet) - }, func(t systest.T, sys system.System) (context.Context, error) { - if len(sys.L2s()) <= int(chainIndex) { - return nil, fmt.Errorf("chain index %d out of range, only %d L2 chains available", chainIndex, len(sys.L2s())) - } - chain := sys.L2s()[chainIndex] - validator := walletFundsValidator(chain, minFunds, walletMarker) - ctx, err := validator(t, sys) - if err != nil { - return ctx, fmt.Errorf("failed to acquire l2 wallet: %w", err) - } - return ctx, nil - } -} - -func AcquireL1WalletWithFunds(minFunds types.Balance) (WalletGetter, systest.PreconditionValidator) { - walletMarker := new(byte) - return func(ctx context.Context) system.Wallet { - return ctx.Value(walletMarker).(system.Wallet) - }, func(t systest.T, sys system.System) (context.Context, error) { - chain := sys.L1() - validator := walletFundsValidator(chain, minFunds, walletMarker) - ctx, err := validator(t, sys) - if err != nil { - return ctx, fmt.Errorf("failed to acquire l1 wallet: %w", err) - } - return ctx, nil - } -} diff --git a/go.mod b/go.mod index ae7032b98dc..e43b7732082 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module github.com/ethereum-optimism/optimism -go 1.23.0 +go 1.24.0 -toolchain go1.23.8 +toolchain go1.24.10 require ( github.com/BurntSushi/toml v1.5.0 @@ -110,7 +110,7 @@ require ( github.com/containerd/log v0.1.0 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect - github.com/crate-crypto/go-eth-kzg v1.3.0 // indirect + github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/dchest/siphash v1.2.3 // indirect @@ -127,6 +127,7 @@ require ( github.com/elastic/gosigar v0.14.3 // indirect github.com/emicklei/dot v1.6.2 // indirect github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect + github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect github.com/ethereum/go-verkle v0.2.2 // indirect github.com/felixge/fgprof v0.9.5 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect @@ -264,7 +265,7 @@ require ( github.com/sirupsen/logrus v1.9.3 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/stretchr/objx v0.5.2 // indirect - github.com/supranational/blst v0.3.15 // indirect + github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect @@ -296,7 +297,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/image v0.25.0 // indirect golang.org/x/net v0.38.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/sys v0.36.0 // indirect golang.org/x/tools v0.29.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect @@ -308,7 +309,7 @@ require ( lukechampine.com/blake3 v1.3.0 // indirect ) -replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth v1.101603.5-rc.1 +replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth v1.101604.0-synctest.0 // replace github.com/ethereum/go-ethereum => ../op-geth diff --git a/go.sum b/go.sum index da139ed2671..9e71502956c 100644 --- a/go.sum +++ b/go.sum @@ -173,8 +173,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-eth-kzg v1.3.0 h1:05GrhASN9kDAidaFJOda6A4BEvgvuXbazXg/0E3OOdI= -github.com/crate-crypto/go-eth-kzg v1.3.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= +github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= +github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= github.com/crate-crypto/go-kzg-4844 v1.1.0 h1:EN/u9k2TF6OWSHrCCDBBU6GLNMq88OspHHlMnHfoyU4= @@ -238,12 +238,14 @@ github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.4-0.20251001155152-4eb15ccedf7e h1:iy1vBIzACYUyOVyoADUwvAiq2eOPC0yVsDUdolPwQjk= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.4-0.20251001155152-4eb15ccedf7e/go.mod h1:DYj7+vYJ4cIB7zera9mv4LcAynCL5u4YVfoeUu6Wa+w= -github.com/ethereum-optimism/op-geth v1.101603.5-rc.1 h1:Ra/GD1D63qaeMARyK58UA+rcDQIznN2IBBFyzapHHVo= -github.com/ethereum-optimism/op-geth v1.101603.5-rc.1/go.mod h1:cnGR2M8zX91+rRQxXyNTEOEpw/IwdR8P11FQX7Xaqwk= +github.com/ethereum-optimism/op-geth v1.101604.0-synctest.0 h1:cWnKry8Cgworpw3X+TDEr57DCYefjN9Tmy2eJ9elMzE= +github.com/ethereum-optimism/op-geth v1.101604.0-synctest.0/go.mod h1:fCNAwDynfAP6EKsmLqwSDUDgi+GtJIir74Ui3fXXMps= github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20251009180028-9b4658b9b7af h1:WWz0gJM/boaUImtJnROecPirAerKCLpAU4m6Tx0ArOg= github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20251009180028-9b4658b9b7af/go.mod h1:NZ816PzLU1TLv1RdAvYAb6KWOj4Zm5aInT0YpDVml2Y= github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3aXiHh5s= github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= +github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= +github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= @@ -893,8 +895,8 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/supranational/blst v0.3.15 h1:rd9viN6tfARE5wv3KZJ9H8e1cg0jXW8syFCcsbHa76o= -github.com/supranational/blst v0.3.15/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= +github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= @@ -1145,8 +1147,8 @@ golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/kurtosis-devnet/op-program-svc/Dockerfile b/kurtosis-devnet/op-program-svc/Dockerfile index 1dd5c75d56a..3f11dbb3c11 100644 --- a/kurtosis-devnet/op-program-svc/Dockerfile +++ b/kurtosis-devnet/op-program-svc/Dockerfile @@ -1,6 +1,6 @@ ARG BASE_IMAGE=op-program-base:latest -FROM golang:1.23.8-alpine3.20 AS builder +FROM golang:1.24.10-alpine3.20 AS builder COPY ./*.go /app/ WORKDIR /app diff --git a/mise.toml b/mise.toml index 179d02866eb..287518ce770 100644 --- a/mise.toml +++ b/mise.toml @@ -1,7 +1,7 @@ [tools] # Core dependencies -go = "1.23.8" +go = "1.24.10" golangci-lint = "1.64.8" gotestsum = "1.12.3" mockery = "2.53.3" diff --git a/op-chain-ops/cmd/op-simulate/main.go b/op-chain-ops/cmd/op-simulate/main.go index 5c7d95feb2d..efe5324946c 100644 --- a/op-chain-ops/cmd/op-simulate/main.go +++ b/op-chain-ops/cmd/op-simulate/main.go @@ -269,7 +269,7 @@ func simulate(ctx context.Context, logger log.Logger, conf *params.ChainConfig, state.CreateAccount(addr) state.SetBalance(addr, uint256.MustFromBig((*big.Int)(&acc.Balance)), tracing.BalanceChangeUnspecified) state.SetNonce(addr, acc.Nonce, tracing.NonceChangeUnspecified) - state.SetCode(addr, acc.Code) + state.SetCode(addr, acc.Code, tracing.CodeChangeUnspecified) state.SetStorage(addr, acc.Storage) } diff --git a/op-chain-ops/foundry/allocs_test.go b/op-chain-ops/foundry/allocs_test.go index 8fdeee6da0d..608ef0d549a 100644 --- a/op-chain-ops/foundry/allocs_test.go +++ b/op-chain-ops/foundry/allocs_test.go @@ -54,7 +54,7 @@ func TestForgeAllocs_FromState(t *testing.T) { st.CreateContract(contract) st.SetNonce(contract, 30, tracing.NonceChangeUnspecified) st.SetBalance(contract, uint256.NewInt(0), tracing.BalanceChangeUnspecified) - st.SetCode(contract, []byte{10, 11, 12, 13, 14}) + st.SetCode(contract, []byte{10, 11, 12, 13, 14}, tracing.CodeChangeUnspecified) // Commit and make a new state, we cannot reuse the state after Commit // (see doc-comment in Commit, absolute footgun) diff --git a/op-chain-ops/script/cheatcodes_environment.go b/op-chain-ops/script/cheatcodes_environment.go index 3b23f312519..bdc197b6a8f 100644 --- a/op-chain-ops/script/cheatcodes_environment.go +++ b/op-chain-ops/script/cheatcodes_environment.go @@ -66,7 +66,7 @@ func (c *CheatCodesPrecompile) Load(account common.Address, slot [32]byte) [32]b // Etch implements https://book.getfoundry.sh/cheatcodes/etch func (c *CheatCodesPrecompile) Etch(who common.Address, code []byte) { - c.h.state.SetCode(who, bytes.Clone(code)) // important to clone; geth EVM will reuse the calldata memory. + c.h.state.SetCode(who, bytes.Clone(code), tracing.CodeChangeUnspecified) // important to clone; geth EVM will reuse the calldata memory. if len(code) > 0 { // if we're not just zeroing out the account: allow it to access cheatcodes c.h.AllowCheatcodes(who) diff --git a/op-chain-ops/script/forking/forking_test.go b/op-chain-ops/script/forking/forking_test.go index dd5f1f8518e..d9299e35c3d 100644 --- a/op-chain-ops/script/forking/forking_test.go +++ b/op-chain-ops/script/forking/forking_test.go @@ -259,7 +259,7 @@ func TestForking(t *testing.T) { forkState.SetBalance(alice, uint256.NewInt(100_000), tracing.BalanceChangeUnspecified) forkState.SetState(alice, common.Hash{4}, common.Hash{42}) forkState.SetState(alice, common.Hash{5}, common.Hash{100}) - forkState.SetCode(alice, []byte("hello world")) + forkState.SetCode(alice, []byte("hello world"), tracing.CodeChangeUnspecified) // Check the name name, err = forkState.ForkURLOrAlias(forkC) diff --git a/op-chain-ops/script/forking/state.go b/op-chain-ops/script/forking/state.go index 9c49d81c2bb..18545ceb4c7 100644 --- a/op-chain-ops/script/forking/state.go +++ b/op-chain-ops/script/forking/state.go @@ -278,8 +278,8 @@ func (fst *ForkableState) GetCode(address common.Address) []byte { return fst.stateFor(address).GetCode(address) } -func (fst *ForkableState) SetCode(address common.Address, bytes []byte) []byte { - return fst.stateFor(address).SetCode(address, bytes) +func (fst *ForkableState) SetCode(address common.Address, bytes []byte, reason tracing.CodeChangeReason) []byte { + return fst.stateFor(address).SetCode(address, bytes, reason) } func (fst *ForkableState) GetCodeSize(address common.Address) int { diff --git a/op-chain-ops/script/script.go b/op-chain-ops/script/script.go index 68c072a5688..b94c05bc6d0 100644 --- a/op-chain-ops/script/script.go +++ b/op-chain-ops/script/script.go @@ -323,7 +323,7 @@ func (h *Host) EnableCheats() error { // Solidity does EXTCODESIZE checks on functions without return-data. // We need to insert some placeholder code to prevent it from aborting calls. // Emulates Forge script: https://github.com/foundry-rs/foundry/blob/224fe9cbf76084c176dabf7d3b2edab5df1ab818/crates/evm/evm/src/executors/mod.rs#L108 - h.state.SetCode(addresses.VMAddr, []byte{0x00}) + h.state.SetCode(addresses.VMAddr, []byte{0x00}, tracing.CodeChangeUnspecified) h.precompiles[addresses.VMAddr] = h.cheatcodes consolePrecompile, err := NewPrecompile[*ConsolePrecompile](&ConsolePrecompile{ @@ -437,7 +437,7 @@ func (h *Host) Create(from common.Address, initCode []byte) (common.Address, err // Note that storage is not removed. func (h *Host) Wipe(addr common.Address) { if h.state.GetCodeSize(addr) > 0 { - h.state.SetCode(addr, nil) + h.state.SetCode(addr, nil, tracing.CodeChangeUnspecified) } h.state.SetNonce(addr, 0, tracing.NonceChangeUnspecified) h.state.SetBalance(addr, uint256.NewInt(0), tracing.BalanceChangeUnspecified) @@ -476,7 +476,7 @@ func (h *Host) ImportAccount(addr common.Address, account types.Account) { } h.state.SetBalance(addr, balance, tracing.BalanceChangeUnspecified) h.state.SetNonce(addr, account.Nonce, tracing.NonceChangeUnspecified) - h.state.SetCode(addr, account.Code) + h.state.SetCode(addr, account.Code, tracing.CodeChangeUnspecified) for key, value := range account.Storage { h.state.SetState(addr, key, value) } @@ -506,7 +506,7 @@ func (h *Host) SetPrecompile(addr common.Address, precompile vm.PrecompiledContr h.log.Debug("adding precompile", "addr", addr) h.precompiles[addr] = precompile // insert non-empty placeholder bytecode, so EXTCODESIZE checks pass - h.state.SetCode(addr, []byte{0}) + h.state.SetCode(addr, []byte{0}, tracing.CodeChangeUnspecified) } // HasPrecompileOverride inspects if there exists an active precompile-override at the given address. diff --git a/op-e2e/e2eutils/fakebeacon/blobs.go b/op-e2e/e2eutils/fakebeacon/blobs.go index beb45ce1ded..5e4dc04754b 100644 --- a/op-e2e/e2eutils/fakebeacon/blobs.go +++ b/op-e2e/e2eutils/fakebeacon/blobs.go @@ -214,7 +214,7 @@ func (f *FakeBeacon) Start(addr string) error { return nil } -func (f *FakeBeacon) StoreBlobsBundle(slot uint64, bundle *engine.BlobsBundleV1) error { +func (f *FakeBeacon) StoreBlobsBundle(slot uint64, bundle *engine.BlobsBundle) error { f.blobsLock.Lock() defer f.blobsLock.Unlock() @@ -236,7 +236,7 @@ func (f *FakeBeacon) StoreBlobsBundle(slot uint64, bundle *engine.BlobsBundleV1) return nil } -func (f *FakeBeacon) LoadBlobsBundle(slot uint64) (*engine.BlobsBundleV1, error) { +func (f *FakeBeacon) LoadBlobsBundle(slot uint64) (*engine.BlobsBundle, error) { f.blobsLock.Lock() defer f.blobsLock.Unlock() @@ -252,7 +252,7 @@ func (f *FakeBeacon) LoadBlobsBundle(slot uint64) (*engine.BlobsBundleV1, error) } // Convert blobs to the bundle - out := engine.BlobsBundleV1{ + out := engine.BlobsBundle{ Commitments: make([]hexutil.Bytes, len(blobs)), Proofs: make([]hexutil.Bytes, len(blobs)), Blobs: make([]hexutil.Bytes, len(blobs)), diff --git a/op-e2e/e2eutils/geth/fakepos.go b/op-e2e/e2eutils/geth/fakepos.go index b84c9216a73..7ccb584089e 100644 --- a/op-e2e/e2eutils/geth/fakepos.go +++ b/op-e2e/e2eutils/geth/fakepos.go @@ -26,7 +26,7 @@ import ( ) type Beacon interface { - StoreBlobsBundle(slot uint64, bundle *engine.BlobsBundleV1) error + StoreBlobsBundle(slot uint64, bundle *engine.BlobsBundle) error } // fakePoS is a testing-only utility to attach to Geth, diff --git a/op-program/Dockerfile.repro b/op-program/Dockerfile.repro index 2f861f3b2ff..64450e15fa6 100644 --- a/op-program/Dockerfile.repro +++ b/op-program/Dockerfile.repro @@ -1,4 +1,4 @@ -ARG GO_VERSION=1.23.8-alpine3.21 +ARG GO_VERSION=1.24.10-alpine3.21 ARG EXPORT_TARGET=current FROM golang:${GO_VERSION} AS src diff --git a/op-program/Dockerfile.vmcompat b/op-program/Dockerfile.vmcompat index 6075141cf30..4045e300dcb 100644 --- a/op-program/Dockerfile.vmcompat +++ b/op-program/Dockerfile.vmcompat @@ -1,4 +1,4 @@ -ARG GO_VERSION=1.23.8-alpine3.21 +ARG GO_VERSION=1.24.10-alpine3.21 ARG VM_TARGET=current FROM golang:${GO_VERSION} AS builder diff --git a/op-program/Makefile b/op-program/Makefile index e12c8e5a1d3..9cb5edf60eb 100644 --- a/op-program/Makefile +++ b/op-program/Makefile @@ -141,8 +141,9 @@ analyze-op-program-client-next: ./scripts/run-static-analysis.sh ./vm-profiles/cannon-multithreaded-64-next.yaml ./compatibility-test/baseline-cannon-multithreaded-64-next.json run-vm-compat: - @docker build --build-arg GO_VERSION=1.23.8-alpine3.21 --build-arg VM_TARGET=current --progress plain -f Dockerfile.vmcompat ../ - @docker build --build-arg GO_VERSION=1.24.2-alpine3.21 --build-arg VM_TARGET=next --progress plain -f Dockerfile.vmcompat ../ + @docker build --build-arg GO_VERSION=1.24.10-alpine3.21 --build-arg VM_TARGET=current --progress plain -f Dockerfile.vmcompat ../ + # TODO(#18334): Uncomment once vm-compat supports go1.25 + #@docker build --build-arg GO_VERSION=1.25.4-alpine3.21 --build-arg VM_TARGET=next --progress plain -f Dockerfile.vmcompat ../ .PHONY: \ op-program \ diff --git a/op-program/client/l2/db_test.go b/op-program/client/l2/db_test.go index 6395fd525cf..0673c746a40 100644 --- a/op-program/client/l2/db_test.go +++ b/op-program/client/l2/db_test.go @@ -140,7 +140,7 @@ func TestUpdateState(t *testing.T) { statedb.SetBalance(unknownAccount, uint256.NewInt(60), tracing.BalanceChangeUnspecified) require.Equal(t, uint256.NewInt(60), statedb.GetBalance(unknownAccount)) - statedb.SetCode(codeAccount, []byte{1}) + statedb.SetCode(codeAccount, []byte{1}, tracing.CodeChangeUnspecified) require.Equal(t, []byte{1}, statedb.GetCode(codeAccount)) // Changes should be available under the new state root after committing diff --git a/op-program/compatibility-test/baseline-cannon-multithreaded-64.json b/op-program/compatibility-test/baseline-cannon-multithreaded-64.json index 89a722c3123..801847df21d 100644 --- a/op-program/compatibility-test/baseline-cannon-multithreaded-64.json +++ b/op-program/compatibility-test/baseline-cannon-multithreaded-64.json @@ -30,40 +30,6 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "018e5d2c108e437ec631530e40ff4b6acc56d1b9cbf9d05fc5ad38c43906af46" }, - { - "callStack": { - "function": "syscall.sendto", - "callStack": { - "function": "syscall.Sendto", - "callStack": { - "function": "syscall.NetlinkRIB", - "callStack": { - "function": "net.interfaceTable", - "callStack": { - "function": "net.interfaceAddrTable", - "callStack": { - "function": "net.(*Interface).Addrs", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", - "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" - } - } - } - } - } - } - } - } - }, - "message": "Potential Incompatible Syscall Detected: 5043", - "severity": "CRITICAL", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "02273f0887bffbe971bf9104eab6d24b279ee65d0570471b6d98adc3ea4dcf88" - }, { "callStack": { "function": "syscall.unlinkat", @@ -276,23 +242,56 @@ }, { "callStack": { - "function": "syscall.bind", + "function": "syscall.Mkdirat", "callStack": { - "function": "syscall.Bind", + "function": "os.MkdirAll", "callStack": { - "function": "syscall.NetlinkRIB", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "net.interfaceTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "net.interfaceAddrTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "net.(*Interface).Addrs", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } } } } @@ -302,11 +301,11 @@ } } }, - "message": "Potential Incompatible Syscall Detected: 5048", + "message": "Potential Incompatible Syscall Detected: 5248", "severity": "CRITICAL", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "116079bbd136eec5697ad5a21e852a4d360b6c5e755437961521529aba146594" + "hash": "149abcf9cae57fc3391d4f8a9341d187f185f45b8ec12b32b46fc265dca29dc7" }, { "callStack": { @@ -400,6 +399,37 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "199965a4f6b32b559744238c3d6e4c71322042008eb0a19357faeab06f89bcf7" }, + { + "callStack": { + "function": "syscall.recvfrom", + "callStack": { + "function": "syscall.Recvfrom", + "callStack": { + "function": "syscall.NetlinkRIB", + "callStack": { + "function": "net.interfaceAddrTable", + "callStack": { + "function": "net.(*Interface).Addrs", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "callStack": { + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + } + } + } + } + } + } + } + }, + "message": "Potential Incompatible Syscall Detected: 5044", + "severity": "CRITICAL", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "1ad5f18a8eb8363d125dba13007230845b279dbb0a158b12426680d08d7e2244" + }, { "callStack": { "function": "syscall.unlinkat", @@ -1089,6 +1119,64 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "358129415a7a5855190e9b6e06df07ca19196b58e3afb322229481fe8cbb36ff" }, + { + "callStack": { + "function": "syscall.Mkdirat", + "callStack": { + "function": "os.MkdirAll", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential Incompatible Syscall Detected: 5248", + "severity": "CRITICAL", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "36de88fb326124880bf12d60a65964249532b73b8b022a996e764dc3c9bcc8f1" + }, { "callStack": { "function": "syscall.lstat", @@ -1796,24 +1884,21 @@ }, { "callStack": { - "function": "syscall.recvfrom", + "function": "syscall.getsockname", "callStack": { - "function": "syscall.Recvfrom", + "function": "syscall.Getsockname", "callStack": { "function": "syscall.NetlinkRIB", "callStack": { "function": "net.interfaceTable", "callStack": { - "function": "net.interfaceAddrTable", + "function": "net.Interfaces", "callStack": { - "function": "net.(*Interface).Addrs", + "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", - "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" - } + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" } } } @@ -1822,29 +1907,59 @@ } } }, - "message": "Potential Incompatible Syscall Detected: 5044", + "message": "Potential Incompatible Syscall Detected: 5050", "severity": "CRITICAL", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "625f6774a081123ec5bd84932f3454586efeaa6dc23a636486ffd064319bd87e" + "hash": "626b6f7e1f562743b0d79b3349ff66e833d8ec438977c0c2173c1977ef628db5" }, { "callStack": { - "function": "syscall.getsockname", + "function": "syscall.Mkdirat", "callStack": { - "function": "syscall.Getsockname", + "function": "os.MkdirAll", "callStack": { - "function": "syscall.NetlinkRIB", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "net.interfaceTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "net.Interfaces", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } } } } @@ -1853,11 +1968,11 @@ } } }, - "message": "Potential Incompatible Syscall Detected: 5050", + "message": "Potential Incompatible Syscall Detected: 5248", "severity": "CRITICAL", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "626b6f7e1f562743b0d79b3349ff66e833d8ec438977c0c2173c1977ef628db5" + "hash": "6778790c52c11b208e0ead801c8f04cf7775b4411c4cc85a467a777b114a753b" }, { "callStack": { @@ -2227,6 +2342,37 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "7aac7619718589c093d01f785ae5c03beb4372b375870323e12dc62fb6b249e1" }, + { + "callStack": { + "function": "syscall.bind", + "callStack": { + "function": "syscall.Bind", + "callStack": { + "function": "syscall.NetlinkRIB", + "callStack": { + "function": "net.interfaceAddrTable", + "callStack": { + "function": "net.(*Interface).Addrs", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "callStack": { + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + } + } + } + } + } + } + } + }, + "message": "Potential Incompatible Syscall Detected: 5048", + "severity": "CRITICAL", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "7b8a46bedc79cd6608a2be80c5f7288623f17c48b3248b478a92c2ebb8af8a95" + }, { "callStack": { "function": "syscall.Fsync", @@ -3084,15 +3230,79 @@ }, { "callStack": { - "function": "syscall.unlinkat", + "function": "syscall.Mkdirat", "callStack": { - "function": "os.Remove", + "function": "os.MkdirAll", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesBefore", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential Incompatible Syscall Detected: 5248", + "severity": "CRITICAL", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "9a93d8e3beaf367660cc3501c7fbdef80e6600badaa2b639606d43196def6b23" + }, + { + "callStack": { + "function": "syscall.unlinkat", + "callStack": { + "function": "os.Remove", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesBefore", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { @@ -3225,6 +3435,34 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "9fe25a1ff87b3d01ad9cf5c35ef1315c62d0446f50a58a1532bbaab8231e770e" }, + { + "callStack": { + "function": "syscall.socket", + "callStack": { + "function": "syscall.NetlinkRIB", + "callStack": { + "function": "net.interfaceAddrTable", + "callStack": { + "function": "net.(*Interface).Addrs", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "callStack": { + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + } + } + } + } + } + } + }, + "message": "Potential Incompatible Syscall Detected: 5040", + "severity": "CRITICAL", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a2b3e2555a4bdba1a9ba63c408aea992b3bec163f4bb32b2d018353ef226e846" + }, { "callStack": { "function": "syscall.socket", @@ -4023,37 +4261,6 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "bdc5354f628e4b9c938e5dca046d5e6d5bc30c895261c4aa3f780bed18c4feb5" }, - { - "callStack": { - "function": "syscall.socket", - "callStack": { - "function": "syscall.NetlinkRIB", - "callStack": { - "function": "net.interfaceTable", - "callStack": { - "function": "net.interfaceAddrTable", - "callStack": { - "function": "net.(*Interface).Addrs", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", - "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" - } - } - } - } - } - } - } - }, - "message": "Potential Incompatible Syscall Detected: 5040", - "severity": "CRITICAL", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "bf941fe0d544f73073823fe9910fdf6fab9edb7635e78c80d3104746b09a5bc9" - }, { "callStack": { "function": "syscall.unlinkat", @@ -4346,6 +4553,37 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "e814e4919343f68b57b16c4b038fa9f2a9774461df6cd30339cb0e1227ecd446" }, + { + "callStack": { + "function": "syscall.sendto", + "callStack": { + "function": "syscall.Sendto", + "callStack": { + "function": "syscall.NetlinkRIB", + "callStack": { + "function": "net.interfaceAddrTable", + "callStack": { + "function": "net.(*Interface).Addrs", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "callStack": { + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + } + } + } + } + } + } + } + }, + "message": "Potential Incompatible Syscall Detected: 5043", + "severity": "CRITICAL", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "ea283234a1456f84759fed4d242794c2adf9d2d3fe4eeb5ed1e46785345a131c" + }, { "callStack": { "function": "syscall.getsockname", @@ -4354,18 +4592,15 @@ "callStack": { "function": "syscall.NetlinkRIB", "callStack": { - "function": "net.interfaceTable", + "function": "net.interfaceAddrTable", "callStack": { - "function": "net.interfaceAddrTable", + "function": "net.(*Interface).Addrs", "callStack": { - "function": "net.(*Interface).Addrs", + "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.potentialGateways", + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", - "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" - } + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" } } } @@ -4378,7 +4613,7 @@ "severity": "CRITICAL", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "ea738a4471c0c41e41dbdf8ed2d8dd6ee305c3a9aa6825bd098acc375c27b0ab" + "hash": "eb3121306d79c84b8f563cde55139daae0c0c84d01e15d996d229beb70b06ffd" }, { "callStack": { @@ -4630,6 +4865,86 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "03494b954c2d841932e024ea707dea131e61ae8b87015509de711e02f7239175" }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "os.ReadFile", + "callStack": { + "function": "golang.org/x/sys/cpu.readHWCAP", + "callStack": { + "function": "golang.org/x/sys/cpu.archInit", + "callStack": { + "function": "golang.org/x/sys/cpu.init.0" + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "0373ac42589b5ea7a70e50d9ea8c2172b40eb5b07634434df964ffedce2dd0a3" + }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timer).maybeAdd", + "callStack": { + "function": "runtime.(*timer).modify", + "callStack": { + "function": "time.newTimer", + "callStack": { + "function": "time.AfterFunc", + "callStack": { + "function": "crypto/internal/sysrand.Read", + "callStack": { + "function": "crypto/internal/entropy.Depleted", + "callStack": { + "function": "crypto/internal/fips140/drbg.Read", + "callStack": { + "function": "crypto/rand.(*reader).Read", + "callStack": { + "function": "crypto/rand.Read", + "callStack": { + "function": "github.com/ethereum/go-ethereum/rpc.randomIDGenerator", + "callStack": { + "function": "github.com/ethereum/go-ethereum/rpc.init" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5285", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "05e2e25c1bf1460977a41655e8cd3b07f1c3f1d6728ed7c70be67a4b9456a9fb" + }, { "callStack": { "function": "syscall.pread", @@ -4714,45 +5029,91 @@ }, { "callStack": { - "function": "runtime.netpollclose", + "function": "runtime.netpollinit", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "runtime.(*timer).modify", "callStack": { - "function": "os.(*file).close", + "function": "time.newTimer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFile", + "function": "time.AfterFunc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "crypto/internal/entropy.Depleted", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "crypto/internal/fips140/drbg.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "crypto/internal/fips140/drbg.ReadWithReader", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P521Point]", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "crypto/ecdh.init.func9" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5285", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "091e67e0dab0b94d35b33d83225e48c23371139dd185fdb96680cf8127dfa7ee" + }, + { + "callStack": { + "function": "runtime.netpollclose", + "callStack": { + "function": "internal/poll.runtime_pollClose", + "callStack": { + "function": "internal/poll.(*FD).destroy", + "callStack": { + "function": "internal/poll.(*FD).decref", + "callStack": { + "function": "internal/poll.(*FD).Close", + "callStack": { + "function": "os.(*file).close", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFile", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { @@ -4791,6 +5152,65 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "09794197c244b20537936c83d53eed72cce3a5a45cd839a73ed72b715676a2e0" }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "os.ReadFile", + "callStack": { + "function": "github.com/tklauser/numcpus.readCPURange", + "callStack": { + "function": "github.com/tklauser/numcpus.getOnline", + "callStack": { + "function": "github.com/tklauser/go-sysconf.getNprocsSysfs", + "callStack": { + "function": "github.com/tklauser/go-sysconf.getNprocs", + "callStack": { + "function": "github.com/tklauser/go-sysconf.getNprocsConf", + "callStack": { + "function": "github.com/tklauser/go-sysconf.sysconf", + "callStack": { + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "09d1aa443d0f4b91a7a8ffad94aca2804b98bead8b6569ef94ad238892760e3f" + }, + { + "callStack": { + "function": "runtime.rtsigprocmask", + "callStack": { + "function": "runtime.schedinit", + "callStack": { + "function": "runtime.rt0_go" + } + } + }, + "message": "Potential NOOP Syscall Detected: 5014", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "0b38ba0b0cc0cebc39ee03c35fa3f376055117897bc6e3cb112bcc15518ca6a0" + }, { "callStack": { "function": "runtime.tgkill", @@ -4805,21 +5225,27 @@ "callStack": { "function": "runtime.greyobject", "callStack": { - "function": "runtime.shade", + "function": "runtime.scanblock", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "net/netip.parseIPv6", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "net/netip.ParseAddr", + "function": "net/netip.Addr.WithZone", "callStack": { - "function": "net.parseIP", + "function": "net/netip.parseIPv6", "callStack": { - "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net.dnsReadConfig", + "callStack": { + "function": "net.(*resolverConfig).init" + } + } } } } @@ -4838,49 +5264,94 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "09ad31bfdb332901e7c09369809bc1bb11852a351c13cb49726139bc515308b6" + "hash": "0b7fdea4af2dcb72c2081ecb871ad90fdb8ccbb42a0bc84b13642ea82877e038" }, { "callStack": { - "function": "runtime.rtsigprocmask", + "function": "runtime.tgkill", "callStack": { - "function": "runtime.schedinit", + "function": "runtime.signalM", "callStack": { - "function": "runtime.rt0_go" + "function": "runtime.preemptone", + "callStack": { + "function": "runtime.(*gcControllerState).enlistWorker", + "callStack": { + "function": "runtime.(*gcWork).put", + "callStack": { + "function": "runtime.greyobject", + "callStack": { + "function": "runtime.scanblock", + "callStack": { + "function": "runtime.getOrAddWeakHandle", + "callStack": { + "function": "weak.runtime_registerWeakPointer", + "callStack": { + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "net/netip.Addr.WithZone", + "callStack": { + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net/netip.ParsePrefix", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/netutil.(*Netlist).Add", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/netutil.init.0" + } + } + } + } + } + } + } + } + } + } + } + } + } + } } } }, - "message": "Potential NOOP Syscall Detected: 5014", + "message": "Potential NOOP Syscall Detected: 5225", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "0b38ba0b0cc0cebc39ee03c35fa3f376055117897bc6e3cb112bcc15518ca6a0" + "hash": "0bf2dce627201fe925b34bb6e120e60718e5796bdb70a80729a81f42995c405b" }, { "callStack": { - "function": "syscall.fstat", + "function": "runtime.netpollinit", "callStack": { - "function": "syscall.Fstat", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "os.(*File).Stat", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "os.ReadFile", + "function": "runtime.(*timer).modify", "callStack": { - "function": "github.com/tklauser/numcpus.readCPURange", + "function": "time.newTimer", "callStack": { - "function": "github.com/tklauser/numcpus.getOnline", + "function": "time.AfterFunc", "callStack": { - "function": "github.com/tklauser/go-sysconf.getNprocsSysfs", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "github.com/tklauser/go-sysconf.getNprocs", + "function": "crypto/internal/entropy.Depleted", "callStack": { - "function": "github.com/tklauser/go-sysconf.getNprocsConf", + "function": "crypto/internal/fips140/drbg.Read", "callStack": { - "function": "github.com/tklauser/go-sysconf.sysconf", + "function": "crypto/internal/fips140/drbg.ReadWithReader", "callStack": { - "function": "github.com/shirou/gopsutil/cpu.init.1" + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P384Point]", + "callStack": { + "function": "crypto/ecdh.init.func5" + } } } } @@ -4893,11 +5364,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "0b566199ce51cf989b8e2b497b920c1a1c20ea4779096fe1684a7d0bf6593683" + "hash": "0e5d778097e3afb9af77b1df6af9c353cbc6f2765db7081e6cc672e1cb5b23ef" }, { "callStack": { @@ -4929,25 +5400,34 @@ }, { "callStack": { - "function": "runtime.tgkill", + "function": "runtime.sysFaultOS", "callStack": { - "function": "runtime.signalM", + "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "runtime.preemptone", + "function": "runtime.(*mspan).ensureSwept", "callStack": { - "function": "runtime.(*gcControllerState).enlistWorker", + "function": "runtime.addspecial", "callStack": { - "function": "runtime.(*gcWork).put", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "runtime.greyobject", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "runtime.shade", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "net/netip.Addr.WithZone", "callStack": { - "function": "net/netip.init" + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net.parseIP", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + } + } + } } } } @@ -4958,11 +5438,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5225", + "message": "Potential NOOP Syscall Detected: 5010", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "10b853db9347cc73338c2d627ced2902c8e064cbb5abada05ff4012e26b68b21" + "hash": "0fd0807c39d90eac11f7ba18640a8d84c4ff43e4f0ee5a0a3d241d0c221cdbe6" }, { "callStack": { @@ -5149,27 +5629,54 @@ }, { "callStack": { - "function": "syscall.fstat", + "function": "runtime.tgkill", "callStack": { - "function": "syscall.Fstat", + "function": "runtime.signalM", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "runtime.preemptone", "callStack": { - "function": "os.(*File).Stat", + "function": "runtime.(*gcControllerState).enlistWorker", "callStack": { - "function": "os.ReadFile", + "function": "runtime.(*gcWork).put", "callStack": { - "function": "github.com/tklauser/numcpus.readCPURange", + "function": "runtime.greyobject", "callStack": { - "function": "github.com/tklauser/numcpus.getOnline", + "function": "runtime.scanblock", "callStack": { - "function": "github.com/tklauser/go-sysconf.getNprocsSysfs", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "github.com/tklauser/go-sysconf.getNprocs", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "github.com/tklauser/go-sysconf.sysconf", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/shirou/gopsutil/cpu.init.1" + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "net/netip.Addr.WithZone", + "callStack": { + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net/url.parseHost", + "callStack": { + "function": "net/url.parseAuthority", + "callStack": { + "function": "net/url.parse", + "callStack": { + "function": "net/url.Parse", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.parseProxy", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + } + } + } + } + } + } + } + } + } } } } @@ -5181,11 +5688,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5225", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "155dbf404089929890de06796549e5a8a1ea8fb37063fdc7bade7ff6f79e691e" + "hash": "13f348b043531a71becac27d4a6b448bd70e7bcb1dec6af7a842305b6f4cf23f" }, { "callStack": { @@ -5208,23 +5715,63 @@ }, { "callStack": { - "function": "syscall.stat", + "function": "syscall.openat", "callStack": { - "function": "syscall.Stat", + "function": "os.open", "callStack": { - "function": "os.statNolog", + "function": "os.openFileNolog", "callStack": { - "function": "os.Stat", + "function": "os.OpenFile", "callStack": { - "function": "os.MkdirAll", + "function": "os.ReadFile", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/tklauser/numcpus.readCPURange", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/tklauser/numcpus.getOnline", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/tklauser/go-sysconf.getNprocsSysfs", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/tklauser/go-sysconf.getNprocs", + "callStack": { + "function": "github.com/tklauser/go-sysconf.sysconf", + "callStack": { + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "16758795ac7913cfb7f71215e65fb4d0cb7f208954fd299627a57f907d67f73d" + }, + { + "callStack": { + "function": "syscall.stat", + "callStack": { + "function": "syscall.Stat", + "callStack": { + "function": "os.statNolog", + "callStack": { + "function": "os.Stat", + "callStack": { + "function": "os.MkdirAll", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { @@ -5282,6 +5829,85 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "18394b91d485feb4c352bba9d47a6fafc63c22dbdec91e7d81005c30d43cafcf" }, + { + "callStack": { + "function": "syscall.fstat", + "callStack": { + "function": "syscall.Fstat", + "callStack": { + "function": "internal/poll.(*FD).Fstat", + "callStack": { + "function": "os.(*File).Stat", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5005", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "1867e7a930fdf1d2bf8ec927d970981e71a315f5a36f886194dd1d15ad33728f" + }, { "callStack": { "function": "syscall.fstat", @@ -5437,6 +6063,43 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "1d4caaa7e4da78445e7d6ea2a32eb9662760811c5fac5f63aaabe39ea7cd2887" }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timer).maybeAdd", + "callStack": { + "function": "runtime.(*timer).modify", + "callStack": { + "function": "time.newTimer", + "callStack": { + "function": "time.AfterFunc", + "callStack": { + "function": "crypto/internal/sysrand.Read", + "callStack": { + "function": "crypto/internal/entropy.Depleted", + "callStack": { + "function": "crypto/internal/fips140/drbg.init.func1" + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5285", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "1e08c762e6d500d60ff67f94a7f7f33dc2d6ea0162ffb1fa258014cf832d020c" + }, { "callStack": { "function": "internal/runtime/syscall.EpollWait", @@ -5501,21 +6164,21 @@ }, { "callStack": { - "function": "syscall.fstat", + "function": "syscall.openat", "callStack": { - "function": "syscall.Fstat", + "function": "os.open", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "os.openFileNolog", "callStack": { - "function": "os.(*File).Stat", + "function": "os.OpenFile", "callStack": { - "function": "os.ReadFile", + "function": "github.com/tklauser/numcpus.getConfigured", "callStack": { - "function": "vendor/golang.org/x/sys/cpu.readHWCAP", + "function": "github.com/tklauser/go-sysconf.getNprocsConf", "callStack": { - "function": "vendor/golang.org/x/sys/cpu.archInit", + "function": "github.com/tklauser/go-sysconf.sysconf", "callStack": { - "function": "vendor/golang.org/x/sys/cpu.init.0" + "function": "github.com/shirou/gopsutil/cpu.init.1" } } } @@ -5524,29 +6187,29 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "243838c748abfbe0fb63aa86cc49c8b0a1f4ab08270d70d95bde3263dd7a700a" + "hash": "25cc5ca17434c74a54e80ce5d474e3147988aaf330ec85bf8917387940beff93" }, { "callStack": { - "function": "runtime.netpollinit", + "function": "syscall.openat", "callStack": { - "function": "runtime.netpollGenericInit", + "function": "os.open", "callStack": { - "function": "runtime.(*timers).addHeap", + "function": "os.openFileNolog", "callStack": { - "function": "runtime.(*timers).take", + "function": "os.OpenFile", "callStack": { - "function": "runtime.(*p).destroy", + "function": "github.com/tklauser/go-sysconf.getNprocsProcStat", "callStack": { - "function": "runtime.procresize", + "function": "github.com/tklauser/go-sysconf.getNprocs", "callStack": { - "function": "runtime.schedinit", + "function": "github.com/tklauser/go-sysconf.sysconf", "callStack": { - "function": "runtime.rt0_go" + "function": "github.com/shirou/gopsutil/cpu.init.1" } } } @@ -5555,11 +6218,42 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "275321f8463fb414185d8811478910cfd40a8011191f5c76da6b30cc935bf52a" + "hash": "264a9b6bf20decd921bcba30b021003c7e58808a9e6255df08fb2d477d5d7e41" + }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "os.ReadFile", + "callStack": { + "function": "github.com/tklauser/go-sysconf.readProcFsInt64", + "callStack": { + "function": "github.com/tklauser/go-sysconf.sysconf", + "callStack": { + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "2715a04f3a11a62424f02d26be318ee1d45cb1d1378f18c366379b1970afddd2" }, { "callStack": { @@ -5569,18 +6263,15 @@ "callStack": { "function": "runtime.(*timers).addHeap", "callStack": { - "function": "runtime.(*timer).maybeAdd", + "function": "runtime.(*timers).take", "callStack": { - "function": "runtime.(*timer).modify", + "function": "runtime.(*p).destroy", "callStack": { - "function": "time.newTimer", + "function": "runtime.procresize", "callStack": { - "function": "time.NewTimer", + "function": "runtime.schedinit", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", - "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" - } + "function": "runtime.rt0_go" } } } @@ -5593,56 +6284,65 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "27e40bc74736de4ecdd97f518c50234e2a8b0ff1b32f679cde6c4a85a4d40e1f" + "hash": "275321f8463fb414185d8811478910cfd40a8011191f5c76da6b30cc935bf52a" }, { "callStack": { - "function": "syscall.fstat", + "function": "syscall.openat", "callStack": { - "function": "syscall.Fstat", + "function": "os.open", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "os.openFileNolog", "callStack": { - "function": "os.(*File).Stat", + "function": "os.OpenFile", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", + "function": "os.CreateTemp", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "github.com/ethereum/go-ethereum/core/rawdb.copyFrom", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "main.main" - } - } - } + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } } } } @@ -5662,88 +6362,91 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "2980f0bda450812b72ff061e7683758c238f54961c90f9a479bb83fc91b1af0c" + "hash": "275ed079ca94ac112b10d684625f2f222f255883e5771599bbf68b1fe22165a7" }, { "callStack": { - "function": "runtime.open", + "function": "runtime.netpollinit", "callStack": { - "function": "runtime.checkfds", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "runtime.schedinit", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "runtime.rt0_go" + "function": "runtime.(*timer).maybeAdd", + "callStack": { + "function": "runtime.(*timer).modify", + "callStack": { + "function": "time.newTimer", + "callStack": { + "function": "time.NewTimer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "callStack": { + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + } + } + } + } + } } } } }, - "message": "Potential NOOP Syscall Detected: 5247", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "2b6f1d704f120b0210826a9ab8536f6d794440b8484a9b4cb7e02c97d6a90385" + "hash": "27e40bc74736de4ecdd97f518c50234e2a8b0ff1b32f679cde6c4a85a4d40e1f" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "syscall.fstat", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "syscall.Fstat", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "os.(*File).Stat", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", "callStack": { - "function": "os.(*file).close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesAfter", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } + "function": "main.main" } } } @@ -5766,96 +6469,30 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "2bae9d08793c3e5167bcf6bda1a9052e9927053a4bb8c87f0ae3318dc136daf1" + "hash": "2980f0bda450812b72ff061e7683758c238f54961c90f9a479bb83fc91b1af0c" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "runtime.open", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "runtime.checkfds", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "runtime.schedinit", "callStack": { - "function": "internal/poll.(*FD).decref", - "callStack": { - "function": "internal/poll.(*FD).Close", - "callStack": { - "function": "os.(*file).close", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesBefore", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } + "function": "runtime.rt0_go" } } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "2dbea9e83c66e6e1259675975b080118e69266858500b39a07f2432cc92f6ad2" + "hash": "2b6f1d704f120b0210826a9ab8536f6d794440b8484a9b4cb7e02c97d6a90385" }, { "callStack": { @@ -5912,87 +6549,181 @@ }, { "callStack": { - "function": "runtime.closefd", + "function": "syscall.fstat", "callStack": { - "function": "runtime.sysargs", + "function": "syscall.Fstat", "callStack": { - "function": "runtime.args", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "runtime.rt0_go" + "function": "os.(*File).Stat", + "callStack": { + "function": "os.readFileContents", + "callStack": { + "function": "os.ReadFile", + "callStack": { + "function": "golang.org/x/sys/cpu.readHWCAP", + "callStack": { + "function": "golang.org/x/sys/cpu.archInit", + "callStack": { + "function": "golang.org/x/sys/cpu.init.0" + } + } + } + } + } } } } }, - "message": "Potential NOOP Syscall Detected: 5003", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "30199b12b1d750ac311384341154177787fa4f17a771d8722260a320719b65f2" + "hash": "2fe264a8e352024dfe9f22db85bb2735fbc3e00ef7daf37162e316a6e4f004ac" }, { "callStack": { - "function": "syscall.Getrlimit", + "function": "runtime.closefd", "callStack": { - "function": "syscall.init.0" + "function": "runtime.sysargs", + "callStack": { + "function": "runtime.args", + "callStack": { + "function": "runtime.rt0_go" + } + } } }, - "message": "Potential NOOP Syscall Detected: 5095", + "message": "Potential NOOP Syscall Detected: 5003", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "315cbd243e354336112d6f78f0b7249ff91bd9a64f8525d5f562dc74218900ad" + "hash": "30199b12b1d750ac311384341154177787fa4f17a771d8722260a320719b65f2" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "syscall.openat", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "os.open", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "os.openFileNolog", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "os.OpenFile", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "os.(*file).close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesAfter", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).preopen", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "306f4ac96f1a30e7e071286dec0d8c841570abaa5179e1af46f7ef739a04baff" + }, + { + "callStack": { + "function": "runtime.netpollclose", + "callStack": { + "function": "internal/poll.runtime_pollClose", + "callStack": { + "function": "internal/poll.(*FD).destroy", + "callStack": { + "function": "internal/poll.(*FD).decref", + "callStack": { + "function": "internal/poll.(*FD).Close", + "callStack": { + "function": "os.(*file).close", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesAfter", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).preopen", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" } } } @@ -6026,25 +6757,31 @@ }, { "callStack": { - "function": "runtime.netpollinit", + "function": "runtime.madvise", "callStack": { - "function": "runtime.netpollGenericInit", + "function": "runtime.sysHugePageOS", "callStack": { - "function": "runtime.(*timers).addHeap", + "function": "runtime.(*mheap).sysAlloc", "callStack": { - "function": "runtime.(*timer).maybeAdd", + "function": "runtime.(*mheap).grow", "callStack": { - "function": "runtime.blockTimerChan", + "function": "runtime.(*mheap).allocSpan", "callStack": { - "function": "runtime.selectgo", + "function": "runtime.(*mheap).allocManual", "callStack": { - "function": "github.com/cockroachdb/fifo.(*Semaphore).Acquire", + "function": "runtime.stackpoolalloc", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readBlock", + "function": "runtime.stackcacherefill", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readIndex", + "function": "runtime.stackalloc", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*twoLevelIterator).init" + "function": "runtime.copystack", + "callStack": { + "function": "runtime.newstack", + "callStack": { + "function": "runtime.morestack" + } + } } } } @@ -6055,36 +6792,33 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5285", + "message": "Potential NOOP Syscall Detected: 5027", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "372e944cf4c5293ed263fc0aad638c1ccacd91b4850f82fa5744073902b2479c" + "hash": "34f69142f7c4107360407a1ff9de71dd46d273b8fae170757c36249792d898d6" }, { "callStack": { - "function": "runtime.madvise", + "function": "runtime.netpollinit", "callStack": { - "function": "runtime.sysFaultOS", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "runtime.(*mspan).ensureSwept", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "runtime.blockTimerChan", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "runtime.selectgo", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "github.com/cockroachdb/fifo.(*Semaphore).Acquire", "callStack": { - "function": "net/netip.parseIPv6", + "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readBlock", "callStack": { - "function": "net/netip.ParseAddr", + "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readIndex", "callStack": { - "function": "net.parseIP", - "callStack": { - "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" - } + "function": "github.com/cockroachdb/pebble/sstable.(*twoLevelIterator).init" } } } @@ -6095,11 +6829,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5027", + "message": "Potential NOOP Syscall Detected: 5285", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "3768da12af42ec5a0975a5bffe0e74a4c74075471adcb252164300c3f585e7d0" + "hash": "372e944cf4c5293ed263fc0aad638c1ccacd91b4850f82fa5744073902b2479c" }, { "callStack": { @@ -6133,6 +6867,88 @@ "severity": "WARNING", "hash": "37e7eac23474b1e2e2d7577a662f346a62731e33489aede6d864da21a7d82c4a" }, + { + "callStack": { + "function": "runtime.netpollclose", + "callStack": { + "function": "internal/poll.runtime_pollClose", + "callStack": { + "function": "internal/poll.(*FD).destroy", + "callStack": { + "function": "internal/poll.(*FD).decref", + "callStack": { + "function": "internal/poll.(*FD).Close", + "callStack": { + "function": "os.(*file).close", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5208", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "3acae22208fae5cca3754768d8cf65d6c0729de8e0f93eb200bff4f077bb05bf" + }, { "callStack": { "function": "internal/syscall/unix.Openat", @@ -6203,6 +7019,52 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "3b67d9b845672416a12b1f6deeb273ee629a396cd3e35e8989313d209fc5e24d" }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timer).maybeAdd", + "callStack": { + "function": "runtime.(*timer).modify", + "callStack": { + "function": "time.newTimer", + "callStack": { + "function": "time.AfterFunc", + "callStack": { + "function": "crypto/internal/sysrand.Read", + "callStack": { + "function": "crypto/internal/entropy.Depleted", + "callStack": { + "function": "crypto/internal/fips140/drbg.Read", + "callStack": { + "function": "crypto/internal/fips140/drbg.ReadWithReader", + "callStack": { + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P384Point]", + "callStack": { + "function": "crypto/ecdh.init.func5" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5284", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "3b99eebb31343e8c8a00a8685dd6a5e0525bb4971ffebc0912280d367b492881" + }, { "callStack": { "function": "runtime.abort", @@ -6319,25 +7181,34 @@ }, { "callStack": { - "function": "runtime.munmap", + "function": "runtime.netpollinit", "callStack": { - "function": "runtime.(*mheap).sysAlloc", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "runtime.(*mheap).grow", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "runtime.(*mheap).allocSpan", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "runtime.(*mheap).allocManual", + "function": "runtime.(*timer).modify", "callStack": { - "function": "runtime.materializeGCProg", + "function": "time.newTimer", "callStack": { - "function": "runtime.adjustframe", + "function": "time.AfterFunc", "callStack": { - "function": "runtime.copystack", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "runtime.newstack", + "function": "crypto/internal/entropy.Depleted", "callStack": { - "function": "runtime.morestack" + "function": "crypto/internal/fips140/drbg.Read", + "callStack": { + "function": "crypto/internal/fips140/drbg.ReadWithReader", + "callStack": { + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P256Point]", + "callStack": { + "function": "crypto/ecdh.init.func1" + } + } + } } } } @@ -6348,11 +7219,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5011", + "message": "Potential NOOP Syscall Detected: 5285", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "43f820ce606f7dc3e2c2f72a08c577cf930fc317937fc98fe95a6beb4d5385cd" + "hash": "3fa4d4cf151ccbb224d20c5639a72db890cce8eb061595c1b12912252752ed2e" }, { "callStack": { @@ -6660,6 +7531,31 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "49f74413b374aec0e2a88ecc4383a01eba3a7a072d8299d6615926a1e59a0bd6" }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "os.hostname", + "callStack": { + "function": "github.com/getsentry/sentry-go.init" + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "4b45a0d3b963574b33085b22714c41b9333b6ea66a87c8804c6bf91bcb5b3ab8" + }, { "callStack": { "function": "runtime.sysFaultOS", @@ -6938,6 +7834,34 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "5013ea916f3e0f37ec609b3ca053b80c8f7aea0073d0b5a8452135c9fa1d9657" }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "net.open", + "callStack": { + "function": "net.dnsReadConfig", + "callStack": { + "function": "net.(*resolverConfig).init" + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "50977b5d6f2e6939aabf97d35bd06be2c8e037b8a95a766bf84bf5a24798716f" + }, { "callStack": { "function": "syscall.Seek", @@ -7138,53 +8062,43 @@ }, { "callStack": { - "function": "runtime.madvise", - "callStack": { - "function": "runtime.sysFaultOS", - "callStack": { - "function": "runtime.(*sweepLocked).sweep", - "callStack": { - "function": "runtime.(*mspan).ensureSwept", - "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", - "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", - "callStack": { - "function": "net/netip.init" - } - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5027", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "55a9818deba6ae07b23cd1a733f1153a9322e8261c42d806d57f2bf53d3e10be" - }, - { - "callStack": { - "function": "runtime.sysFaultOS", + "function": "runtime.tgkill", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "runtime.signalM", "callStack": { - "function": "runtime.(*mspan).ensureSwept", + "function": "runtime.preemptone", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "runtime.(*gcControllerState).enlistWorker", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "runtime.(*gcWork).put", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "runtime.greyobject", "callStack": { - "function": "net/netip.parseIPv6", + "function": "runtime.scanblock", "callStack": { - "function": "net/netip.ParseAddr", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "net.dnsReadConfig", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "net.(*resolverConfig).init" + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "net/netip.Addr.WithZone", + "callStack": { + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net.ParseCIDR", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + } + } + } + } + } + } } } } @@ -7195,11 +8109,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5010", + "message": "Potential NOOP Syscall Detected: 5225", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "5621edb794dcdbf7099488570eda8cc7ce53bc1c22846740283f2cf2b62f4cd6" + "hash": "571d44d09f33ca7c347a7264ed38248ddc57a352154c84bc37a30c3c1d9733ae" }, { "callStack": { @@ -7274,6 +8188,43 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "58c7d0846cad0dad86558629b0d2e4b582791c7a70ca7d62d8debefa56f024dd" }, + { + "callStack": { + "function": "runtime.madvise", + "callStack": { + "function": "runtime.sysFaultOS", + "callStack": { + "function": "runtime.(*sweepLocked).sweep", + "callStack": { + "function": "runtime.(*mspan).ensureSwept", + "callStack": { + "function": "runtime.addspecial", + "callStack": { + "function": "runtime.getOrAddWeakHandle", + "callStack": { + "function": "weak.runtime_registerWeakPointer", + "callStack": { + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "net/netip.init" + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5027", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "58da141914a72c450ed2fee7151d70e831218b778e4ff47cdda41a085ffb3dce" + }, { "callStack": { "function": "runtime.rtsigprocmask", @@ -7371,25 +8322,37 @@ }, { "callStack": { - "function": "runtime.netpollinit", + "function": "runtime.madvise", "callStack": { - "function": "runtime.netpollGenericInit", + "function": "runtime.sysFaultOS", "callStack": { - "function": "runtime.(*timers).addHeap", + "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "runtime.(*timer).maybeAdd", + "function": "runtime.(*mspan).ensureSwept", "callStack": { - "function": "runtime.blockTimerChan", + "function": "runtime.addspecial", "callStack": { - "function": "runtime.selectgo", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "github.com/cockroachdb/fifo.(*Semaphore).Acquire", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readBlock", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readIndex", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*singleLevelIterator).init" + "function": "net/netip.Addr.WithZone", + "callStack": { + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net.dnsReadConfig", + "callStack": { + "function": "net.(*resolverConfig).init" + } + } + } + } } } } @@ -7400,59 +8363,53 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5285", + "message": "Potential NOOP Syscall Detected: 5027", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "5cc69f83c2213d23e72a0537de6053ce617c416306c4babdd145b54ec252904a" + "hash": "5bf3ee9812d5e67ec04c678dfb7f7c33c410a218bd471d7387da8100e7302f37" }, { "callStack": { - "function": "syscall.Seek", + "function": "syscall.openat", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "os.open", "callStack": { - "function": "os.(*File).seek", + "function": "os.openFileNolog", "callStack": { - "function": "os.(*File).Seek", + "function": "os.OpenFile", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "function": "os.removeAll", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } + "function": "main.main" } } } @@ -7473,27 +8430,36 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "5e8406082c992362e002e27c4246eda6e0b30fe5efa10bcb6379078e582c040b" + "hash": "5c0842a0dde9d3b3fbbd3c882a47a95160007de5d02a42cbbecdd3428169cdf0" }, { "callStack": { - "function": "syscall.fstat", + "function": "runtime.netpollinit", "callStack": { - "function": "syscall.Fstat", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "os.(*File).Stat", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "net.(*file).stat", + "function": "runtime.blockTimerChan", "callStack": { - "function": "net.parseNSSConfFile", + "function": "runtime.selectgo", "callStack": { - "function": "net.(*nsswitchConfig).init" + "function": "github.com/cockroachdb/fifo.(*Semaphore).Acquire", + "callStack": { + "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readBlock", + "callStack": { + "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readIndex", + "callStack": { + "function": "github.com/cockroachdb/pebble/sstable.(*singleLevelIterator).init" + } + } + } } } } @@ -7501,40 +8467,27 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "60ac9fb589d5798b51e940707422b62032cc4e57150d14acc7d785f3cfa83f7f" - }, - { - "callStack": { - "function": "syscall.setrlimit", - "callStack": { - "function": "syscall.init.0" - } - }, - "message": "Potential Incompatible Syscall Detected: 5155", + "message": "Potential NOOP Syscall Detected: 5285", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "644fbf12b2804002a2d7caba2b7d07a15c2446177e3b5c7948c0a81d1e95db57" + "hash": "5cc69f83c2213d23e72a0537de6053ce617c416306c4babdd145b54ec252904a" }, { "callStack": { - "function": "syscall.fstat", + "function": "runtime.netpollclose", "callStack": { - "function": "syscall.Fstat", + "function": "internal/poll.runtime_pollClose", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "internal/poll.(*FD).destroy", "callStack": { - "function": "os.(*File).Stat", + "function": "internal/poll.(*FD).decref", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", + "function": "internal/poll.(*FD).Close", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "os.(*file).close", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { @@ -7550,21 +8503,27 @@ "callStack": { "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } } } } @@ -7587,11 +8546,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "650733d109a11252d2fd65283dd46294d1b74df421858277df8445d152e652b5" + "hash": "5d5fb91095aab1201ccea7fca935381aba1c9efc4f7ff6328a23889ebe43e7d0" }, { "callStack": { @@ -7623,27 +8582,21 @@ "callStack": { "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } + "function": "main.main" } } } @@ -7670,29 +8623,23 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "6591613bae28aa3923e1cad3c6a48a16f45b2a6e1dc5672b9083ccd57efe5978" + "hash": "5e8406082c992362e002e27c4246eda6e0b30fe5efa10bcb6379078e582c040b" }, { "callStack": { - "function": "syscall.stat", + "function": "syscall.fstat", "callStack": { - "function": "syscall.Stat", + "function": "syscall.Fstat", "callStack": { - "function": "os.statNolog", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "os.Stat", + "function": "os.(*File).Stat", "callStack": { - "function": "github.com/prometheus/procfs/internal/fs.NewFS", + "function": "net.(*file).stat", "callStack": { - "function": "github.com/prometheus/procfs.NewFS", + "function": "net.parseNSSConfFile", "callStack": { - "function": "github.com/prometheus/client_golang/prometheus.canCollectProcess", - "callStack": { - "function": "github.com/prometheus/client_golang/prometheus.NewProcessCollector", - "callStack": { - "function": "github.com/prometheus/client_golang/prometheus.init.0" - } - } + "function": "net.(*nsswitchConfig).init" } } } @@ -7700,75 +8647,39 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5004", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "68121fa211c31e59dd5e8e63db1d5aae2ad588efc4a4e6445458df2a00ec3065" + "hash": "60ac9fb589d5798b51e940707422b62032cc4e57150d14acc7d785f3cfa83f7f" }, { "callStack": { - "function": "syscall.Seek", + "function": "runtime.netpollinit", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "os.(*File).seek", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "os.(*File).Seek", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "function": "runtime.(*timer).modify", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", + "function": "time.newTimer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "time.AfterFunc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "crypto/internal/entropy.Depleted", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "crypto/internal/fips140/drbg.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "crypto/internal/fips140/drbg.ReadWithReader", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P256Point]", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } - } - } - } - } + "function": "crypto/ecdh.init.func1" } } } @@ -7782,11 +8693,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", + "message": "Potential NOOP Syscall Detected: 5284", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "68d17da87b6b41b995dd0d53e450e5b6c3889fe905432319e00031e62d6ce1ac" + "hash": "61df4726c7bdb43c60166b99bf77f433071fd05bf4b72e337c174ae6a8b9b379" }, { "callStack": { @@ -7798,19 +8709,28 @@ "callStack": { "function": "runtime.(*mspan).ensureSwept", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "runtime.addspecial", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "net/netip.parseIPv6", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "net/netip.ParseAddr", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "net.dnsReadConfig", + "function": "net/netip.Addr.WithZone", "callStack": { - "function": "net.(*resolverConfig).init" + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net.parseIP", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + } + } + } } } } @@ -7826,49 +8746,68 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "6bf46c0e08cb959ddeea66e0ea7afde9cc1bed6c1aee105b71b0a1122fb3741b" + "hash": "63ad5f1073833907af802ceb358cc4fe729fde749798bd460bbe92711689e775" }, { "callStack": { - "function": "syscall.pread", + "function": "syscall.prlimit1", "callStack": { - "function": "internal/poll.(*FD).Pread", + "function": "syscall.init.0" + } + }, + "message": "Potential NOOP Syscall Detected: 5297", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "64679fb46a08b7cff51ffb3a50f38841abd89894a77ef75dccdbd52170c041dd" + }, + { + "callStack": { + "function": "syscall.fstat", + "callStack": { + "function": "syscall.Fstat", "callStack": { - "function": "os.(*File).ReadAt", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "os.(*File).Stat", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } } } } @@ -7889,27 +8828,27 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5016", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "6c33b48a704c08a751cb38eb2c8666edfa8549c89f41ca8ffb812f5ef873f38e" + "hash": "650733d109a11252d2fd65283dd46294d1b74df421858277df8445d152e652b5" }, { "callStack": { - "function": "syscall.fstat", + "function": "syscall.Seek", "callStack": { - "function": "syscall.Fstat", + "function": "internal/poll.(*FD).Seek", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "os.(*File).seek", "callStack": { - "function": "os.(*File).Stat", + "function": "os.(*File).Seek", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repairIndex", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { @@ -7968,46 +8907,31 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5008", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "6cc1b165d57a66ba1d8b7650f005df98c4ca6bbac7f49b747c5828fe99119377" + "hash": "6591613bae28aa3923e1cad3c6a48a16f45b2a6e1dc5672b9083ccd57efe5978" }, { "callStack": { - "function": "runtime.tgkill", + "function": "syscall.stat", "callStack": { - "function": "runtime.signalM", + "function": "syscall.Stat", "callStack": { - "function": "runtime.preemptone", + "function": "os.statNolog", "callStack": { - "function": "runtime.(*gcControllerState).enlistWorker", + "function": "os.Stat", "callStack": { - "function": "runtime.(*gcWork).put", + "function": "github.com/prometheus/procfs/internal/fs.NewFS", "callStack": { - "function": "runtime.greyobject", + "function": "github.com/prometheus/procfs.NewFS", "callStack": { - "function": "runtime.shade", + "function": "github.com/prometheus/client_golang/prometheus.canCollectProcess", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "github.com/prometheus/client_golang/prometheus.NewProcessCollector", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", - "callStack": { - "function": "net/netip.Addr.WithZone", - "callStack": { - "function": "net/netip.parseIPv6", - "callStack": { - "function": "net/netip.ParseAddr", - "callStack": { - "function": "net.dnsReadConfig", - "callStack": { - "function": "net.(*resolverConfig).init" - } - } - } - } - } + "function": "github.com/prometheus/client_golang/prometheus.init.0" } } } @@ -8017,51 +8941,69 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5225", + "message": "Potential NOOP Syscall Detected: 5004", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "6e8aad265f6ed0d1a7b595d17da2d6e274532d5944e41dace74fefe4e50ac418" + "hash": "68121fa211c31e59dd5e8e63db1d5aae2ad588efc4a4e6445458df2a00ec3065" }, { "callStack": { - "function": "internal/syscall/unix.Openat", + "function": "syscall.Seek", "callStack": { - "function": "os.openDirAt", + "function": "internal/poll.(*FD).Seek", "callStack": { - "function": "os.removeAllFrom", + "function": "os.(*File).seek", "callStack": { - "function": "os.removeAll", + "function": "os.(*File).Seek", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } } } } @@ -8081,54 +9023,29 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5247", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "6f75d2ee907101d2dab7df05ea193eaaac2a15217297b87e0f8145f8aaa63902" - }, - { - "callStack": { - "function": "runtime.rt_sigaction", - "callStack": { - "function": "runtime.sysSigaction", - "callStack": { - "function": "runtime.setsig", - "callStack": { - "function": "runtime.dieFromSignal", - "callStack": { - "function": "runtime.fatalpanic", - "callStack": { - "function": "runtime.gopanic" - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5013", + "message": "Potential NOOP Syscall Detected: 5008", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "7067ccd3479958648b7ed36ff840141a5d10c347e25a0dde8332f984830226e7" + "hash": "68d17da87b6b41b995dd0d53e450e5b6c3889fe905432319e00031e62d6ce1ac" }, { "callStack": { - "function": "runtime.tgkill", + "function": "runtime.madvise", "callStack": { - "function": "runtime.signalM", + "function": "runtime.sysFaultOS", "callStack": { - "function": "runtime.preemptone", + "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "runtime.(*gcControllerState).enlistWorker", + "function": "runtime.(*mspan).ensureSwept", "callStack": { - "function": "runtime.(*gcWork).put", + "function": "runtime.addspecial", "callStack": { - "function": "runtime.greyobject", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "runtime.shade", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { @@ -8138,9 +9055,12 @@ "callStack": { "function": "net/netip.ParseAddr", "callStack": { - "function": "net.ParseCIDR", + "function": "net/netip.ParsePrefix", "callStack": { - "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + "function": "github.com/ethereum/go-ethereum/p2p/netutil.(*Netlist).Add", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/netutil.init.0" + } } } } @@ -8155,57 +9075,60 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5225", + "message": "Potential NOOP Syscall Detected: 5027", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "745f49ded3e62555e3c816f10024386692577542231f06cccd12aba5db756011" + "hash": "6aa82f0cffe817a0a689fb86dbf9117c19975760516cefe10a5aa8223c3ae70a" }, { "callStack": { - "function": "syscall.pread", + "function": "syscall.openat", "callStack": { - "function": "internal/poll.(*FD).Pread", + "function": "os.open", "callStack": { - "function": "os.(*File).ReadAt", + "function": "os.openFileNolog", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).getIndices", + "function": "os.OpenFile", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeHidden", + "function": "os.CreateTemp", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", + "function": "github.com/ethereum/go-ethereum/core/rawdb.copyFrom", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } } } } @@ -8228,59 +9151,53 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5016", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "74c9f22472a0ec9e3e2fb10c274dabaa1cd3ec03e2db7896d5cf5bcfbad485e9" + "hash": "6b9b418f66c079dddbb81bfc664792365c6a54ba078d1a59ff1b2d0071473d0d" }, { "callStack": { - "function": "syscall.Seek", + "function": "syscall.pread", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "internal/poll.(*FD).Pread", "callStack": { - "function": "os.(*File).seek", + "function": "os.(*File).ReadAt", "callStack": { - "function": "os.(*File).Seek", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.decodeV1", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } + "function": "main.main" } } } @@ -8301,57 +9218,63 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", + "message": "Potential NOOP Syscall Detected: 5016", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "7a1ba69114de5c0b45e964d6b2d0765431b1275f620fc064d9dafc11e9053e9d" + "hash": "6c33b48a704c08a751cb38eb2c8666edfa8549c89f41ca8ffb812f5ef873f38e" }, { "callStack": { - "function": "syscall.pread", + "function": "syscall.fstat", "callStack": { - "function": "internal/poll.(*FD).Pread", + "function": "syscall.Fstat", "callStack": { - "function": "os.(*File).ReadAt", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "os.(*File).Stat", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repairIndex", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } } } } @@ -8374,60 +9297,51 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5016", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "7f640b4219905e99b739fbe9ebb89147725e8b15b4f960b567b97d481bda120c" + "hash": "6cc1b165d57a66ba1d8b7650f005df98c4ca6bbac7f49b747c5828fe99119377" }, { "callStack": { - "function": "syscall.pread", + "function": "internal/syscall/unix.Openat", "callStack": { - "function": "internal/poll.(*FD).Pread", + "function": "os.openDirAt", "callStack": { - "function": "os.(*File).ReadAt", + "function": "os.removeAllFrom", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "function": "os.removeAll", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } + "function": "main.main" } } } @@ -8447,60 +9361,82 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5016", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "8016f3c326a9481218a605cdd43925504379e17bc50f3259bb0303504cb11d2d" + "hash": "6f75d2ee907101d2dab7df05ea193eaaac2a15217297b87e0f8145f8aaa63902" }, { "callStack": { - "function": "syscall.fstat", + "function": "runtime.rt_sigaction", "callStack": { - "function": "syscall.Fstat", + "function": "runtime.sysSigaction", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "runtime.setsig", "callStack": { - "function": "os.(*File).Stat", + "function": "runtime.dieFromSignal", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", + "function": "runtime.fatalpanic", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "runtime.gopanic" + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5013", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "7067ccd3479958648b7ed36ff840141a5d10c347e25a0dde8332f984830226e7" + }, + { + "callStack": { + "function": "syscall.pread", + "callStack": { + "function": "internal/poll.(*FD).Pread", + "callStack": { + "function": "os.(*File).ReadAt", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).getIndices", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeHidden", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } + "function": "main.main" } } } @@ -8523,63 +9459,39 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5016", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "80841d36951c8d0ffb6dac454918f46fecf8b2b86b984f7117fcf463fce0b36b" + "hash": "74c9f22472a0ec9e3e2fb10c274dabaa1cd3ec03e2db7896d5cf5bcfbad485e9" }, { "callStack": { - "function": "syscall.stat", + "function": "runtime.netpollinit", "callStack": { - "function": "syscall.Stat", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "os.statNolog", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "os.Stat", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "os.MkdirAll", + "function": "runtime.(*timer).modify", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "time.newTimer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "time.AfterFunc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "crypto/internal/entropy.Depleted", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "crypto/internal/fips140/drbg.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "crypto/internal/fips140/drbg.ReadWithReader", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P521Point]", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } + "function": "crypto/ecdh.init.func9" } } } @@ -8593,27 +9505,27 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5004", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "846e7aeaf1c233e4ad035238f1a0edeb8db309051022d17d5dcc47c21b440e9c" + "hash": "74db47ac09ab7a949018a9cd7691e4471af1115fa51dfd7aaad0c1d321a7bf4a" }, { "callStack": { - "function": "syscall.fstat", + "function": "syscall.Seek", "callStack": { - "function": "syscall.Fstat", + "function": "internal/poll.(*FD).Seek", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "os.(*File).seek", "callStack": { - "function": "os.(*File).Stat", + "function": "os.(*File).Seek", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", + "function": "github.com/ethereum/go-ethereum/core/rawdb.decodeV1", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { @@ -8629,27 +9541,21 @@ "callStack": { "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } + "function": "main.main" } } } @@ -8672,11 +9578,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5008", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "86c0218558e6731a4e6767a80ec389790c1c5d07df4d12f1e91a63979fa35f3e" + "hash": "7a1ba69114de5c0b45e964d6b2d0765431b1275f620fc064d9dafc11e9053e9d" }, { "callStack": { @@ -8686,9 +9592,9 @@ "callStack": { "function": "os.(*File).ReadAt", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { @@ -8749,62 +9655,53 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "86fad8f957e879966363108fc5cc677a05e723235356a5a5e07bfa85c38a61d8" + "hash": "7f640b4219905e99b739fbe9ebb89147725e8b15b4f960b567b97d481bda120c" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "syscall.pread", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "internal/poll.(*FD).Pread", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "os.(*File).ReadAt", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "os.(*file).close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } + "function": "main.main" } } } @@ -8827,158 +9724,60 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "8711689711753e62986a2bc8187106d904d8982581e10a52fe6e9b6c1bb9cd7a" - }, - { - "callStack": { - "function": "runtime.netpollinit", - "callStack": { - "function": "runtime.netpollGenericInit", - "callStack": { - "function": "runtime.(*timers).addHeap", - "callStack": { - "function": "runtime.(*timer).maybeAdd", - "callStack": { - "function": "runtime.blockTimerChan", - "callStack": { - "function": "runtime.chanrecv" - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5285", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "87150bc823da6af413ca16999dd1dcedf7aea6a82a8f69d7174711f9a7948f32" - }, - { - "callStack": { - "function": "runtime.switchToCrashStack0", - "callStack": { - "function": "runtime.switchToCrashStack", - "callStack": { - "function": "runtime.badmorestackg0", - "callStack": { - "function": "runtime.morestack" - } - } - } - }, - "message": "Potential Incompatible Opcode Detected: Opcode: 0x0, Funct: 0x34", - "severity": "WARNING", - "hash": "883a8691edf1bd1778b85ec838fe4069dcb8f40cf8f2e495267cb552a076d1cb" - }, - { - "callStack": { - "function": "runtime.timer_settime", - "callStack": { - "function": "runtime.setThreadCPUProfiler", - "callStack": { - "function": "runtime.execute", - "callStack": { - "function": "runtime.schedule", - "callStack": { - "function": "runtime.goschedImpl", - "callStack": { - "function": "runtime.newstack", - "callStack": { - "function": "runtime.morestack" - } - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5217", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "88ac28e344788a275b36d1274da5c5da8627c6c237849c6a30d93a1227fb0ba0" - }, - { - "callStack": { - "function": "runtime.netpollinit", - "callStack": { - "function": "runtime.netpollGenericInit", - "callStack": { - "function": "runtime.(*timers).addHeap", - "callStack": { - "function": "runtime.(*timer).maybeAdd", - "callStack": { - "function": "runtime.blockTimerChan", - "callStack": { - "function": "runtime.selectgo", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", - "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" - } - } - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5284", + "message": "Potential NOOP Syscall Detected: 5016", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "8aa51f7e3ed081be55b27533e0b997f4aae1fd51fae7a85ec3d51945514fbff2" + "hash": "8016f3c326a9481218a605cdd43925504379e17bc50f3259bb0303504cb11d2d" }, { "callStack": { - "function": "syscall.Seek", + "function": "syscall.fstat", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "syscall.Fstat", "callStack": { - "function": "os.(*File).seek", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "os.(*File).Seek", + "function": "os.(*File).Stat", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } } } } @@ -9001,11 +9800,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "8abd32b30bd33092d21a88a1648a9b808aba0f24313d9ae385c8741b875e694a" + "hash": "80841d36951c8d0ffb6dac454918f46fecf8b2b86b984f7117fcf463fce0b36b" }, { "callStack": { @@ -9017,7 +9816,41 @@ "callStack": { "function": "os.(*File).Stat", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", + "function": "os.readFileContents", + "callStack": { + "function": "os.ReadFile", + "callStack": { + "function": "github.com/tklauser/go-sysconf.readProcFsInt64", + "callStack": { + "function": "github.com/tklauser/go-sysconf.sysconf", + "callStack": { + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5005", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "80b69459a7314f03007310897df1530806c16eb3dbfda582478eb5f830fe3a79" + }, + { + "callStack": { + "function": "syscall.stat", + "callStack": { + "function": "syscall.Stat", + "callStack": { + "function": "os.statNolog", + "callStack": { + "function": "os.Stat", + "callStack": { + "function": "os.MkdirAll", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { @@ -9071,64 +9904,61 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5004", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "8abefb23a2e31c4f6c7e774de8cb638710702c8e269905dcf1902b09a0257c25" + "hash": "846e7aeaf1c233e4ad035238f1a0edeb8db309051022d17d5dcc47c21b440e9c" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "syscall.fstat", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "syscall.Fstat", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "os.(*File).Stat", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", "callStack": { - "function": "os.(*file).close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", "callStack": { - "function": "github.com/gofrs/flock.(*Flock).resetFh", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/gofrs/flock.(*Flock).Unlock", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } + "function": "main.main" } } } @@ -9153,177 +9983,57 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "8c8bcd5c08c7f155c27bcf48b638e8951d4e209b74cf3bec1973eb45bebd74f7" + "hash": "86c0218558e6731a4e6767a80ec389790c1c5d07df4d12f1e91a63979fa35f3e" }, { "callStack": { - "function": "runtime.mincore", + "function": "syscall.pread", "callStack": { - "function": "runtime.sysargs", - "callStack": { - "function": "runtime.args", - "callStack": { - "function": "runtime.rt0_go" - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5026", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "910c6537649b8f5e4b0d22d97b1a09501d041f4d0e2f1270f090bbc14bfdcd78" - }, - { - "callStack": { - "function": "golang.org/x/sys/unix.ioctlPtr", - "callStack": { - "function": "github.com/mattn/go-isatty.IsTerminal", - "callStack": { - "function": "github.com/ethereum/go-ethereum/internal/flags.init" - } - } - }, - "message": "Potential NOOP Syscall Detected: 5015", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "91faa81b28aa37bd1db7826e8325f3fc4045f5b10de73edd4bcf468041d1b154" - }, - { - "callStack": { - "function": "syscall.Seek", - "callStack": { - "function": "internal/poll.(*FD).Seek", - "callStack": { - "function": "os.(*File).seek", - "callStack": { - "function": "os.(*File).Seek", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5008", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "938267f96d5e6bdc026eea3594f07c91bcf4fbef11f037b5a489d7f0ab385a1c" - }, - { - "callStack": { - "function": "syscall.Seek", - "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "internal/poll.(*FD).Pread", "callStack": { - "function": "os.(*File).seek", + "function": "os.(*File).ReadAt", "callStack": { - "function": "os.(*File).Seek", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repairIndex", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } + "function": "main.main" } } } @@ -9346,11 +10056,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", + "message": "Potential NOOP Syscall Detected: 5016", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "9558b381a56a854f8cf462f5c432b03e05de593ccca0f1c9fd465a8b1f2de4f3" + "hash": "86fad8f957e879966363108fc5cc677a05e723235356a5a5e07bfa85c38a61d8" }, { "callStack": { @@ -9366,11 +10076,11 @@ "callStack": { "function": "os.(*file).close", "callStack": { - "function": "os.removeAllFrom", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "os.removeAll", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { @@ -9432,91 +10142,58 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "95e2f4d983ff2b94d4c4cc53cc419f64380f39bcce2035365131d9d371ba185c" + "hash": "8711689711753e62986a2bc8187106d904d8982581e10a52fe6e9b6c1bb9cd7a" }, { "callStack": { - "function": "syscall.readlinkat", + "function": "runtime.netpollinit", "callStack": { - "function": "os.readlink", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "os.executable", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "google.golang.org/protobuf/internal/detrand.binaryHash", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "google.golang.org/protobuf/internal/detrand.init" + "function": "runtime.blockTimerChan", + "callStack": { + "function": "runtime.chanrecv" + } } } } } }, - "message": "Potential NOOP Syscall Detected: 5257", + "message": "Potential NOOP Syscall Detected: 5285", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "96367e880510f907284b9e4f923e64aeff277dc9ab14daade352ecf4d12dfda1" + "hash": "87150bc823da6af413ca16999dd1dcedf7aea6a82a8f69d7174711f9a7948f32" }, { "callStack": { - "function": "syscall.pread", + "function": "runtime.tgkill", "callStack": { - "function": "internal/poll.(*FD).Pread", + "function": "runtime.signalM", "callStack": { - "function": "os.(*File).ReadAt", + "function": "runtime.preemptone", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).getIndices", + "function": "runtime.(*gcControllerState).enlistWorker", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeHidden", + "function": "runtime.(*gcWork).put", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", + "function": "runtime.greyobject", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "runtime.scanblock", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } - } - } - } - } + "function": "net/netip.init" } } } @@ -9529,29 +10206,74 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5016", + "message": "Potential NOOP Syscall Detected: 5225", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "969bdc0f833a197efb1f5f62a92d8aadffffc56abdabb698d0cefe2b6ba2cdf2" + "hash": "87278f937c1952be887e81b8b52f61f3aa64f13310ade09aa23c4d5fbf235b90" }, { "callStack": { - "function": "runtime.tgkill", + "function": "runtime.switchToCrashStack0", "callStack": { - "function": "runtime.signalM", + "function": "runtime.switchToCrashStack", "callStack": { - "function": "runtime.preemptone", + "function": "runtime.badmorestackg0", "callStack": { - "function": "runtime.(*gcControllerState).enlistWorker", - "callStack": { - "function": "runtime.(*gcWork).put", + "function": "runtime.morestack" + } + } + } + }, + "message": "Potential Incompatible Opcode Detected: Opcode: 0x0, Funct: 0x34", + "severity": "WARNING", + "hash": "883a8691edf1bd1778b85ec838fe4069dcb8f40cf8f2e495267cb552a076d1cb" + }, + { + "callStack": { + "function": "runtime.timer_settime", + "callStack": { + "function": "runtime.setThreadCPUProfiler", + "callStack": { + "function": "runtime.execute", + "callStack": { + "function": "runtime.schedule", + "callStack": { + "function": "runtime.goschedImpl", "callStack": { - "function": "runtime.greyobject", + "function": "runtime.newstack", "callStack": { - "function": "runtime.gcMarkTinyAllocs", + "function": "runtime.morestack" + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5217", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "88ac28e344788a275b36d1274da5c5da8627c6c237849c6a30d93a1227fb0ba0" + }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timer).maybeAdd", + "callStack": { + "function": "runtime.blockTimerChan", + "callStack": { + "function": "runtime.selectgo", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", "callStack": { - "function": "runtime.gcStart" + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" } } } @@ -9560,11 +10282,84 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5225", + "message": "Potential NOOP Syscall Detected: 5284", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "999bde27a9d8a4fd4fb2682d3e6af55dbc34eaaa700d82006286f916b29734b6" + "hash": "8aa51f7e3ed081be55b27533e0b997f4aae1fd51fae7a85ec3d51945514fbff2" + }, + { + "callStack": { + "function": "syscall.Seek", + "callStack": { + "function": "internal/poll.(*FD).Seek", + "callStack": { + "function": "os.(*File).seek", + "callStack": { + "function": "os.(*File).Seek", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5008", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "8abd32b30bd33092d21a88a1648a9b808aba0f24313d9ae385c8741b875e694a" }, { "callStack": { @@ -9576,7 +10371,7 @@ "callStack": { "function": "os.(*File).Stat", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { @@ -9634,54 +10429,111 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "99d65104bf964ce82337e1f4947163e4121a826e6b62b2ff1ac803b94bb61c41" + "hash": "8abefb23a2e31c4f6c7e774de8cb638710702c8e269905dcf1902b09a0257c25" }, { "callStack": { - "function": "runtime.sysFaultOS", + "function": "runtime.netpollinit", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "runtime.(*mspan).ensureSwept", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "runtime.(*timer).modify", "callStack": { - "function": "net/netip.init" + "function": "time.newTimer", + "callStack": { + "function": "time.AfterFunc", + "callStack": { + "function": "crypto/internal/sysrand.Read", + "callStack": { + "function": "crypto/internal/entropy.Depleted", + "callStack": { + "function": "crypto/internal/fips140/drbg.init.func1" + } + } + } + } } } } } } }, - "message": "Potential NOOP Syscall Detected: 5010", + "message": "Potential NOOP Syscall Detected: 5284", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "9a2c8d4cbd55d5715688fab1f3860ab98ac636315c8b4311c1c21372e11b6749" + "hash": "8bdbc310bac5de456e009ee897e0331a9ad7a55271b9d2b598963076fd86fc92" }, { "callStack": { - "function": "runtime.sysFaultOS", + "function": "runtime.netpollclose", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "internal/poll.runtime_pollClose", "callStack": { - "function": "runtime.(*mspan).ensureSwept", + "function": "internal/poll.(*FD).destroy", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "internal/poll.(*FD).decref", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "internal/poll.(*FD).Close", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "os.(*file).close", "callStack": { - "function": "net/netip.parseIPv6", + "function": "github.com/gofrs/flock.(*Flock).resetFh", "callStack": { - "function": "net/netip.ParseAddr", + "function": "github.com/gofrs/flock.(*Flock).Unlock", "callStack": { - "function": "net.ParseCIDR", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } } } } @@ -9692,27 +10544,27 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5010", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a0dd4157a3383e75f075526a8357fe5ff98f393b77b718dbedd3ab5318136778" + "hash": "8c8bcd5c08c7f155c27bcf48b638e8951d4e209b74cf3bec1973eb45bebd74f7" }, { "callStack": { - "function": "syscall.stat", + "function": "syscall.openat", "callStack": { - "function": "syscall.Stat", + "function": "os.open", "callStack": { - "function": "os.statNolog", + "function": "os.openFileNolog", "callStack": { - "function": "os.Stat", + "function": "os.OpenFile", "callStack": { - "function": "go/build.(*Context).isDir", + "function": "github.com/shirou/gopsutil/internal/common.ReadLinesOffsetN", "callStack": { - "function": "go/build.(*Context).SrcDirs", + "function": "github.com/shirou/gopsutil/cpu.TimesWithContext", "callStack": { - "function": "github.com/cockroachdb/errors/withstack.init.0" + "function": "github.com/shirou/gopsutil/cpu.init.0" } } } @@ -9720,53 +10572,43 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5004", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a12176ac41b5bd93a685d38d131c2ef27dd60df8747f7ce7e06e068e57056c39" - }, - { - "callStack": { - "function": "syscall.Uname", - "callStack": { - "function": "os.hostname", - "callStack": { - "function": "github.com/getsentry/sentry-go.init" - } - } - }, - "message": "Potential NOOP Syscall Detected: 5061", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a353b6adad737f76ca779d7d450da7bed5d6b4c2865060a1ccc55f09668bd435" + "hash": "8d38f688701e814346859fe44684daab1dc85265ed6085e72bed1fdca7229992" }, { "callStack": { - "function": "runtime.madvise", + "function": "runtime.netpollinit", "callStack": { - "function": "runtime.sysFaultOS", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "runtime.(*mspan).ensureSwept", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "runtime.(*timer).modify", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "time.newTimer", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "time.AfterFunc", "callStack": { - "function": "net/netip.parseIPv6", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "net/netip.ParseAddr", + "function": "crypto/internal/entropy.Depleted", "callStack": { - "function": "net/netip.ParsePrefix", + "function": "crypto/internal/fips140/drbg.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/netutil.(*Netlist).Add", + "function": "crypto/rand.(*reader).Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/netutil.init.0" + "function": "crypto/rand.Read", + "callStack": { + "function": "github.com/ethereum/go-ethereum/rpc.randomIDGenerator", + "callStack": { + "function": "github.com/ethereum/go-ethereum/rpc.init" + } + } } } } @@ -9779,115 +10621,46 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5027", + "message": "Potential NOOP Syscall Detected: 5284", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a421213fb10b6e155c73b7029d75fcc2c3bef475ca2df4418df8bf3cebf749fd" + "hash": "8f93436c43a8d38fd8da49c55ed4c77e76d869e1f5fb5e273e19c48c64cbf47c" }, { "callStack": { - "function": "syscall.stat", + "function": "runtime.mincore", "callStack": { - "function": "syscall.Stat", + "function": "runtime.sysargs", "callStack": { - "function": "os.statNolog", + "function": "runtime.args", "callStack": { - "function": "os.Stat", - "callStack": { - "function": "os.MkdirAll", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } + "function": "runtime.rt0_go" } } } }, - "message": "Potential NOOP Syscall Detected: 5004", + "message": "Potential NOOP Syscall Detected: 5026", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a5e26de4dc775e3a153173af00923e96f007c52a820a2fdbbfeb9435443324a1" + "hash": "910c6537649b8f5e4b0d22d97b1a09501d041f4d0e2f1270f090bbc14bfdcd78" }, { "callStack": { - "function": "runtime.netpollinit", + "function": "golang.org/x/sys/unix.ioctlPtr", "callStack": { - "function": "runtime.netpollGenericInit", + "function": "github.com/mattn/go-isatty.IsTerminal", "callStack": { - "function": "runtime.(*timers).addHeap", - "callStack": { - "function": "runtime.(*timer).maybeAdd", - "callStack": { - "function": "runtime.blockTimerChan", - "callStack": { - "function": "runtime.selectgo", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", - "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" - } - } - } - } - } + "function": "github.com/ethereum/go-ethereum/internal/flags.init" } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5015", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a691580312a2dafa6355592442364e3710dad59b8753aa1dc416c19ccf9efafd" + "hash": "91faa81b28aa37bd1db7826e8325f3fc4045f5b10de73edd4bcf468041d1b154" }, { "callStack": { @@ -9901,44 +10674,41 @@ "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } + "function": "main.main" } } } @@ -9966,25 +10736,34 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a708c5d9b482361b71db57a473a47652c8b04a73306664208c98e45cd1349cc8" + "hash": "938267f96d5e6bdc026eea3594f07c91bcf4fbef11f037b5a489d7f0ab385a1c" }, { "callStack": { - "function": "runtime.timer_delete", + "function": "runtime.munmap", "callStack": { - "function": "runtime.setThreadCPUProfiler", + "function": "runtime.(*mheap).sysAlloc", "callStack": { - "function": "runtime.execute", + "function": "runtime.(*mheap).grow", "callStack": { - "function": "runtime.schedule", + "function": "runtime.(*mheap).allocSpan", "callStack": { - "function": "runtime.mstart1", + "function": "runtime.(*mheap).allocManual", "callStack": { - "function": "runtime.mstart0", + "function": "runtime.stackpoolalloc", "callStack": { - "function": "runtime.mstart", + "function": "runtime.stackcacherefill", "callStack": { - "function": "runtime.rt0_go" + "function": "runtime.stackalloc", + "callStack": { + "function": "runtime.copystack", + "callStack": { + "function": "runtime.newstack", + "callStack": { + "function": "runtime.morestack" + } + } + } } } } @@ -9993,25 +10772,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5220", + "message": "Potential NOOP Syscall Detected: 5011", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a72c3b7f7b7556c02893b7f8f082763df624447615899016899a2ede0c0edc79" - }, - { - "callStack": { - "function": "runtime.abort", - "callStack": { - "function": "gosave_systemstack_switch", - "callStack": { - "function": "runtime.systemstack" - } - } - }, - "message": "Potential Incompatible Opcode Detected: Opcode: 0x0, Funct: 0x34", - "severity": "WARNING", - "hash": "a73e2cf3acb4a590cac6957ac0cce13e0004df4600dbc3e39db77ccde6dcbbde" + "hash": "9396290fd51ef0ab6c042a8c4ed98c854fb90da31ba797bef9ba9ecea67779af" }, { "callStack": { @@ -10025,11 +10790,11 @@ "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repairIndex", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { @@ -10045,21 +10810,27 @@ "callStack": { "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } } } } @@ -10087,25 +10858,61 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "a9ae2d415750950a83b403f8d9faeb792c6da8de4e68ab80ec3346ac9b9ec06a" + "hash": "9558b381a56a854f8cf462f5c432b03e05de593ccca0f1c9fd465a8b1f2de4f3" }, { "callStack": { - "function": "runtime.timer_create", + "function": "syscall.openat", "callStack": { - "function": "runtime.setThreadCPUProfiler", + "function": "os.open", "callStack": { - "function": "runtime.execute", + "function": "os.openFileNolog", "callStack": { - "function": "runtime.schedule", + "function": "os.OpenFile", "callStack": { - "function": "runtime.mstart1", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "runtime.mstart0", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "runtime.mstart", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "runtime.rt0_go" + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } } } } @@ -10114,11 +10921,1500 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5216", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "abc4e7611c29ef010fbe94f3dd65dd39576c5853582b424c48d401c2042828cf" + "hash": "95ad609311f457afe9d15e84f37a76977d19a211801c8004d76f6c3b8860f819" + }, + { + "callStack": { + "function": "runtime.netpollclose", + "callStack": { + "function": "internal/poll.runtime_pollClose", + "callStack": { + "function": "internal/poll.(*FD).destroy", + "callStack": { + "function": "internal/poll.(*FD).decref", + "callStack": { + "function": "internal/poll.(*FD).Close", + "callStack": { + "function": "os.(*file).close", + "callStack": { + "function": "os.removeAllFrom", + "callStack": { + "function": "os.removeAll", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5208", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "95e2f4d983ff2b94d4c4cc53cc419f64380f39bcce2035365131d9d371ba185c" + }, + { + "callStack": { + "function": "syscall.readlinkat", + "callStack": { + "function": "os.readlink", + "callStack": { + "function": "os.executable", + "callStack": { + "function": "google.golang.org/protobuf/internal/detrand.binaryHash", + "callStack": { + "function": "google.golang.org/protobuf/internal/detrand.init" + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5257", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "96367e880510f907284b9e4f923e64aeff277dc9ab14daade352ecf4d12dfda1" + }, + { + "callStack": { + "function": "syscall.pread", + "callStack": { + "function": "internal/poll.(*FD).Pread", + "callStack": { + "function": "os.(*File).ReadAt", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).getIndices", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeHidden", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5016", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "969bdc0f833a197efb1f5f62a92d8aadffffc56abdabb698d0cefe2b6ba2cdf2" + }, + { + "callStack": { + "function": "runtime.tgkill", + "callStack": { + "function": "runtime.signalM", + "callStack": { + "function": "runtime.preemptone", + "callStack": { + "function": "runtime.(*gcControllerState).enlistWorker", + "callStack": { + "function": "runtime.(*gcWork).put", + "callStack": { + "function": "runtime.greyobject", + "callStack": { + "function": "runtime.scanblock", + "callStack": { + "function": "runtime.getOrAddWeakHandle", + "callStack": { + "function": "weak.runtime_registerWeakPointer", + "callStack": { + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "net/netip.Addr.WithZone", + "callStack": { + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net.parseIP", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5225", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "97dfbb0bc343ead69931e67e17ef8db2cf7fcb0fce22dc61b8482dce9cd98c89" + }, + { + "callStack": { + "function": "runtime.tgkill", + "callStack": { + "function": "runtime.signalM", + "callStack": { + "function": "runtime.preemptone", + "callStack": { + "function": "runtime.(*gcControllerState).enlistWorker", + "callStack": { + "function": "runtime.(*gcWork).put", + "callStack": { + "function": "runtime.greyobject", + "callStack": { + "function": "runtime.gcMarkTinyAllocs", + "callStack": { + "function": "runtime.gcStart" + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5225", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "999bde27a9d8a4fd4fb2682d3e6af55dbc34eaaa700d82006286f916b29734b6" + }, + { + "callStack": { + "function": "syscall.fstat", + "callStack": { + "function": "syscall.Fstat", + "callStack": { + "function": "internal/poll.(*FD).Fstat", + "callStack": { + "function": "os.(*File).Stat", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5005", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "99d65104bf964ce82337e1f4947163e4121a826e6b62b2ff1ac803b94bb61c41" + }, + { + "callStack": { + "function": "runtime.sysFaultOS", + "callStack": { + "function": "runtime.(*sweepLocked).sweep", + "callStack": { + "function": "runtime.(*mspan).ensureSwept", + "callStack": { + "function": "runtime.addspecial", + "callStack": { + "function": "runtime.getOrAddWeakHandle", + "callStack": { + "function": "weak.runtime_registerWeakPointer", + "callStack": { + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "net/netip.Addr.WithZone", + "callStack": { + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net/netip.ParsePrefix", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/netutil.(*Netlist).Add", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/netutil.init.0" + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5010", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "9b985e06e1eebf8f65e5fde4a4a7438ed5c6103b264586dcfc592172a6d7e8b7" + }, + { + "callStack": { + "function": "runtime.sysFaultOS", + "callStack": { + "function": "runtime.(*sweepLocked).sweep", + "callStack": { + "function": "runtime.(*mspan).ensureSwept", + "callStack": { + "function": "runtime.addspecial", + "callStack": { + "function": "runtime.getOrAddWeakHandle", + "callStack": { + "function": "weak.runtime_registerWeakPointer", + "callStack": { + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "net/netip.Addr.WithZone", + "callStack": { + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net.dnsReadConfig", + "callStack": { + "function": "net.(*resolverConfig).init" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5010", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "9ece0b83c15b143644815665b4b5c157a1a7c015bab4c0e2191e67344c4b816d" + }, + { + "callStack": { + "function": "syscall.stat", + "callStack": { + "function": "syscall.Stat", + "callStack": { + "function": "os.statNolog", + "callStack": { + "function": "os.Stat", + "callStack": { + "function": "go/build.(*Context).isDir", + "callStack": { + "function": "go/build.(*Context).SrcDirs", + "callStack": { + "function": "github.com/cockroachdb/errors/withstack.init.0" + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5004", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a12176ac41b5bd93a685d38d131c2ef27dd60df8747f7ce7e06e068e57056c39" + }, + { + "callStack": { + "function": "runtime.sysFaultOS", + "callStack": { + "function": "runtime.(*sweepLocked).sweep", + "callStack": { + "function": "runtime.(*mspan).ensureSwept", + "callStack": { + "function": "runtime.addspecial", + "callStack": { + "function": "runtime.getOrAddWeakHandle", + "callStack": { + "function": "weak.runtime_registerWeakPointer", + "callStack": { + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "callStack": { + "function": "net/netip.init" + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5010", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a21d7e83840c2e1fb4492821299b10813c271579433c377aee7580edf44eb380" + }, + { + "callStack": { + "function": "syscall.Uname", + "callStack": { + "function": "os.hostname", + "callStack": { + "function": "github.com/getsentry/sentry-go.init" + } + } + }, + "message": "Potential NOOP Syscall Detected: 5061", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a353b6adad737f76ca779d7d450da7bed5d6b4c2865060a1ccc55f09668bd435" + }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "os.removeAll", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a40f3abcf2f0adbb20cdc116cb32541c958bc8a3b3f1f5c251d2e656f6e4f546" + }, + { + "callStack": { + "function": "runtime.netpollclose", + "callStack": { + "function": "internal/poll.runtime_pollClose", + "callStack": { + "function": "internal/poll.(*FD).destroy", + "callStack": { + "function": "internal/poll.(*FD).decref", + "callStack": { + "function": "internal/poll.(*FD).Close", + "callStack": { + "function": "os.(*file).close", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5208", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a486685e2cb8b25207076292e95c3f04159d824d561cfb0dae8b7b16daf67f40" + }, + { + "callStack": { + "function": "syscall.stat", + "callStack": { + "function": "syscall.Stat", + "callStack": { + "function": "os.statNolog", + "callStack": { + "function": "os.Stat", + "callStack": { + "function": "os.MkdirAll", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5004", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a5e26de4dc775e3a153173af00923e96f007c52a820a2fdbbfeb9435443324a1" + }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timer).maybeAdd", + "callStack": { + "function": "runtime.blockTimerChan", + "callStack": { + "function": "runtime.selectgo", + "callStack": { + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "callStack": { + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5208", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a691580312a2dafa6355592442364e3710dad59b8753aa1dc416c19ccf9efafd" + }, + { + "callStack": { + "function": "syscall.Seek", + "callStack": { + "function": "internal/poll.(*FD).Seek", + "callStack": { + "function": "os.(*File).seek", + "callStack": { + "function": "os.(*File).Seek", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5008", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a708c5d9b482361b71db57a473a47652c8b04a73306664208c98e45cd1349cc8" + }, + { + "callStack": { + "function": "runtime.timer_delete", + "callStack": { + "function": "runtime.setThreadCPUProfiler", + "callStack": { + "function": "runtime.execute", + "callStack": { + "function": "runtime.schedule", + "callStack": { + "function": "runtime.mstart1", + "callStack": { + "function": "runtime.mstart0", + "callStack": { + "function": "runtime.mstart", + "callStack": { + "function": "runtime.rt0_go" + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5220", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a72c3b7f7b7556c02893b7f8f082763df624447615899016899a2ede0c0edc79" + }, + { + "callStack": { + "function": "runtime.abort", + "callStack": { + "function": "gosave_systemstack_switch", + "callStack": { + "function": "runtime.systemstack" + } + } + }, + "message": "Potential Incompatible Opcode Detected: Opcode: 0x0, Funct: 0x34", + "severity": "WARNING", + "hash": "a73e2cf3acb4a590cac6957ac0cce13e0004df4600dbc3e39db77ccde6dcbbde" + }, + { + "callStack": { + "function": "syscall.Seek", + "callStack": { + "function": "internal/poll.(*FD).Seek", + "callStack": { + "function": "os.(*File).seek", + "callStack": { + "function": "os.(*File).Seek", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5008", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "a9ae2d415750950a83b403f8d9faeb792c6da8de4e68ab80ec3346ac9b9ec06a" + }, + { + "callStack": { + "function": "runtime.timer_create", + "callStack": { + "function": "runtime.setThreadCPUProfiler", + "callStack": { + "function": "runtime.execute", + "callStack": { + "function": "runtime.schedule", + "callStack": { + "function": "runtime.mstart1", + "callStack": { + "function": "runtime.mstart0", + "callStack": { + "function": "runtime.mstart", + "callStack": { + "function": "runtime.rt0_go" + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5216", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "abc4e7611c29ef010fbe94f3dd65dd39576c5853582b424c48d401c2042828cf" + }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timers).take", + "callStack": { + "function": "runtime.(*p).destroy", + "callStack": { + "function": "runtime.procresize", + "callStack": { + "function": "runtime.schedinit", + "callStack": { + "function": "runtime.rt0_go" + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5284", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "ac0acfb41799809225c9cde1de18aba98ffdaebaa9307327283c5d200b0f7b58" + }, + { + "callStack": { + "function": "runtime.timer_create", + "callStack": { + "function": "runtime.setThreadCPUProfiler", + "callStack": { + "function": "runtime.execute", + "callStack": { + "function": "runtime.schedule", + "callStack": { + "function": "runtime.goschedImpl", + "callStack": { + "function": "runtime.newstack", + "callStack": { + "function": "runtime.morestack" + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5216", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "ac3f2514f998ca59a90f9ae21eeac3e91ec4122074b42e36355c807b8232c3a5" + }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "net.open", + "callStack": { + "function": "net.parseNSSConfFile", + "callStack": { + "function": "net.(*nsswitchConfig).init" + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "ac6421a533131234382f56d6432ab25a26d93c6d03c470ffe1d55108065fa8fa" + }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timer).maybeAdd", + "callStack": { + "function": "runtime.blockTimerChan", + "callStack": { + "function": "runtime.selectgo", + "callStack": { + "function": "github.com/cockroachdb/fifo.(*Semaphore).Acquire", + "callStack": { + "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readBlock", + "callStack": { + "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readIndex", + "callStack": { + "function": "github.com/cockroachdb/pebble/sstable.(*singleLevelIterator).init" + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5284", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "acfd1c7beebf088efe2f6877a649f1582be3af18984c08f56ed1e55630397ee8" + }, + { + "callStack": { + "function": "syscall.fstat", + "callStack": { + "function": "syscall.Fstat", + "callStack": { + "function": "internal/poll.(*FD).Fstat", + "callStack": { + "function": "os.(*File).Stat", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5005", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "adf25d6e43c02d54a82109c95a06b07a614460ee6bb9d6158fe16b5c56257146" + }, + { + "callStack": { + "function": "runtime.munmap", + "callStack": { + "function": "runtime.sysFree", + "callStack": { + "function": "runtime.(*traceRegionAlloc).drop", + "callStack": { + "function": "runtime.(*traceMap).reset", + "callStack": { + "function": "runtime.(*traceStackTable).dump", + "callStack": { + "function": "runtime.traceAdvance", + "callStack": { + "function": "runtime.gopanic" + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5011", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "af2aaef20b439991356bfbd3373d67326fa76728bb9eb4d582ede077dd3c5ed2" + }, + { + "callStack": { + "function": "runtime.netpollclose", + "callStack": { + "function": "internal/poll.runtime_pollClose", + "callStack": { + "function": "internal/poll.(*FD).destroy", + "callStack": { + "function": "internal/poll.(*FD).decref", + "callStack": { + "function": "internal/poll.(*FD).Close", + "callStack": { + "function": "os.(*file).close", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5208", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "b017f914607aead27c13cb84dde8d7878324426a7e5bfe675f78b01ea19294fc" + }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timers).take", + "callStack": { + "function": "runtime.(*p).destroy", + "callStack": { + "function": "runtime.procresize", + "callStack": { + "function": "runtime.schedinit", + "callStack": { + "function": "runtime.rt0_go" + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5285", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "b2c474a2b17e727e61438a03388c628428fccb788724919cb730454782a06291" + }, + { + "callStack": { + "function": "runtime.netpollclose", + "callStack": { + "function": "internal/poll.runtime_pollClose", + "callStack": { + "function": "internal/poll.(*FD).destroy", + "callStack": { + "function": "internal/poll.(*FD).decref", + "callStack": { + "function": "internal/poll.(*FD).Close", + "callStack": { + "function": "os.(*file).close", + "callStack": { + "function": "github.com/gofrs/flock.(*Flock).resetFh", + "callStack": { + "function": "github.com/gofrs/flock.(*Flock).Unlock", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5208", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "b51d3f1ff926563ad6cda4d625444b22c19a1b0a88677169873182df0f147907" + }, + { + "callStack": { + "function": "syscall.Seek", + "callStack": { + "function": "internal/poll.(*FD).Seek", + "callStack": { + "function": "os.(*File).seek", + "callStack": { + "function": "os.(*File).Seek", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5008", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "b54b1cdac0dce3c02378c79e2fd5ea2c99b53648f9c7918b52383f2b5ad4dc20" }, { "callStack": { @@ -10128,15 +12424,15 @@ "callStack": { "function": "runtime.(*timers).addHeap", "callStack": { - "function": "runtime.(*timers).take", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "runtime.(*p).destroy", + "function": "runtime.blockTimerChan", "callStack": { - "function": "runtime.procresize", + "function": "runtime.selectgo", "callStack": { - "function": "runtime.schedinit", + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", "callStack": { - "function": "runtime.rt0_go" + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" } } } @@ -10145,27 +12441,30 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5284", + "message": "Potential NOOP Syscall Detected: 5285", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "ac0acfb41799809225c9cde1de18aba98ffdaebaa9307327283c5d200b0f7b58" + "hash": "b726c684145b290d0039ee9f525cfeda00d1743da1bfd59f85236cef26a35f52" }, { "callStack": { - "function": "runtime.timer_create", + "function": "runtime.madvise", "callStack": { - "function": "runtime.setThreadCPUProfiler", + "function": "runtime.sysFaultOS", "callStack": { - "function": "runtime.execute", + "function": "runtime.(*mspan).setUserArenaChunkToFault", "callStack": { - "function": "runtime.schedule", + "function": "runtime.gcMarkTermination", "callStack": { - "function": "runtime.goschedImpl", + "function": "runtime.gcMarkDone", "callStack": { - "function": "runtime.newstack", + "function": "runtime.gcAssistAlloc", "callStack": { - "function": "runtime.morestack" + "function": "runtime.deductAssistCredit", + "callStack": { + "function": "runtime.mallocgc" + } } } } @@ -10173,33 +12472,54 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5216", + "message": "Potential NOOP Syscall Detected: 5027", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "ac3f2514f998ca59a90f9ae21eeac3e91ec4122074b42e36355c807b8232c3a5" + "hash": "bbd56d89ff585b4aa0778529382c8309b4b9c4fc915e695582e02cce8a15cd5c" }, { "callStack": { - "function": "runtime.netpollinit", + "function": "runtime.sysFaultOS", "callStack": { - "function": "runtime.netpollGenericInit", + "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "runtime.(*timers).addHeap", + "function": "runtime.(*mspan).ensureSwept", "callStack": { - "function": "runtime.(*timer).maybeAdd", + "function": "runtime.addspecial", "callStack": { - "function": "runtime.blockTimerChan", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "runtime.selectgo", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "github.com/cockroachdb/fifo.(*Semaphore).Acquire", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readBlock", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readIndex", + "function": "net/netip.Addr.WithZone", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*singleLevelIterator).init" + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net/url.parseHost", + "callStack": { + "function": "net/url.parseAuthority", + "callStack": { + "function": "net/url.parse", + "callStack": { + "function": "net/url.Parse", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.parseProxy", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + } + } + } + } + } + } + } } } } @@ -10210,60 +12530,57 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5284", + "message": "Potential NOOP Syscall Detected: 5010", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "acfd1c7beebf088efe2f6877a649f1582be3af18984c08f56ed1e55630397ee8" + "hash": "bd5c816852b743da885ef53a91cd5637f528aa14a6530498522503aab2fa1dff" }, { "callStack": { - "function": "syscall.fstat", + "function": "syscall.Seek", "callStack": { - "function": "syscall.Fstat", + "function": "internal/poll.(*FD).Seek", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "os.(*File).seek", "callStack": { - "function": "os.(*File).Stat", + "function": "os.(*File).Seek", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } + "function": "main.main" } } } @@ -10286,27 +12603,27 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5008", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "adf25d6e43c02d54a82109c95a06b07a614460ee6bb9d6158fe16b5c56257146" + "hash": "bd7035f1a7daeb997eaebc11230534372ab38e47e67facbae9a3403c7e0dc312" }, { "callStack": { - "function": "runtime.munmap", + "function": "runtime.sysFaultOS", "callStack": { - "function": "runtime.sysFree", + "function": "runtime.(*mspan).setUserArenaChunkToFault", "callStack": { - "function": "runtime.(*traceRegionAlloc).drop", + "function": "runtime.gcMarkTermination", "callStack": { - "function": "runtime.(*traceMap).reset", + "function": "runtime.gcMarkDone", "callStack": { - "function": "runtime.(*traceStackTable).dump", + "function": "runtime.gcAssistAlloc", "callStack": { - "function": "runtime.traceAdvance", + "function": "runtime.deductAssistCredit", "callStack": { - "function": "runtime.gopanic" + "function": "runtime.mallocgc" } } } @@ -10314,60 +12631,57 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5011", + "message": "Potential NOOP Syscall Detected: 5010", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "af2aaef20b439991356bfbd3373d67326fa76728bb9eb4d582ede077dd3c5ed2" + "hash": "bfb477a623cec0f521546bc71fa13418416ca4e67da7386bac3abe74d05f310e" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "syscall.Seek", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "internal/poll.(*FD).Seek", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "os.(*File).seek", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "os.(*File).Seek", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", "callStack": { - "function": "os.(*file).close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } + "function": "main.main" } } } @@ -10390,27 +12704,27 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5008", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "b017f914607aead27c13cb84dde8d7878324426a7e5bfe675f78b01ea19294fc" + "hash": "bfd69b98c1dee975d971b7d2122df753827128648013c1bde810deb2792c3b39" }, { "callStack": { - "function": "runtime.netpollinit", + "function": "internal/runtime/syscall.EpollWait", "callStack": { - "function": "runtime.netpollGenericInit", + "function": "runtime.netpoll", "callStack": { - "function": "runtime.(*timers).addHeap", + "function": "runtime.findRunnable", "callStack": { - "function": "runtime.(*timers).take", + "function": "runtime.schedule", "callStack": { - "function": "runtime.(*p).destroy", + "function": "runtime.mstart1", "callStack": { - "function": "runtime.procresize", + "function": "runtime.mstart0", "callStack": { - "function": "runtime.schedinit", + "function": "runtime.mstart", "callStack": { "function": "runtime.rt0_go" } @@ -10421,36 +12735,33 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5285", + "message": "Potential NOOP Syscall Detected: 5272", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "b2c474a2b17e727e61438a03388c628428fccb788724919cb730454782a06291" + "hash": "c3a4b8c7c45435647ebbbbbaf31cd3dace13400a33ee87d858301f4420a578a6" }, { "callStack": { - "function": "runtime.madvise", + "function": "runtime.netpollinit", "callStack": { - "function": "runtime.sysFaultOS", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "runtime.(*mspan).ensureSwept", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "runtime.blockTimerChan", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "runtime.selectgo", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "github.com/cockroachdb/fifo.(*Semaphore).Acquire", "callStack": { - "function": "net/netip.parseIPv6", + "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readBlock", "callStack": { - "function": "net/netip.ParseAddr", + "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readIndex", "callStack": { - "function": "net.ParseCIDR", - "callStack": { - "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" - } + "function": "github.com/cockroachdb/pebble/sstable.(*singleLevelIterator).init" } } } @@ -10461,63 +12772,76 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5027", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "b328ee40de012bf87181591dfaf037c1485ab12d38a12e8b4db0af414a805ed6" + "hash": "c3d710c9685cafb194d2d38edf4e04f8faeebc8278022d85fc76ae9c575f9abe" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "github.com/tklauser/numcpus.getFromCPUAffinity", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "github.com/tklauser/numcpus.getOnline", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "github.com/tklauser/go-sysconf.getNprocsSysfs", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "github.com/tklauser/go-sysconf.getNprocs", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/tklauser/go-sysconf.sysconf", "callStack": { - "function": "os.(*file).close", + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5196", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "c428b3062d993c6a2273e4c125c84a2605298bfb3874ca55b8117ff517a639b0" + }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/gofrs/flock.(*Flock).resetFh", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/gofrs/flock.(*Flock).Unlock", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } + "function": "main.main" } } } @@ -10537,67 +12861,103 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "b51d3f1ff926563ad6cda4d625444b22c19a1b0a88677169873182df0f147907" + "hash": "c598fdb50a89f73da79e56f3568ce2bb7bbe739ae693ba55903565992c5108f0" }, { "callStack": { - "function": "syscall.Seek", + "function": "runtime.madvise", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "runtime.sysHugePageOS", "callStack": { - "function": "os.(*File).seek", + "function": "runtime.(*mheap).sysAlloc", "callStack": { - "function": "os.(*File).Seek", + "function": "runtime.(*mheap).grow", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "function": "runtime.(*mheap).allocSpan", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", + "function": "runtime.(*mheap).allocManual", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", + "function": "runtime.stackpoolalloc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "runtime.stackcacherefill", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "runtime.stackalloc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "runtime.schedinit", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "runtime.rt0_go" + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5027", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "c833819300b20e58fab8b0489dd83c103131eb2cefa5d569f7daf768ad08110e" + }, + { + "callStack": { + "function": "runtime.morestack" + }, + "message": "Potential Incompatible Opcode Detected: Opcode: 0x0, Funct: 0x34", + "severity": "WARNING", + "hash": "c88c2a55a8da3c10dc9464788654a0b0f511c5535740e1754efb7228717efeff" + }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } + "function": "main.main" } } } @@ -10619,11 +12979,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "b54b1cdac0dce3c02378c79e2fd5ea2c99b53648f9c7918b52383f2b5ad4dc20" + "hash": "c8fed0d28eed434d2224d405eeac6c4cd4aca571dd36c1e7dfcded508305ca15" }, { "callStack": { @@ -10637,42 +12997,51 @@ "callStack": { "function": "runtime.blockTimerChan", "callStack": { - "function": "runtime.selectgo", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", - "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" - } - } + "function": "runtime.chanrecv" } } } } } }, - "message": "Potential NOOP Syscall Detected: 5285", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "b726c684145b290d0039ee9f525cfeda00d1743da1bfd59f85236cef26a35f52" + "hash": "c97485e9085b1897d18a220e82037f7396ab045ab9d8dd1033ae1b21207f8c5a" }, { "callStack": { - "function": "runtime.madvise", + "function": "runtime.netpollinit", "callStack": { - "function": "runtime.sysFaultOS", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "runtime.(*mspan).setUserArenaChunkToFault", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "runtime.gcMarkTermination", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "runtime.gcMarkDone", + "function": "runtime.(*timer).modify", "callStack": { - "function": "runtime.gcAssistAlloc", + "function": "time.newTimer", "callStack": { - "function": "runtime.deductAssistCredit", + "function": "time.AfterFunc", "callStack": { - "function": "runtime.mallocgc" + "function": "crypto/internal/sysrand.Read", + "callStack": { + "function": "crypto/internal/entropy.Depleted", + "callStack": { + "function": "crypto/internal/fips140/drbg.Read", + "callStack": { + "function": "crypto/internal/fips140/drbg.ReadWithReader", + "callStack": { + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P256Point]", + "callStack": { + "function": "crypto/ecdh.init.func1" + } + } + } + } + } } } } @@ -10681,57 +13050,60 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5027", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "bbd56d89ff585b4aa0778529382c8309b4b9c4fc915e695582e02cce8a15cd5c" + "hash": "cd1b9ed3cad545d2fa6cbaf9742366aa587a89b45eeda8442edf677f1aed98de" }, { "callStack": { - "function": "syscall.Seek", + "function": "syscall.pread", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "internal/poll.(*FD).Pread", "callStack": { - "function": "os.(*File).seek", + "function": "os.(*File).ReadAt", "callStack": { - "function": "os.(*File).Seek", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).getIndices", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeHidden", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).doSync", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } } } } @@ -10754,55 +13126,27 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "bd7035f1a7daeb997eaebc11230534372ab38e47e67facbae9a3403c7e0dc312" - }, - { - "callStack": { - "function": "runtime.sysFaultOS", - "callStack": { - "function": "runtime.(*mspan).setUserArenaChunkToFault", - "callStack": { - "function": "runtime.gcMarkTermination", - "callStack": { - "function": "runtime.gcMarkDone", - "callStack": { - "function": "runtime.gcAssistAlloc", - "callStack": { - "function": "runtime.deductAssistCredit", - "callStack": { - "function": "runtime.mallocgc" - } - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5010", + "message": "Potential NOOP Syscall Detected: 5016", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "bfb477a623cec0f521546bc71fa13418416ca4e67da7386bac3abe74d05f310e" + "hash": "cdc85b076baeb732ebe46810a7798301c569410870a3d1842cdca42c8152e691" }, { "callStack": { - "function": "syscall.Seek", + "function": "syscall.fstat", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "syscall.Fstat", "callStack": { - "function": "os.(*File).seek", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "os.(*File).Seek", + "function": "os.(*File).Stat", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { @@ -10818,21 +13162,27 @@ "callStack": { "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } } } } @@ -10855,64 +13205,42 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "bfd69b98c1dee975d971b7d2122df753827128648013c1bde810deb2792c3b39" - }, - { - "callStack": { - "function": "internal/runtime/syscall.EpollWait", - "callStack": { - "function": "runtime.netpoll", - "callStack": { - "function": "runtime.findRunnable", - "callStack": { - "function": "runtime.schedule", - "callStack": { - "function": "runtime.mstart1", - "callStack": { - "function": "runtime.mstart0", - "callStack": { - "function": "runtime.mstart", - "callStack": { - "function": "runtime.rt0_go" - } - } - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5272", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "c3a4b8c7c45435647ebbbbbaf31cd3dace13400a33ee87d858301f4420a578a6" + "hash": "cfbc210c473ebdf8707a38e6b9bbaddf03d302206833b98113d4976220bca27b" }, { "callStack": { - "function": "runtime.netpollinit", + "function": "syscall.fstat", "callStack": { - "function": "runtime.netpollGenericInit", + "function": "syscall.Fstat", "callStack": { - "function": "runtime.(*timers).addHeap", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "runtime.(*timer).maybeAdd", + "function": "os.(*File).Stat", "callStack": { - "function": "runtime.blockTimerChan", + "function": "os.readFileContents", "callStack": { - "function": "runtime.selectgo", + "function": "os.ReadFile", "callStack": { - "function": "github.com/cockroachdb/fifo.(*Semaphore).Acquire", + "function": "github.com/tklauser/numcpus.readCPURange", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readBlock", + "function": "github.com/tklauser/numcpus.getOnline", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*Reader).readIndex", + "function": "github.com/tklauser/go-sysconf.getNprocsSysfs", "callStack": { - "function": "github.com/cockroachdb/pebble/sstable.(*singleLevelIterator).init" + "function": "github.com/tklauser/go-sysconf.getNprocs", + "callStack": { + "function": "github.com/tklauser/go-sysconf.getNprocsConf", + "callStack": { + "function": "github.com/tklauser/go-sysconf.sysconf", + "callStack": { + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } + } } } } @@ -10923,138 +13251,88 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "c3d710c9685cafb194d2d38edf4e04f8faeebc8278022d85fc76ae9c575f9abe" - }, - { - "callStack": { - "function": "github.com/tklauser/numcpus.getFromCPUAffinity", - "callStack": { - "function": "github.com/tklauser/numcpus.getOnline", - "callStack": { - "function": "github.com/tklauser/go-sysconf.getNprocsSysfs", - "callStack": { - "function": "github.com/tklauser/go-sysconf.getNprocs", - "callStack": { - "function": "github.com/tklauser/go-sysconf.sysconf", - "callStack": { - "function": "github.com/shirou/gopsutil/cpu.init.1" - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5196", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "c428b3062d993c6a2273e4c125c84a2605298bfb3874ca55b8117ff517a639b0" + "hash": "d2b3d2fbb5ab44eeed968132d7b147e04204b525bb5402883c398c602701dad9" }, { "callStack": { - "function": "runtime.madvise", + "function": "runtime.sysFaultOS", "callStack": { - "function": "runtime.sysHugePageOS", + "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "runtime.(*mheap).sysAlloc", - "callStack": { - "function": "runtime.(*mheap).grow", - "callStack": { - "function": "runtime.(*mheap).allocSpan", - "callStack": { - "function": "runtime.(*mheap).allocManual", - "callStack": { - "function": "runtime.stackpoolalloc", - "callStack": { - "function": "runtime.stackcacherefill", - "callStack": { - "function": "runtime.stackalloc", - "callStack": { - "function": "runtime.schedinit", - "callStack": { - "function": "runtime.rt0_go" - } - } - } - } - } - } - } + "function": "runtime.sweepone", + "callStack": { + "function": "runtime.gcStart" } } } }, - "message": "Potential NOOP Syscall Detected: 5027", + "message": "Potential NOOP Syscall Detected: 5010", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "c833819300b20e58fab8b0489dd83c103131eb2cefa5d569f7daf768ad08110e" + "hash": "d3e7d8152b5a09fc862e5cd7092a65b562c53a4c015a17f72573e00201967b75" }, { "callStack": { - "function": "runtime.morestack" + "function": "golang.org/x/sys/unix.Getrlimit", + "callStack": { + "function": "github.com/tklauser/go-sysconf.sysconf", + "callStack": { + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } }, - "message": "Potential Incompatible Opcode Detected: Opcode: 0x0, Funct: 0x34", + "message": "Potential NOOP Syscall Detected: 5095", "severity": "WARNING", - "hash": "c88c2a55a8da3c10dc9464788654a0b0f511c5535740e1754efb7228717efeff" + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "d511ad433cbfb78073400b20dc716acef84f8599ecca55bb6b49a5796cc785c6" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "syscall.pread", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "internal/poll.(*FD).Pread", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "os.(*File).ReadAt", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "os.(*file).close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesAfter", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } + "function": "main.main" } } } @@ -11075,70 +13353,45 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "c8fe571ed4b950c219b12bf1f27f9568dfdcbe2fe50a02ebc9d7311a50085132" - }, - { - "callStack": { - "function": "runtime.netpollinit", - "callStack": { - "function": "runtime.netpollGenericInit", - "callStack": { - "function": "runtime.(*timers).addHeap", - "callStack": { - "function": "runtime.(*timer).maybeAdd", - "callStack": { - "function": "runtime.blockTimerChan", - "callStack": { - "function": "runtime.chanrecv" - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5016", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "c97485e9085b1897d18a220e82037f7396ab045ab9d8dd1033ae1b21207f8c5a" + "hash": "d5defb5f84b46bd8faa78023879d04b05d7f9ee7005c10ccfaeafd0d56923c11" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "syscall.Seek", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "internal/poll.(*FD).Seek", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "os.(*File).seek", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "os.(*File).Seek", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.decodeV2", "callStack": { - "function": "os.(*file).close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesBefore", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { @@ -11179,72 +13432,33 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5008", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "ca5eb8d02839fc6421f82b5dd8a84d54c0402e336072d824bf6cb52ff75711d6" + "hash": "d6013ccd78f9e0d31b249e24f17b525181cbad2c3a7aaea6352eed0ab2a146c1" }, { "callStack": { - "function": "syscall.pread", + "function": "runtime.munmap", "callStack": { - "function": "internal/poll.(*FD).Pread", + "function": "runtime.(*mheap).sysAlloc", "callStack": { - "function": "os.(*File).ReadAt", + "function": "runtime.(*mheap).grow", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).getIndices", + "function": "runtime.(*mheap).allocSpan", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeHidden", + "function": "runtime.(*mheap).allocManual", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", + "function": "runtime.stackpoolalloc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "function": "runtime.stackcacherefill", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "runtime.stackalloc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "runtime.schedinit", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } - } - } - } - } - } + "function": "runtime.rt0_go" } } } @@ -11255,67 +13469,49 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5016", + "message": "Potential NOOP Syscall Detected: 5011", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "cdc85b076baeb732ebe46810a7798301c569410870a3d1842cdca42c8152e691" + "hash": "d60ff15fc3f388f8a8c6413c928f391ef5889fe9641cef87081a6699371f6eab" }, { "callStack": { - "function": "syscall.fstat", + "function": "runtime.madvise", "callStack": { - "function": "syscall.Fstat", + "function": "runtime.sysFaultOS", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "os.(*File).Stat", + "function": "runtime.(*mspan).ensureSwept", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", + "function": "runtime.addspecial", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "net/netip.Addr.WithZone", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "net/netip.parseIPv6", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "net/netip.ParseAddr", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "net/url.parseHost", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "net/url.parseAuthority", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "net/url.parse", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "net/url.Parse", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "vendor/golang.org/x/net/http/httpproxy.parseProxy", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" } } } @@ -11334,100 +13530,94 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5027", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "cfbc210c473ebdf8707a38e6b9bbaddf03d302206833b98113d4976220bca27b" + "hash": "d68cf5f830a97d20f963830f8bf2a78076b7838fc47812c9cf74989bff9a5382" }, { "callStack": { - "function": "runtime.sysFaultOS", + "function": "syscall.pread", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "internal/poll.(*FD).Pread", "callStack": { - "function": "runtime.sweepone", + "function": "os.(*File).ReadAt", "callStack": { - "function": "runtime.gcStart" + "function": "google.golang.org/protobuf/internal/detrand.binaryHash", + "callStack": { + "function": "google.golang.org/protobuf/internal/detrand.init" + } } } } }, - "message": "Potential NOOP Syscall Detected: 5010", + "message": "Potential NOOP Syscall Detected: 5016", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d3e7d8152b5a09fc862e5cd7092a65b562c53a4c015a17f72573e00201967b75" + "hash": "d7a53e1948d1f1f232ff57f1b18a9e0a84256553f905fe5b2d2d02b1c459a4d8" }, { "callStack": { - "function": "golang.org/x/sys/unix.Getrlimit", + "function": "runtime.tgkill", "callStack": { - "function": "github.com/tklauser/go-sysconf.sysconf", + "function": "runtime.signalM", "callStack": { - "function": "github.com/shirou/gopsutil/cpu.init.1" + "function": "runtime.preemptone", + "callStack": { + "function": "runtime.(*gcControllerState).enlistWorker", + "callStack": { + "function": "runtime.(*gcWork).put", + "callStack": { + "function": "runtime.greyobject", + "callStack": { + "function": "runtime.shade", + "callStack": { + "function": "runtime.wbBufFlush1", + "callStack": { + "function": "runtime.(*p).destroy", + "callStack": { + "function": "runtime.procresize", + "callStack": { + "function": "runtime.schedinit", + "callStack": { + "function": "runtime.rt0_go" + } + } + } + } + } + } + } + } + } } } }, - "message": "Potential NOOP Syscall Detected: 5095", + "message": "Potential NOOP Syscall Detected: 5225", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d511ad433cbfb78073400b20dc716acef84f8599ecca55bb6b49a5796cc785c6" + "hash": "d946c072d477b6aa1019cbe4e99f59ee9a029183b1d4a9c586ff4ed608cb47ed" }, { "callStack": { - "function": "syscall.pread", + "function": "runtime.timer_settime", "callStack": { - "function": "internal/poll.(*FD).Pread", + "function": "runtime.setThreadCPUProfiler", "callStack": { - "function": "os.(*File).ReadAt", + "function": "runtime.execute", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "function": "runtime.schedule", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "runtime.mstart1", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "runtime.mstart0", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "runtime.mstart", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } - } - } - } - } + "function": "runtime.rt0_go" } } } @@ -11436,11 +13626,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5016", + "message": "Potential NOOP Syscall Detected: 5217", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d5defb5f84b46bd8faa78023879d04b05d7f9ee7005c10ccfaeafd0d56923c11" + "hash": "d9b25c2f5ce91ca587bd18c0fcfb52d85be4af6ec734fb471bb6b85747602bea" }, { "callStack": { @@ -11452,11 +13642,11 @@ "callStack": { "function": "os.(*File).Seek", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.decodeV2", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { @@ -11519,29 +13709,62 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d6013ccd78f9e0d31b249e24f17b525181cbad2c3a7aaea6352eed0ab2a146c1" + "hash": "da90ff92d33c14aa3b9ecfa469988258a69b663ce4b6075a728a2466528a2327" }, { "callStack": { - "function": "runtime.munmap", + "function": "syscall.fstat", "callStack": { - "function": "runtime.(*mheap).sysAlloc", + "function": "syscall.Fstat", "callStack": { - "function": "runtime.(*mheap).grow", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "runtime.(*mheap).allocSpan", + "function": "os.(*File).Stat", "callStack": { - "function": "runtime.(*mheap).allocManual", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", "callStack": { - "function": "runtime.stackpoolalloc", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "runtime.stackcacherefill", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "runtime.stackalloc", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "runtime.schedinit", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "runtime.rt0_go" + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } } } } @@ -11552,29 +13775,29 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5011", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d60ff15fc3f388f8a8c6413c928f391ef5889fe9641cef87081a6699371f6eab" + "hash": "dbd286679684e8771fc256cb385dd1122b3a0974932bdf3a652bfa6ed39d0da3" }, { "callStack": { - "function": "syscall.fstat", + "function": "runtime.sigaltstack", "callStack": { - "function": "syscall.Fstat", + "function": "runtime.minitSignalStack", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "runtime.minitSignals", "callStack": { - "function": "os.(*File).Stat", + "function": "runtime.minit", "callStack": { - "function": "os.ReadFile", + "function": "runtime.mstart1", "callStack": { - "function": "golang.org/x/sys/cpu.readHWCAP", + "function": "runtime.mstart0", "callStack": { - "function": "golang.org/x/sys/cpu.archInit", + "function": "runtime.mstart", "callStack": { - "function": "golang.org/x/sys/cpu.init.0" + "function": "runtime.rt0_go" } } } @@ -11583,59 +13806,67 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d6f4fad1cbbd448dc5c5b318c867bb147ab962ea7698da5dfada2f3e1dcba699" - }, - { - "callStack": { - "function": "syscall.pread", - "callStack": { - "function": "internal/poll.(*FD).Pread", - "callStack": { - "function": "os.(*File).ReadAt", - "callStack": { - "function": "google.golang.org/protobuf/internal/detrand.binaryHash", - "callStack": { - "function": "google.golang.org/protobuf/internal/detrand.init" - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5016", + "message": "Potential NOOP Syscall Detected: 5129", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d7a53e1948d1f1f232ff57f1b18a9e0a84256553f905fe5b2d2d02b1c459a4d8" + "hash": "dd587c3824c3da9d690cbbab1e17cdedaf5b8cf66bb087f0ec9938d9839689b2" }, { "callStack": { - "function": "runtime.tgkill", + "function": "syscall.openat", "callStack": { - "function": "runtime.signalM", + "function": "os.open", "callStack": { - "function": "runtime.preemptone", + "function": "os.openFileNolog", "callStack": { - "function": "runtime.(*gcControllerState).enlistWorker", + "function": "os.OpenFile", "callStack": { - "function": "runtime.(*gcWork).put", + "function": "github.com/ethereum/go-ethereum/core/rawdb.copyFrom", "callStack": { - "function": "runtime.greyobject", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateTail", "callStack": { - "function": "runtime.shade", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", "callStack": { - "function": "runtime.wbBufFlush1", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "runtime.(*p).destroy", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "runtime.procresize", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "runtime.schedinit", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "runtime.rt0_go" + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } } } } @@ -11648,42 +13879,36 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5225", + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d946c072d477b6aa1019cbe4e99f59ee9a029183b1d4a9c586ff4ed608cb47ed" + "hash": "dd664e3f9bc63d2eded5d561f0942a9443423426671c6202ef5c3a14749931c7" }, { "callStack": { - "function": "runtime.timer_settime", + "function": "syscall.fstat", "callStack": { - "function": "runtime.setThreadCPUProfiler", + "function": "syscall.Fstat", "callStack": { - "function": "runtime.execute", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "runtime.schedule", + "function": "os.(*File).Stat", "callStack": { - "function": "runtime.mstart1", + "function": "net.dnsReadConfig", "callStack": { - "function": "runtime.mstart0", - "callStack": { - "function": "runtime.mstart", - "callStack": { - "function": "runtime.rt0_go" - } - } + "function": "net.(*resolverConfig).init" } } } } } }, - "message": "Potential NOOP Syscall Detected: 5217", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "d9b25c2f5ce91ca587bd18c0fcfb52d85be4af6ec734fb471bb6b85747602bea" + "hash": "ddf896a54cad0296aaf56d531c13dc49fedc1ad98561e3575a38b9b5a3101ce0" }, { "callStack": { @@ -11697,44 +13922,41 @@ "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).truncateHead", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repairIndex", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*Freezer).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } + "function": "main.main" } } } @@ -11762,23 +13984,56 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "da90ff92d33c14aa3b9ecfa469988258a69b663ce4b6075a728a2466528a2327" + "hash": "de5d1c4d56fca0df7e74d85caecbca2c25ec653587e344f0203dc934ac33af03" }, { "callStack": { - "function": "syscall.fstat", + "function": "runtime.abort", "callStack": { - "function": "syscall.Fstat", + "function": "runtime.switchToCrashStack", "callStack": { - "function": "internal/poll.(*FD).Fstat", + "function": "runtime.badmorestackg0", "callStack": { - "function": "os.(*File).Stat", + "function": "runtime.morestack" + } + } + } + }, + "message": "Potential Incompatible Opcode Detected: Opcode: 0x0, Funct: 0x34", + "severity": "WARNING", + "hash": "deea6e82da62ffce14974a8dc265cc359e46034d31a1663c4a142b9b9009d7d0" + }, + { + "callStack": { + "function": "runtime.netpollopen", + "callStack": { + "function": "internal/poll.runtime_pollOpen", + "callStack": { + "function": "internal/poll.(*pollDesc).init" + } + } + }, + "message": "Potential NOOP Syscall Detected: 5208", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "df03bb5aa3bd6618058cda75ba9b7525f02007c3bce90f793b2e7909f10da152" + }, + { + "callStack": { + "function": "runtime.netpollclose", + "callStack": { + "function": "internal/poll.runtime_pollClose", + "callStack": { + "function": "internal/poll.(*FD).destroy", + "callStack": { + "function": "internal/poll.(*FD).decref", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).sizeNolock", + "function": "internal/poll.(*FD).Close", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "os.(*file).close", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", "callStack": { "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { @@ -11828,29 +14083,71 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "dbd286679684e8771fc256cb385dd1122b3a0974932bdf3a652bfa6ed39d0da3" + "hash": "df6771c68a5c2ad3b04b244c7b1d7f6aaae1043077220064bcdacc117c3aeba9" }, { "callStack": { - "function": "runtime.sigaltstack", + "function": "runtime.netpollclose", "callStack": { - "function": "runtime.minitSignalStack", + "function": "internal/poll.runtime_pollClose", "callStack": { - "function": "runtime.minitSignals", + "function": "internal/poll.(*FD).destroy", "callStack": { - "function": "runtime.minit", + "function": "internal/poll.(*FD).decref", "callStack": { - "function": "runtime.mstart1", + "function": "internal/poll.(*FD).Close", "callStack": { - "function": "runtime.mstart0", + "function": "os.(*file).close", "callStack": { - "function": "runtime.mstart", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).Close", "callStack": { - "function": "runtime.rt0_go" + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "callStack": { + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } + } + } + } } } } @@ -11859,84 +14156,71 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5129", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "dd587c3824c3da9d690cbbab1e17cdedaf5b8cf66bb087f0ec9938d9839689b2" - }, - { - "callStack": { - "function": "syscall.fstat", - "callStack": { - "function": "syscall.Fstat", - "callStack": { - "function": "internal/poll.(*FD).Fstat", - "callStack": { - "function": "os.(*File).Stat", - "callStack": { - "function": "net.dnsReadConfig", - "callStack": { - "function": "net.(*resolverConfig).init" - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5005", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "ddf896a54cad0296aaf56d531c13dc49fedc1ad98561e3575a38b9b5a3101ce0" + "hash": "e06654ee18cbd14021772fcc7494e5330fe5969706d403266e894d33a05b12b2" }, { "callStack": { - "function": "syscall.Seek", + "function": "runtime.netpollclose", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "internal/poll.runtime_pollClose", "callStack": { - "function": "os.(*File).seek", + "function": "internal/poll.(*FD).destroy", "callStack": { - "function": "os.(*File).Seek", + "function": "internal/poll.(*FD).decref", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTableMeta).write", + "function": "internal/poll.(*FD).Close", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repairIndex", + "function": "os.(*file).close", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesAfter", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).preopen", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "main.main" + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } } } } @@ -11960,96 +14244,61 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "de5d1c4d56fca0df7e74d85caecbca2c25ec653587e344f0203dc934ac33af03" + "hash": "e27376671547a7e1ae532bfbdc9c3d278ce76bf263f0d6f5bdca2ddcb3e64a08" }, { "callStack": { - "function": "runtime.abort", + "function": "runtime.rtsigprocmask", "callStack": { - "function": "runtime.switchToCrashStack", + "function": "runtime.unblocksig", "callStack": { - "function": "runtime.badmorestackg0", + "function": "runtime.dieFromSignal", "callStack": { - "function": "runtime.morestack" + "function": "runtime.fatalpanic", + "callStack": { + "function": "runtime.gopanic" + } } } } }, - "message": "Potential Incompatible Opcode Detected: Opcode: 0x0, Funct: 0x34", - "severity": "WARNING", - "hash": "deea6e82da62ffce14974a8dc265cc359e46034d31a1663c4a142b9b9009d7d0" - }, - { - "callStack": { - "function": "runtime.netpollopen", - "callStack": { - "function": "internal/poll.runtime_pollOpen", - "callStack": { - "function": "internal/poll.(*pollDesc).init" - } - } - }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5014", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "df03bb5aa3bd6618058cda75ba9b7525f02007c3bce90f793b2e7909f10da152" + "hash": "e336ad193c689c6ae517abab509fd76117deaa8f1cd63666aac1d160ce44f759" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "runtime.netpollinit", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "runtime.(*timer).modify", "callStack": { - "function": "os.(*file).close", + "function": "time.newTimer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.cleanup", + "function": "time.AfterFunc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "crypto/internal/entropy.Depleted", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "crypto/internal/fips140/drbg.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "crypto/internal/fips140/drbg.ReadWithReader", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P384Point]", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } + "function": "crypto/ecdh.init.func5" } } } @@ -12063,36 +14312,33 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5285", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "df6771c68a5c2ad3b04b244c7b1d7f6aaae1043077220064bcdacc117c3aeba9" + "hash": "e3799713c1eed9999499b52b21c3fe6cc3801dc64804ba6334deb12dd9566e43" }, { "callStack": { "function": "runtime.madvise", "callStack": { - "function": "runtime.sysHugePageOS", + "function": "runtime.sysFaultOS", "callStack": { - "function": "runtime.(*mheap).sysAlloc", + "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "runtime.(*mheap).grow", + "function": "runtime.(*mcentral).uncacheSpan", "callStack": { - "function": "runtime.(*mheap).allocSpan", + "function": "runtime.(*mcache).releaseAll", "callStack": { - "function": "runtime.(*mheap).allocManual", + "function": "runtime.(*mcache).prepareForSweep", "callStack": { - "function": "runtime.materializeGCProg", + "function": "runtime.acquirep", "callStack": { - "function": "runtime.adjustframe", + "function": "runtime.allocm", "callStack": { - "function": "runtime.copystack", + "function": "runtime.newm", "callStack": { - "function": "runtime.newstack", - "callStack": { - "function": "runtime.morestack" - } + "function": "runtime.startm" } } } @@ -12107,68 +14353,53 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "e258f1b06b9514ad89cf3e6529f45c227a2c0a6342f631f17c1ca6f9c3632ab9" + "hash": "e765d842c669be18a8bd4092a0a168e55aaf724ff54d00020da8ca27b872f888" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "syscall.Seek", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "internal/poll.(*FD).Seek", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "os.(*File).seek", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "os.(*File).Seek", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.decodeV2", "callStack": { - "function": "os.(*file).close", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesAfter", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).preopen", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } + "function": "main.main" } } } @@ -12191,65 +14422,76 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "e27376671547a7e1ae532bfbdc9c3d278ce76bf263f0d6f5bdca2ddcb3e64a08" - }, - { - "callStack": { - "function": "runtime.rtsigprocmask", - "callStack": { - "function": "runtime.unblocksig", - "callStack": { - "function": "runtime.dieFromSignal", - "callStack": { - "function": "runtime.fatalpanic", - "callStack": { - "function": "runtime.gopanic" - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5014", + "message": "Potential NOOP Syscall Detected: 5008", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "e336ad193c689c6ae517abab509fd76117deaa8f1cd63666aac1d160ce44f759" + "hash": "e8a53aa33312f53f16314046dadc6f9283bd809e7a81e30fd317436e0198d865" }, { "callStack": { - "function": "runtime.tgkill", + "function": "runtime.netpollclose", "callStack": { - "function": "runtime.signalM", + "function": "internal/poll.runtime_pollClose", "callStack": { - "function": "runtime.preemptone", + "function": "internal/poll.(*FD).destroy", "callStack": { - "function": "runtime.(*gcControllerState).enlistWorker", + "function": "internal/poll.(*FD).decref", "callStack": { - "function": "runtime.(*gcWork).put", + "function": "internal/poll.(*FD).Close", "callStack": { - "function": "runtime.greyobject", + "function": "os.(*file).close", "callStack": { - "function": "runtime.shade", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesAfter", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", "callStack": { - "function": "net/netip.parseIPv6", + "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", "callStack": { - "function": "net/netip.ParseAddr", + "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", "callStack": { - "function": "net/netip.ParsePrefix", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/netutil.(*Netlist).Add", + "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/netutil.init.0" + "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", + "callStack": { + "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", + "callStack": { + "function": "main.main" + } + } + } + } + } + } + } + } + } + } + } } } } @@ -12265,37 +14507,65 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5225", + "message": "Potential NOOP Syscall Detected: 5208", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "ee019853c1c8cd393e91ae684a879ab4e80224ef34f34fecda7a42b8ee738ffb" + }, + { + "callStack": { + "function": "syscall.openat", + "callStack": { + "function": "os.open", + "callStack": { + "function": "os.openFileNolog", + "callStack": { + "function": "os.OpenFile", + "callStack": { + "function": "github.com/tklauser/go-sysconf.getNprocsProcStat", + "callStack": { + "function": "github.com/tklauser/go-sysconf.getNprocs", + "callStack": { + "function": "github.com/tklauser/go-sysconf.getNprocsConf", + "callStack": { + "function": "github.com/tklauser/go-sysconf.sysconf", + "callStack": { + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5247", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "e4aa7e69b652237e345482af2fb385bf5baf72d378613f473272c8428a90f93c" + "hash": "f22bbb65001661cbee435b60d3b67dc0de1d695dfc5a80dab1094098648b204d" }, { "callStack": { - "function": "runtime.sysFaultOS", + "function": "runtime.netpollinit", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "runtime.(*mspan).ensureSwept", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "runtime.(*timer).modify", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "time.newTimer", "callStack": { - "function": "net/netip.parseIPv6", + "function": "time.NewTimer", "callStack": { - "function": "net/netip.ParseAddr", + "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", "callStack": { - "function": "net/netip.ParsePrefix", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/netutil.(*Netlist).Add", - "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/netutil.init.0" - } - } + "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" } } } @@ -12305,11 +14575,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5010", + "message": "Potential NOOP Syscall Detected: 5285", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "e65da03179fce939fb277bc1bb07319233ed12edcc44ecea23ab4d7d7ed9909a" + "hash": "f27311fdd9efce23ec72c0a514fa0fe2227bb110a06d880ca121a75fd1d15130" }, { "callStack": { @@ -12319,19 +14589,31 @@ "callStack": { "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "runtime.(*mcentral).uncacheSpan", + "function": "runtime.(*mspan).ensureSwept", "callStack": { - "function": "runtime.(*mcache).releaseAll", + "function": "runtime.addspecial", "callStack": { - "function": "runtime.(*mcache).prepareForSweep", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "runtime.acquirep", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "runtime.allocm", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "runtime.newm", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "runtime.startm" + "function": "net/netip.Addr.WithZone", + "callStack": { + "function": "net/netip.parseIPv6", + "callStack": { + "function": "net/netip.ParseAddr", + "callStack": { + "function": "net.ParseCIDR", + "callStack": { + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + } + } + } + } } } } @@ -12346,61 +14628,37 @@ "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "e765d842c669be18a8bd4092a0a168e55aaf724ff54d00020da8ca27b872f888" + "hash": "f3608d5b3d7924dfa163b025352cef0eaf1da0f1035d7905996f3fcdc8a3ba6b" }, { "callStack": { - "function": "syscall.Seek", + "function": "runtime.netpollinit", "callStack": { - "function": "internal/poll.(*FD).Seek", + "function": "runtime.netpollGenericInit", "callStack": { - "function": "os.(*File).seek", + "function": "runtime.(*timers).addHeap", "callStack": { - "function": "os.(*File).Seek", + "function": "runtime.(*timer).maybeAdd", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.decodeV2", + "function": "runtime.(*timer).modify", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newMetadata", + "function": "time.newTimer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "time.AfterFunc", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "crypto/internal/entropy.Depleted", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "crypto/internal/fips140/drbg.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", + "function": "crypto/rand.(*reader).Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", + "function": "crypto/rand.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", + "function": "github.com/ethereum/go-ethereum/rpc.randomIDGenerator", "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } + "function": "github.com/ethereum/go-ethereum/rpc.init" } } } @@ -12415,78 +14673,39 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5008", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "e8a53aa33312f53f16314046dadc6f9283bd809e7a81e30fd317436e0198d865" + "hash": "f3a9ae4ed08032beccf3ce1bbcd188076c867a7f60e6f126dcb16d7c12e22a9b" }, { "callStack": { - "function": "runtime.netpollclose", + "function": "runtime.sysFaultOS", "callStack": { - "function": "internal/poll.runtime_pollClose", + "function": "runtime.(*sweepLocked).sweep", "callStack": { - "function": "internal/poll.(*FD).destroy", + "function": "runtime.(*mspan).ensureSwept", "callStack": { - "function": "internal/poll.(*FD).decref", + "function": "runtime.addspecial", "callStack": { - "function": "internal/poll.(*FD).Close", + "function": "runtime.getOrAddWeakHandle", "callStack": { - "function": "os.(*file).close", + "function": "weak.runtime_registerWeakPointer", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).releaseFilesAfter", + "function": "weak.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.(*freezerTable).repair", + "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newTable", + "function": "net/netip.Addr.WithZone", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewFreezer", + "function": "net/netip.parseIPv6", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.newResettableFreezer", + "function": "net/netip.ParseAddr", "callStack": { - "function": "github.com/ethereum/go-ethereum/core/rawdb.NewStateFreezer", + "function": "net.ParseCIDR", "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.(*Database).repairHistory", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb/pathdb.New", - "callStack": { - "function": "github.com/ethereum/go-ethereum/triedb.NewDatabase", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/mpt.ReadTrie", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).loadTransactions", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).consolidatedBlockByHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.(*ConsolidateOracle).ReceiptsByBlockHash", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.singleRoundConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.RunConsolidation", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.stateTransition", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client/interop.runInteropProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.RunProgram", - "callStack": { - "function": "github.com/ethereum-optimism/optimism/op-program/client.Main", - "callStack": { - "function": "main.main" - } - } - } - } - } - } - } - } - } - } - } - } - } + "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" } } } @@ -12500,11 +14719,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5208", + "message": "Potential NOOP Syscall Detected: 5010", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "ee019853c1c8cd393e91ae684a879ab4e80224ef34f34fecda7a42b8ee738ffb" + "hash": "f4ddbf2e6c51545f063e0c159f52c491a6340a1143d31aa3b4aa190cc6daf1f5" }, { "callStack": { @@ -12520,11 +14739,14 @@ "callStack": { "function": "time.newTimer", "callStack": { - "function": "time.NewTimer", + "function": "time.AfterFunc", "callStack": { - "function": "github.com/ethereum/go-ethereum/p2p/nat.discoverPMP", + "function": "crypto/internal/sysrand.Read", "callStack": { - "function": "github.com/ethereum/go-ethereum/node.init.Any.func2.2" + "function": "crypto/internal/entropy.Depleted", + "callStack": { + "function": "crypto/internal/fips140/drbg.init.func1" + } } } } @@ -12534,11 +14756,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5285", + "message": "Potential NOOP Syscall Detected: 5208", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "f27311fdd9efce23ec72c0a514fa0fe2227bb110a06d880ca121a75fd1d15130" + "hash": "f942c4ada6c73218ff0a37f5381ce2af17ac0c35206b609ee2e8be852b756283" }, { "callStack": { @@ -12746,6 +14968,52 @@ "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "fb1420c0bb3d7d169c6f4201b39abcf009b20e5b0a80847c025d08ed26185e19" }, + { + "callStack": { + "function": "runtime.netpollinit", + "callStack": { + "function": "runtime.netpollGenericInit", + "callStack": { + "function": "runtime.(*timers).addHeap", + "callStack": { + "function": "runtime.(*timer).maybeAdd", + "callStack": { + "function": "runtime.(*timer).modify", + "callStack": { + "function": "time.newTimer", + "callStack": { + "function": "time.AfterFunc", + "callStack": { + "function": "crypto/internal/sysrand.Read", + "callStack": { + "function": "crypto/internal/entropy.Depleted", + "callStack": { + "function": "crypto/internal/fips140/drbg.Read", + "callStack": { + "function": "crypto/internal/fips140/drbg.ReadWithReader", + "callStack": { + "function": "crypto/internal/fips140/ecdh.GenerateKey[go.shape.*crypto/internal/fips140/nistec.P521Point]", + "callStack": { + "function": "crypto/ecdh.init.func9" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "message": "Potential NOOP Syscall Detected: 5284", + "severity": "WARNING", + "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", + "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", + "hash": "fc6d08605736c4822973b5a95bd49cfcd854aeb70beeaf9486dd57cc56a0414a" + }, { "callStack": { "function": "syscall.stat", @@ -12809,25 +15077,31 @@ }, { "callStack": { - "function": "runtime.sysFaultOS", + "function": "syscall.fstat", "callStack": { - "function": "runtime.(*sweepLocked).sweep", + "function": "syscall.Fstat", "callStack": { - "function": "runtime.(*mspan).ensureSwept", + "function": "internal/poll.(*FD).Fstat", "callStack": { - "function": "internal/weak.runtime_makeStrongFromWeak", + "function": "os.(*File).Stat", "callStack": { - "function": "unique.Make[go.shape.struct { net/netip.isV6 bool; net/netip.zoneV6 string }]", + "function": "os.readFileContents", "callStack": { - "function": "net/netip.Addr.WithZone", + "function": "os.ReadFile", "callStack": { - "function": "net/netip.parseIPv6", + "function": "github.com/tklauser/numcpus.readCPURange", "callStack": { - "function": "net/netip.ParseAddr", + "function": "github.com/tklauser/numcpus.getOnline", "callStack": { - "function": "net.parseIP", + "function": "github.com/tklauser/go-sysconf.getNprocsSysfs", "callStack": { - "function": "vendor/golang.org/x/net/http/httpproxy.(*config).init" + "function": "github.com/tklauser/go-sysconf.getNprocs", + "callStack": { + "function": "github.com/tklauser/go-sysconf.sysconf", + "callStack": { + "function": "github.com/shirou/gopsutil/cpu.init.1" + } + } } } } @@ -12838,11 +15112,11 @@ } } }, - "message": "Potential NOOP Syscall Detected: 5010", + "message": "Potential NOOP Syscall Detected: 5005", "severity": "WARNING", "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "fd07f8d36d825bafa75172259a1b5a466b802077a35d21f0887d283f907fbf8e" + "hash": "fda44f92f1350694ebf9aed01f9a49203a6c6631e31f9ace4e121531502e1e42" }, { "callStack": { @@ -12877,36 +15151,5 @@ "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", "hash": "fe0e8198246dba85fee58db76a53a30a8a7b3f84577b00a56e77b4fa7114e827" - }, - { - "callStack": { - "function": "syscall.fstat", - "callStack": { - "function": "syscall.Fstat", - "callStack": { - "function": "internal/poll.(*FD).Fstat", - "callStack": { - "function": "os.(*File).Stat", - "callStack": { - "function": "os.ReadFile", - "callStack": { - "function": "github.com/tklauser/go-sysconf.readProcFsInt64", - "callStack": { - "function": "github.com/tklauser/go-sysconf.sysconf", - "callStack": { - "function": "github.com/shirou/gopsutil/cpu.init.1" - } - } - } - } - } - } - } - }, - "message": "Potential NOOP Syscall Detected: 5005", - "severity": "WARNING", - "impact": "This syscall is present in the program, but its execution depends on the actual runtime behavior. \n If the execution path does not reach this syscall, it may not affect execution.", - "reference": "https://github.com/ChainSafe/vm-compat?tab=readme-ov-file#how-it-works", - "hash": "fe35df5511505818ce1133621afa9876c42fe27577b33044678438013b218eb2" } ] diff --git a/op-program/vm-profiles/cannon-multithreaded-64.yaml b/op-program/vm-profiles/cannon-multithreaded-64.yaml index 715e382af7f..a3942c9be8e 100644 --- a/op-program/vm-profiles/cannon-multithreaded-64.yaml +++ b/op-program/vm-profiles/cannon-multithreaded-64.yaml @@ -162,6 +162,7 @@ allowed_syscalls: - 5034 - 5222 - 5038 + - 5313 noop_syscalls: - 5011 - 5196 @@ -182,7 +183,6 @@ noop_syscalls: - 5287 - 5208 - 5272 - - 5313 - 5061 - 5100 - 5102 diff --git a/op-test-sequencer/sequencer/backend/work/builders/fakepos/builder.go b/op-test-sequencer/sequencer/backend/work/builders/fakepos/builder.go index e6ac58b1035..2be46b1aff1 100644 --- a/op-test-sequencer/sequencer/backend/work/builders/fakepos/builder.go +++ b/op-test-sequencer/sequencer/backend/work/builders/fakepos/builder.go @@ -15,7 +15,7 @@ import ( ) type Beacon interface { - StoreBlobsBundle(slot uint64, bundle *engine.BlobsBundleV1) error + StoreBlobsBundle(slot uint64, bundle *engine.BlobsBundle) error } type Blockchain interface { diff --git a/op-wheel/cheat/cheat.go b/op-wheel/cheat/cheat.go index e81487a182d..7e74e904a3d 100644 --- a/op-wheel/cheat/cheat.go +++ b/op-wheel/cheat/cheat.go @@ -341,7 +341,7 @@ func SetBalance(addr common.Address, amount *big.Int) HeadFn { func SetCode(addr common.Address, code hexutil.Bytes) HeadFn { return func(_ *types.Header, headState *state.StateDB) error { - headState.SetCode(addr, code) + headState.SetCode(addr, code, tracing.CodeChangeUnspecified) return nil } } diff --git a/ops/docker/deployment-utils/Dockerfile b/ops/docker/deployment-utils/Dockerfile index a2fae72edc4..e4fc4f96474 100644 --- a/ops/docker/deployment-utils/Dockerfile +++ b/ops/docker/deployment-utils/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.23.8-bookworm AS go-base +FROM golang:1.24.10-bookworm AS go-base RUN go install github.com/tomwright/dasel/v2/cmd/dasel@master diff --git a/ops/docker/op-stack-go/Dockerfile b/ops/docker/op-stack-go/Dockerfile index 1493b843fde..00a90f33386 100644 --- a/ops/docker/op-stack-go/Dockerfile +++ b/ops/docker/op-stack-go/Dockerfile @@ -57,7 +57,7 @@ EOF RUN forge --version # We may be cross-building for another platform. Specify which platform we need as builder. -FROM --platform=$BUILDPLATFORM golang:1.23.8-alpine3.21 AS builder +FROM --platform=$BUILDPLATFORM golang:1.24.10-alpine3.21 AS builder RUN apk add --no-cache curl tar gzip make gcc musl-dev linux-headers git jq yq-go bash just