mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: identify special functions by flag instead of address
When there are plugins, there may not be a unique copy of runtime functions like goexit, mcall, etc. So identifying them by entry address is problematic. Instead, keep track of each special function using a field in the symbol table. That way, multiple copies of the same runtime function will be treated identically. Fixes #24351 Fixes #23133 Change-Id: Iea3232df8a6af68509769d9ca618f530cc0f84fd Reviewed-on: https://go-review.googlesource.com/100739 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
cd2cb6e3f5
commit
9d4215311b
11 changed files with 181 additions and 84 deletions
|
|
@ -619,7 +619,7 @@ func adjustframe(frame *stkframe, arg unsafe.Pointer) bool {
|
|||
if stackDebug >= 2 {
|
||||
print(" adjusting ", funcname(f), " frame=[", hex(frame.sp), ",", hex(frame.fp), "] pc=", hex(frame.pc), " continpc=", hex(frame.continpc), "\n")
|
||||
}
|
||||
if f.entry == systemstack_switchPC {
|
||||
if f.funcID == funcID_systemstack_switch {
|
||||
// A special routine at the bottom of stack of a goroutine that does an systemstack call.
|
||||
// We will allow it to be copied even though we don't
|
||||
// have full GC info for it (because it is written in asm).
|
||||
|
|
@ -1110,7 +1110,8 @@ func shrinkstack(gp *g) {
|
|||
if debug.gcshrinkstackoff > 0 {
|
||||
return
|
||||
}
|
||||
if gp.startpc == gcBgMarkWorkerPC {
|
||||
f := findfunc(gp.startpc)
|
||||
if f.valid() && f.funcID == funcID_gcBgMarkWorker {
|
||||
// We're not allowed to shrink the gcBgMarkWorker
|
||||
// stack (see gcBgMarkWorker for explanation).
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue