cmd/internal/obj: add prologue_end DWARF stmt for riscv64

This patch adds prologue_end statement to the DWARF info for riscv64,
which delve debugger uses for skip stacksplit prologue.

Change-Id: I4e5d9c26202385f65b3118b16f53f66de9d327f0
Reviewed-on: https://go-review.googlesource.com/c/go/+/620295
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
Reviewed-by: Meng Zhuo <mengzhuo1203@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
Lin Runze 2024-10-15 15:18:08 +08:00 committed by Cherry Mui
parent e5e552b816
commit b45c7f1661
1 changed files with 6 additions and 0 deletions

View File

@ -23,6 +23,7 @@ package riscv
import ( import (
"cmd/internal/obj" "cmd/internal/obj"
"cmd/internal/objabi" "cmd/internal/objabi"
"cmd/internal/src"
"cmd/internal/sys" "cmd/internal/sys"
"fmt" "fmt"
"internal/abi" "internal/abi"
@ -427,18 +428,23 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) {
prologue = stacksplit(ctxt, prologue, cursym, newprog, stacksize) // emit split check prologue = stacksplit(ctxt, prologue, cursym, newprog, stacksize) // emit split check
} }
q := prologue
if stacksize != 0 { if stacksize != 0 {
prologue = ctxt.StartUnsafePoint(prologue, newprog) prologue = ctxt.StartUnsafePoint(prologue, newprog)
// Actually save LR. // Actually save LR.
prologue = obj.Appendp(prologue, newprog) prologue = obj.Appendp(prologue, newprog)
prologue.As = AMOV prologue.As = AMOV
prologue.Pos = q.Pos
prologue.From = obj.Addr{Type: obj.TYPE_REG, Reg: REG_LR} prologue.From = obj.Addr{Type: obj.TYPE_REG, Reg: REG_LR}
prologue.To = obj.Addr{Type: obj.TYPE_MEM, Reg: REG_SP, Offset: -stacksize} prologue.To = obj.Addr{Type: obj.TYPE_MEM, Reg: REG_SP, Offset: -stacksize}
// Insert stack adjustment. // Insert stack adjustment.
prologue = obj.Appendp(prologue, newprog) prologue = obj.Appendp(prologue, newprog)
prologue.As = AADDI prologue.As = AADDI
prologue.Pos = q.Pos
prologue.Pos = prologue.Pos.WithXlogue(src.PosPrologueEnd)
prologue.From = obj.Addr{Type: obj.TYPE_CONST, Offset: -stacksize} prologue.From = obj.Addr{Type: obj.TYPE_CONST, Offset: -stacksize}
prologue.Reg = REG_SP prologue.Reg = REG_SP
prologue.To = obj.Addr{Type: obj.TYPE_REG, Reg: REG_SP} prologue.To = obj.Addr{Type: obj.TYPE_REG, Reg: REG_SP}