continue
}
ctx.pc = f.Entry() + uintptr(inltree[ix].parentPc) // "caller" pc
- ctx.fn = cfuncnameFromNameOff(fi, inltree[ix].nameOff)
+ name := funcnameFromNameOff(fi, inltree[ix].nameOff)
+ ctx.fn = &bytes(name)[0] // assume NUL-terminated
ctx.line = uintptr(line)
ctx.file = &bytes(file)[0] // assume NUL-terminated
ctx.off = pc - f.Entry()
break
}
}
- ctx.fn = cfuncname(fi)
+ name := funcname(fi)
+ ctx.fn = &bytes(name)[0] // assume NUL-terminated
ctx.line = uintptr(line)
ctx.file = &bytes(file)[0] // assume NUL-terminated
ctx.off = pc - f.Entry()
return res, true
}
+// funcName returns the string at nameOff in the function name table.
+func (md *moduledata) funcName(nameOff int32) string {
+ if nameOff == 0 {
+ return ""
+ }
+ return gostringnocopy(&md.funcnametab[nameOff])
+}
+
// FuncForPC returns a *Func describing the function that contains the
// given program counter address, or else nil.
//
return -1, 0
}
-func cfuncname(f funcInfo) *byte {
- if !f.valid() || f.nameOff == 0 {
- return nil
- }
- return &f.datap.funcnametab[f.nameOff]
-}
-
func funcname(f funcInfo) string {
- return gostringnocopy(cfuncname(f))
+ if !f.valid() {
+ return ""
+ }
+ return f.datap.funcName(f.nameOff)
}
func funcpkgpath(f funcInfo) string {
return name[:i]
}
-func cfuncnameFromNameOff(f funcInfo, nameOff int32) *byte {
+func funcnameFromNameOff(f funcInfo, nameOff int32) string {
if !f.valid() {
- return nil
+ return ""
}
- return &f.datap.funcnametab[nameOff]
-}
-
-func funcnameFromNameOff(f funcInfo, nameOff int32) string {
- return gostringnocopy(cfuncnameFromNameOff(f, nameOff))
+ return f.datap.funcName(nameOff)
}
func funcfile(f funcInfo, fileno int32) string {