github.com/oarkflow/log@v1.0.78/runtime.go (about) 1 package log 2 3 import ( 4 "unsafe" 5 ) 6 7 type funcInfo struct { 8 _func *uintptr 9 datap unsafe.Pointer //nolint:unused 10 } 11 12 //go:linkname findfunc runtime.findfunc 13 func findfunc(pc uintptr) funcInfo 14 15 //go:linkname funcInfoEntry runtime.funcInfo.entry 16 func funcInfoEntry(f funcInfo) uintptr 17 18 //go:linkname funcline1 runtime.funcline1 19 func funcline1(f funcInfo, targetpc uintptr, strict bool) (file string, line int32) 20 21 func pcFileLine(pc uintptr) (file string, line int32) { 22 funcInfo := findfunc(pc) 23 if funcInfo._func == nil { 24 return 25 } 26 27 entry := funcInfoEntry(funcInfo) 28 29 if pc > entry { 30 // We store the pc of the start of the instruction following 31 // the instruction in question (the call or the inline mark). 32 // This is done for historical reasons, and to make FuncForPC 33 // work correctly for entries in the result of runtime.Callers. 34 pc-- 35 } 36 37 return funcline1(funcInfo, pc, false) 38 }