github.com/nikandfor/loc@v0.5.1/unsafe_go1.20.go (about)

     1  //go:build nikandfor_loc_unsafe && go1.20
     2  // +build nikandfor_loc_unsafe,go1.20
     3  
     4  package loc
     5  
     6  import "unsafe"
     7  
     8  type (
     9  	funcID uint8
    10  
    11  	funcInfo struct {
    12  		*_func
    13  		datap unsafe.Pointer
    14  	}
    15  
    16  	_func struct {
    17  		entryOff uint32 // start pc, as offset from moduledata.text/pcHeader.textStart
    18  		nameOff  int32  // function name, as index into moduledata.funcnametab.
    19  	}
    20  
    21  	// inlinedCall is the encoding of entries in the FUNCDATA_InlTree table.
    22  	inlinedCall struct {
    23  		funcID    funcID // type of the called function
    24  		_         [3]byte
    25  		nameOff   int32 // offset into pclntab for name of called function
    26  		parentPc  int32 // position of an instruction whose source position is the call site (offset from entry)
    27  		startLine int32 // line number of start of function (func keyword/TEXT directive)
    28  	}
    29  )
    30  
    31  // FuncEntry is functions entry point.
    32  func (l PC) FuncEntry() PC {
    33  	funcInfo := findfunc(l)
    34  	if funcInfo._func == nil {
    35  		return 0
    36  	}
    37  
    38  	return funcInfoEntry(funcInfo)
    39  }