...
Run Format

Source file src/runtime/msan.go

Documentation: runtime

  // 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
  

View as plain text