// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build msan

package runtime

import (
	"unsafe"
)

// Public memory sanitizer API.

func MSanRead(addr unsafe.Pointer, len int) {
	msanread(addr, uintptr(len))
}

func MSanWrite(addr unsafe.Pointer, len int) {
	msanwrite(addr, uintptr(len))
}

// Private interface for the runtime.
const msanenabled = true

// If we are running on the system stack, the C program may have
// marked part of that stack as uninitialized. We don't instrument
// the runtime, but operations like a slice copy can call msanread
// anyhow for values on the stack. Just ignore msanread when running
// on the system stack. The other msan functions are fine.
//
//go:nosplit
func msanread(addr unsafe.Pointer, sz uintptr) {
	g := getg()
	if g == nil || g.m == nil || g == g.m.g0 || g == g.m.gsignal {
		return
	}
	domsanread(addr, sz)
}

//go:noescape
func domsanread(addr unsafe.Pointer, sz uintptr)

//go:noescape
func msanwrite(addr unsafe.Pointer, sz uintptr)

//go:noescape
func msanmalloc(addr unsafe.Pointer, sz uintptr)

//go:noescape
func msanfree(addr unsafe.Pointer, sz uintptr)

// These are called from msan_amd64.s
//go:cgo_import_static __msan_read_go
//go:cgo_import_static __msan_write_go
//go:cgo_import_static __msan_malloc_go
//go:cgo_import_static __msan_free_go
