mirror of
https://github.com/golang/go
synced 2024-11-26 14:56:47 -07:00
runtime: check for findmoduledatap returning nil
The findmoduledatap function will not return nil in ordinary use, but check for nil to try to avoid crashing when we are already crashing. Update #11783. Change-Id: If7b1adb51efab13b4c1a37b6f3c9ad22641a0b56 Reviewed-on: https://go-review.googlesource.com/12391 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
e1ee31400a
commit
692054e76e
@ -223,6 +223,13 @@ func pcvalue(f *_func, off int32, targetpc uintptr, strict bool) int32 {
|
||||
return -1
|
||||
}
|
||||
datap := findmoduledatap(f.entry) // inefficient
|
||||
if datap == nil {
|
||||
if strict && panicking == 0 {
|
||||
print("runtime: no module data for ", hex(f.entry), "\n")
|
||||
throw("no module data")
|
||||
}
|
||||
return -1
|
||||
}
|
||||
p := datap.pclntable[off:]
|
||||
pc := f.entry
|
||||
val := int32(-1)
|
||||
@ -266,6 +273,9 @@ func cfuncname(f *_func) *byte {
|
||||
return nil
|
||||
}
|
||||
datap := findmoduledatap(f.entry) // inefficient
|
||||
if datap == nil {
|
||||
return nil
|
||||
}
|
||||
return (*byte)(unsafe.Pointer(&datap.pclntable[f.nameoff]))
|
||||
}
|
||||
|
||||
@ -275,6 +285,9 @@ func funcname(f *_func) string {
|
||||
|
||||
func funcline1(f *_func, targetpc uintptr, strict bool) (file string, line int32) {
|
||||
datap := findmoduledatap(f.entry) // inefficient
|
||||
if datap == nil {
|
||||
return "?", 0
|
||||
}
|
||||
fileno := int(pcvalue(f, f.pcfile, targetpc, strict))
|
||||
line = pcvalue(f, f.pcln, targetpc, strict)
|
||||
if fileno == -1 || line == -1 || fileno >= len(datap.filetab) {
|
||||
|
Loading…
Reference in New Issue
Block a user