mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: add -d=checkptr to validate unsafe.Pointer rules
This CL adds -d=checkptr as a compile-time option for adding instrumentation to check that Go code is following unsafe.Pointer safety rules dynamically. In particular, it currently checks two things: 1. When converting unsafe.Pointer to *T, make sure the resulting pointer is aligned appropriately for T. 2. When performing pointer arithmetic, if the result points to a Go heap object, make sure we can find an unsafe.Pointer-typed operand that pointed into the same object. These checks are currently disabled for the runtime, and can also be disabled through a new //go:nocheckptr annotation. The latter is necessary for functions like strings.noescape, which intentionally violate safety rules to workaround escape analysis limitations. Fixes #22218. Change-Id: If5a51273881d93048f74bcff10a3275c9c91da6a Reviewed-on: https://go-review.googlesource.com/c/go/+/162237 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
3b003c3edb
commit
80a6fedea0
9 changed files with 159 additions and 1 deletions
|
|
@ -40,6 +40,7 @@ var (
|
|||
|
||||
var (
|
||||
Debug_append int
|
||||
Debug_checkptr int
|
||||
Debug_closure int
|
||||
Debug_compilelater int
|
||||
debug_dclstack int
|
||||
|
|
@ -65,6 +66,7 @@ var debugtab = []struct {
|
|||
val interface{} // must be *int or *string
|
||||
}{
|
||||
{"append", "print information about append compilation", &Debug_append},
|
||||
{"checkptr", "instrument unsafe pointer conversions", &Debug_checkptr},
|
||||
{"closure", "print information about closure compilation", &Debug_closure},
|
||||
{"compilelater", "compile functions as late as possible", &Debug_compilelater},
|
||||
{"disablenil", "disable nil checks", &disable_checknil},
|
||||
|
|
@ -433,6 +435,11 @@ func Main(archInit func(*Arch)) {
|
|||
}
|
||||
}
|
||||
|
||||
// Runtime can't use -d=checkptr, at least not yet.
|
||||
if compiling_runtime {
|
||||
Debug_checkptr = 0
|
||||
}
|
||||
|
||||
// set via a -d flag
|
||||
Ctxt.Debugpcln = Debug_pctab
|
||||
if flagDWARF {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue