...

Source file src/runtime/msan.go

     1	// Copyright 2015 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	// +build msan
     6	
     7	package runtime
     8	
     9	import (
    10		"unsafe"
    11	)
    12	
    13	// Public memory sanitizer API.
    14	
    15	func MSanRead(addr unsafe.Pointer, len int) {
    16		msanread(addr, uintptr(len))
    17	}
    18	
    19	func MSanWrite(addr unsafe.Pointer, len int) {
    20		msanwrite(addr, uintptr(len))
    21	}
    22	
    23	// Private interface for the runtime.
    24	const msanenabled = true
    25	
    26	// If we are running on the system stack, the C program may have
    27	// marked part of that stack as uninitialized. We don't instrument
    28	// the runtime, but operations like a slice copy can call msanread
    29	// anyhow for values on the stack. Just ignore msanread when running
    30	// on the system stack. The other msan functions are fine.
    31	//
    32	//go:nosplit
    33	func msanread(addr unsafe.Pointer, sz uintptr) {
    34		g := getg()
    35		if g == nil || g.m == nil || g == g.m.g0 || g == g.m.gsignal {
    36			return
    37		}
    38		domsanread(addr, sz)
    39	}
    40	
    41	//go:noescape
    42	func domsanread(addr unsafe.Pointer, sz uintptr)
    43	
    44	//go:noescape
    45	func msanwrite(addr unsafe.Pointer, sz uintptr)
    46	
    47	//go:noescape
    48	func msanmalloc(addr unsafe.Pointer, sz uintptr)
    49	
    50	//go:noescape
    51	func msanfree(addr unsafe.Pointer, sz uintptr)
    52	
    53	// These are called from msan_amd64.s
    54	//go:cgo_import_static __msan_read_go
    55	//go:cgo_import_static __msan_write_go
    56	//go:cgo_import_static __msan_malloc_go
    57	//go:cgo_import_static __msan_free_go
    58	

View as plain text