diff options
| author | Cherry Mui <cherryyz@google.com> | 2021-06-08 18:07:16 -0400 |
|---|---|---|
| committer | Cherry Mui <cherryyz@google.com> | 2021-06-09 01:31:08 +0000 |
| commit | b20747334a4a3dee51759369a098ef2a0c9dbcff (patch) | |
| tree | 2b2702a6796854a7b847f7e0379d90885778e521 /src/runtime/panic.go | |
| parent | c0a86c10f174dd1679974b48a085273d02803121 (diff) | |
| download | go-b20747334a4a3dee51759369a098ef2a0c9dbcff.tar.xz | |
[dev.typeparams] cmd/compile, runtime: simplify opendefer metadata
Now that deferred functions are always argumentless, we don't
need the metadata for the frame size, number of arguments, and
the information about each argument.
Change-Id: I99e75248a22bda6efbdf2012a2f35beca4c18fd7
Reviewed-on: https://go-review.googlesource.com/c/go/+/326061
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/runtime/panic.go')
| -rw-r--r-- | src/runtime/panic.go | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/src/runtime/panic.go b/src/runtime/panic.go index f6d72995b3..39013163b6 100644 --- a/src/runtime/panic.go +++ b/src/runtime/panic.go @@ -720,8 +720,7 @@ func addOneOpenDeferFrame(gp *g, pc uintptr, sp unsafe.Pointer) { throw("missing deferreturn") } - maxargsize, _ := readvarintUnsafe(fd) - d1 := newdefer(int32(maxargsize)) + d1 := newdefer(0) d1.openDefer = true d1._panic = nil // These are the pc/sp to set after we've @@ -782,27 +781,15 @@ func runOpenDeferFrame(gp *g, d *_defer) bool { done := true fd := d.fd - // Skip the maxargsize - _, fd = readvarintUnsafe(fd) deferBitsOffset, fd := readvarintUnsafe(fd) nDefers, fd := readvarintUnsafe(fd) deferBits := *(*uint8)(unsafe.Pointer(d.varp - uintptr(deferBitsOffset))) for i := int(nDefers) - 1; i >= 0; i-- { // read the funcdata info for this defer - var argWidth, closureOffset, nArgs uint32 - argWidth, fd = readvarintUnsafe(fd) + var closureOffset uint32 closureOffset, fd = readvarintUnsafe(fd) - nArgs, fd = readvarintUnsafe(fd) - if argWidth != 0 || nArgs != 0 { - throw("defer with non-empty frame") - } if deferBits&(1<<i) == 0 { - for j := uint32(0); j < nArgs; j++ { - _, fd = readvarintUnsafe(fd) - _, fd = readvarintUnsafe(fd) - _, fd = readvarintUnsafe(fd) - } continue } closure := *(*func())(unsafe.Pointer(d.varp - uintptr(closureOffset))) |
