From 48ed1e61139d4089d8991e1387cec392f0b8378b Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Mon, 4 Nov 2019 04:31:20 +1100 Subject: [PATCH] cmd/internal/obj/riscv: handle AGETCALLERPC Updates #27532 Change-Id: Ib3e44ec524ed20bbfbbaf40df22cec335460f3ef Reviewed-on: https://go-review.googlesource.com/c/go/+/204629 Run-TryBot: Joel Sing TryBot-Result: Gobot Gobot Reviewed-by: Cherry Zhang --- src/cmd/internal/obj/riscv/obj.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/cmd/internal/obj/riscv/obj.go b/src/cmd/internal/obj/riscv/obj.go index 903b2a0eeb..4117438d95 100644 --- a/src/cmd/internal/obj/riscv/obj.go +++ b/src/cmd/internal/obj/riscv/obj.go @@ -594,6 +594,22 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { // Additional instruction rewriting. Any rewrites that change the number // of instructions must occur here (before jump target resolution). for p := cursym.Func.Text; p != nil; p = p.Link { + if p.As == obj.AGETCALLERPC { + // Handle AGETCALLERPC early so we can use AMOV, which is then + // rewritten below. + if cursym.Leaf() { + // MOV LR, Rd + p.As = AMOV + p.From.Type = obj.TYPE_REG + p.From.Reg = REG_LR + } else { + // MOV (RSP), Rd + p.As = AMOV + p.From.Type = obj.TYPE_MEM + p.From.Reg = REG_SP + } + } + switch p.As { case AMOV, AMOVB, AMOVH, AMOVW, AMOVBU, AMOVHU, AMOVWU, AMOVF, AMOVD: // Rewrite MOV pseudo-instructions. This cannot be done in -- 2.50.0