]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use unsafe.Slice in getStackMap
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Sun, 8 May 2022 16:26:28 +0000 (23:26 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Wed, 11 May 2022 04:25:28 +0000 (04:25 +0000)
CL 362934 added open code for unsafe.Slice, so using it now no longer
negatively impacts the performance.

Updates #48798

Change-Id: Ifbabe8bc1cc4349c5bcd11586a11fc99bcb388b1
Reviewed-on: https://go-review.googlesource.com/c/go/+/404974
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/runtime/stack.go

index b7df2317223260868f5dd8160b1fe512a8e5579f..3a22dcd552fdd70b082aba457dafdb7451988ce3 100644 (file)
@@ -1346,7 +1346,8 @@ func getStackMap(frame *stkframe, cache *pcvalueCache, debug bool) (locals, args
                if p != nil {
                        n := *(*uintptr)(p)
                        p = add(p, goarch.PtrSize)
-                       *(*slice)(unsafe.Pointer(&objs)) = slice{array: noescape(p), len: int(n), cap: int(n)}
+                       r0 := (*stackObjectRecord)(noescape(p))
+                       objs = unsafe.Slice(r0, int(n))
                        // Note: the noescape above is needed to keep
                        // getStackMap from "leaking param content:
                        // frame".  That leak propagates up to getgcmask, then