// 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.
func msanread(addr unsafe.Pointer, sz uintptr) {
	g := getg()
	if 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
