Index: src/cmd/link/internal/ld/pcln.go
--- src/cmd/link/internal/ld/pcln.go.orig
+++ src/cmd/link/internal/ld/pcln.go
@@ -157,9 +157,10 @@ func computeDeferReturn(ctxt *Link, deferReturnSym, s 
 						deferreturn -= 11
 					}
 				case sys.AMD64:
-					deferreturn--
-
-				case sys.ARM, sys.ARM64, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64:
+					deferreturn -= 5 // four bytes for endbr64, one byte for callq
+				case sys.ARM64:
+					deferreturn -= 4 // bti before call
+				case sys.ARM, sys.Loong64, sys.MIPS, sys.MIPS64, sys.PPC64, sys.RISCV64:
 					// no change
 				case sys.S390X:
 					deferreturn -= 2
