aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorlimeidan <limeidan@loongson.cn>2025-11-24 17:28:42 +0800
committerabner chenc <chenguoqi@loongson.cn>2025-11-26 18:59:35 -0800
commitd8269ab0d59212fed0f5975f7083f6bbbfc00ec4 (patch)
tree36be981db2c4423b3ce5d1401c8f8fde3fa8740e /src/cmd/internal/obj
parentc6d64f85565e6a934110c4928ca95fea0045ebaa (diff)
downloadgo-d8269ab0d59212fed0f5975f7083f6bbbfc00ec4.tar.xz
cmd/link, cmd/internal/obj: fix a remote call failure issue
When a function call exceeds the immediate value range of the instruction, a trampoline is required to assist in the jump. Trampoline is only omitted when plt is needed; otherwise, a check is required. Change-Id: I7fe2e08d75f6f574475837b560e650bbd4215858 Reviewed-on: https://go-review.googlesource.com/c/go/+/724580 Reviewed-by: abner chenc <chenguoqi@loongson.cn> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: sophie zhao <zhaoxiaolin@loongson.cn> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/loong64/asm.go3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go
index 3fcd6eafd7..f992518015 100644
--- a/src/cmd/internal/obj/loong64/asm.go
+++ b/src/cmd/internal/obj/loong64/asm.go
@@ -2437,6 +2437,9 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) {
v := int32(0)
if p.To.Target() != nil {
v = int32(p.To.Target().Pc-p.Pc) >> 2
+ if v < -1<<25 || v >= 1<<25 {
+ c.ctxt.Diag("branch too far \n%v", p)
+ }
}
o1 = OP_B_BL(c.opirr(p.As), uint32(v))
if p.To.Sym != nil {