]> Cypherpunks repositories - gostls13.git/commitdiff
internal/msan: add new package
authorMauri de Souza Meneguzzo <mauri870@gmail.com>
Fri, 16 Feb 2024 23:24:12 +0000 (23:24 +0000)
committerCherry Mui <cherryyz@google.com>
Tue, 20 Feb 2024 20:50:21 +0000 (20:50 +0000)
The internal/msan package contains helper functions for manually
instrumenting code for the memory sanitizer. It exports the private
msan routines in runtime unconditionally, making the functions a
no-op if the build flag "msan" is not present.

For #64611

Change-Id: If43f29e112ac79a47083c9dbdf2c61a0641e80b1
GitHub-Last-Rev: 0a644bd6f10a9052c33992f1c56b1f0037ca98c7
GitHub-Pull-Request: golang/go#64637
Reviewed-on: https://go-review.googlesource.com/c/go/+/548676
Reviewed-by: Austin Clements <austin@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/go/build/deps_test.go
src/internal/msan/doc.go [new file with mode: 0644]
src/internal/msan/msan.go [new file with mode: 0644]
src/internal/msan/nomsan.go [new file with mode: 0644]
src/runtime/msan.go

index 34b0522812d89854845036aa1f5da87f552eba01..c26228f7a75e32b0f30f249797a26f16c8c1a754 100644 (file)
@@ -75,6 +75,7 @@ var depsRules = `
        < runtime
        < sync/atomic
        < internal/race
+       < internal/msan
        < internal/asan
        < sync
        < internal/bisect
diff --git a/src/internal/msan/doc.go b/src/internal/msan/doc.go
new file mode 100644 (file)
index 0000000..e68d341
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package msan contains helper functions for manually instrumenting code
+// for the memory sanitizer.
+// This package exports the private msan routines in runtime unconditionally
+// but without the "msan" build tag they are no-ops.
+package msan
diff --git a/src/internal/msan/msan.go b/src/internal/msan/msan.go
new file mode 100644 (file)
index 0000000..518153e
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build msan
+
+package msan
+
+import (
+       "unsafe"
+)
+
+const Enabled = true
+
+//go:linkname Read runtime.msanread
+func Read(addr unsafe.Pointer, sz uintptr)
+
+//go:linkname Write runtime.msanwrite
+func Write(addr unsafe.Pointer, sz uintptr)
+
+//go:linkname Malloc runtime.msanmalloc
+func Malloc(addr unsafe.Pointer, sz uintptr)
+
+//go:linkname Free runtime.msanfree
+func Free(addr unsafe.Pointer, sz uintptr)
+
+//go:linkname Move runtime.msanmove
+func Move(dst, src unsafe.Pointer, sz uintptr)
diff --git a/src/internal/msan/nomsan.go b/src/internal/msan/nomsan.go
new file mode 100644 (file)
index 0000000..3dccda3
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build !msan
+
+package msan
+
+import (
+       "unsafe"
+)
+
+const Enabled = false
+
+func Read(addr unsafe.Pointer, sz uintptr) {
+}
+
+func Write(addr unsafe.Pointer, sz uintptr) {
+}
+
+func Malloc(addr unsafe.Pointer, sz uintptr) {
+}
+
+func Free(addr unsafe.Pointer, sz uintptr) {
+}
+
+func Move(dst, src unsafe.Pointer, sz uintptr) {
+}
index 5e2aae1bd1616e312e3d61ccde0e89e28d0acf74..cb740dc2d86ae5a74c52b2d74c7867ae7609b903 100644 (file)
@@ -29,6 +29,7 @@ const msanenabled = true
 // anyhow for values on the stack. Just ignore msanread when running
 // on the system stack. The other msan functions are fine.
 //
+//go:linkname msanread
 //go:nosplit
 func msanread(addr unsafe.Pointer, sz uintptr) {
        gp := getg()
@@ -41,15 +42,19 @@ func msanread(addr unsafe.Pointer, sz uintptr) {
 //go:noescape
 func domsanread(addr unsafe.Pointer, sz uintptr)
 
+//go:linkname msanwrite
 //go:noescape
 func msanwrite(addr unsafe.Pointer, sz uintptr)
 
+//go:linkname msanmalloc
 //go:noescape
 func msanmalloc(addr unsafe.Pointer, sz uintptr)
 
+//go:linkname msanfree
 //go:noescape
 func msanfree(addr unsafe.Pointer, sz uintptr)
 
+//go:linkname msanmove
 //go:noescape
 func msanmove(dst, src unsafe.Pointer, sz uintptr)