runtime/secret: reorganize tests to fix -buildmode=shared

The testing assembly methods had a linkname that was implicitly
satisfied during the regular build but not there during the shared
build. Fix by moving the testing routine into the package itself.

For good measure, section off the assembly files from the non-experiment
build. Should prevent further build failures as we work on this.

Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-linux-arm64-longtest
Change-Id: I2b45668e44641ae7880ff14f6402d982c7eaedd7
Reviewed-on: https://go-review.googlesource.com/c/go/+/724001
Reviewed-by: David Chase <drchase@google.com>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Filippo Valsorda <filippo@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
This commit is contained in:
Daniel Morsing 2025-11-27 06:45:20 +00:00 committed by Gopher Robot
parent 2947cb0469
commit c079dd13c0
4 changed files with 17 additions and 9 deletions

View file

@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
//go:build goexperiment.runtimesecret
// Note: this assembly file is used for testing only. // Note: this assembly file is used for testing only.
// We need to access registers directly to properly test // We need to access registers directly to properly test
// that secrets are erased and go test doesn't like to conditionally // that secrets are erased and go test doesn't like to conditionally
@ -208,6 +210,6 @@ noavx512:
// registers contain secrets. // registers contain secrets.
// It also tests the path from G stack to M stack // It also tests the path from G stack to M stack
// to scheduler and back. // to scheduler and back.
CALL ·delay(SB) CALL runtimesecret·delay(SB)
RET RET

View file

@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
//go:build goexperiment.runtimesecret
// Note: this assembly file is used for testing only. // Note: this assembly file is used for testing only.
// We need to access registers directly to properly test // We need to access registers directly to properly test
// that secrets are erased and go test doesn't like to conditionally // that secrets are erased and go test doesn't like to conditionally

View file

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
//go:build arm64 || amd64 //go:build goexperiment.runtimesecret && (arm64 || amd64)
// testing stubs, these are implemented in assembly in // testing stubs, these are implemented in assembly in
// asm_$GOARCH.s // asm_$GOARCH.s
@ -30,3 +30,14 @@ func spillRegisters(p unsafe.Pointer) uintptr
// //
//go:noescape //go:noescape
func useSecret(secret []byte) func useSecret(secret []byte)
// callback from assembly
func delay() {
sleep(1_000_000)
}
// linknamed to avoid package importing time
// for just testing code
//
//go:linkname sleep time.Sleep
func sleep(int64)

View file

@ -18,13 +18,6 @@ import (
"weak" "weak"
) )
// callback from assembly
//
//go:linkname delay main.delay
func delay() {
time.Sleep(1 * time.Millisecond)
}
// Same secret as in ../../crash_test.go // Same secret as in ../../crash_test.go
var secretStore = [8]byte{ var secretStore = [8]byte{
0x00, 0x00,