github.com/sagernet/sing@v0.2.6/common/buf/ptr.go (about)

     1  //go:build !disable_unsafe
     2  
     3  package buf
     4  
     5  import (
     6  	"unsafe"
     7  
     8  	"github.com/sagernet/sing/common"
     9  )
    10  
    11  type dbgVar struct {
    12  	name  string
    13  	value *int32
    14  }
    15  
    16  //go:linkname dbgvars runtime.dbgvars
    17  var dbgvars any
    18  
    19  // go.info.runtime.dbgvars: relocation target go.info.[]github.com/sagernet/sing/common/buf.dbgVar not defined
    20  // var dbgvars []dbgVar
    21  
    22  func init() {
    23  	if !common.UnsafeBuffer {
    24  		return
    25  	}
    26  	debugVars := *(*[]dbgVar)(unsafe.Pointer(&dbgvars))
    27  	for _, v := range debugVars {
    28  		if v.name == "invalidptr" {
    29  			*v.value = 0
    30  			return
    31  		}
    32  	}
    33  	panic("can't disable invalidptr")
    34  }