]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj: add prologue_end DWARF stmt for ppc64
authorDerek Parker <parkerderek86@gmail.com>
Wed, 28 Oct 2020 20:54:27 +0000 (20:54 +0000)
committerDmitri Shuralyov <dmitshur@golang.org>
Wed, 4 Nov 2020 23:24:22 +0000 (23:24 +0000)
This patch adds a prologue_end statement to the DWARF information for
the ppc64 arch.

Prologue end is used by the Delve debugger in order to determine where
to set a breakpoint to avoid the stacksplit prologue.

Updates #36612

Change-Id: Ifb16c1476fe716a0bf493c5486d1d88ebe8d0253
GitHub-Last-Rev: 77a217206d529df8bf8d4ef10a5347b6ae524612
GitHub-Pull-Request: golang/go#42261
Reviewed-on: https://go-review.googlesource.com/c/go/+/266019
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Alessandro Arzilli <alessandro.arzilli@gmail.com>
Trust: Dmitri Shuralyov <dmitshur@golang.org>

src/cmd/internal/obj/ppc64/obj9.go

index 3ab19de602a0c38097a80bab7fba8d6a180cebe5..fddf552156cfbbe831758a2fdb26b613f2027ab4 100644 (file)
@@ -32,6 +32,7 @@ package ppc64
 import (
        "cmd/internal/obj"
        "cmd/internal/objabi"
+       "cmd/internal/src"
        "cmd/internal/sys"
 )
 
@@ -672,6 +673,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
                        // save the link register and update the stack, since that code is
                        // called directly from C/C++ and can't clobber REGTMP (R31).
                        if autosize != 0 && c.cursym.Name != "runtime.racecallbackthunk" {
+                               var prologueEnd *obj.Prog
                                // Save the link register and update the SP.  MOVDU is used unless
                                // the frame size is too large.  The link register must be saved
                                // even for non-empty leaf functions so that traceback works.
@@ -685,6 +687,8 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
                                        q.To.Type = obj.TYPE_REG
                                        q.To.Reg = REGTMP
 
+                                       prologueEnd = q
+
                                        q = obj.Appendp(q, c.newprog)
                                        q.As = AMOVDU
                                        q.Pos = p.Pos
@@ -720,6 +724,8 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
                                        q.To.Offset = int64(-autosize)
                                        q.To.Reg = REGSP
 
+                                       prologueEnd = q
+
                                        q = obj.Appendp(q, c.newprog)
                                        q.As = AADD
                                        q.Pos = p.Pos
@@ -730,8 +736,8 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
                                        q.Spadj = +autosize
 
                                        q = c.ctxt.EndUnsafePoint(q, c.newprog, -1)
-
                                }
+                               prologueEnd.Pos = prologueEnd.Pos.WithXlogue(src.PosPrologueEnd)
                        } else if c.cursym.Func().Text.Mark&LEAF == 0 {
                                // A very few functions that do not return to their caller
                                // (e.g. gogo) are not identified as leaves but still have