mirror of https://github.com/golang/go.git
cmd/link: don't use trampolines in ppc64le ext linking
On ppc64x, trampolines are used to resolve too-far branches for internal linking. The external linking, solution on ppc64x is to split text sections when they get too large, allowing the external linker to handle the long branches. On arm trampolines are generanted for too-far branches for internal and external linking. When the change was made recently to enable trampolines for external linking on arm, that broke the ppc64x fix for too-far branches with external linking. The fix adds a check to use trampolines only for internal linking with ppc64x. Fixes #17795 Change-Id: Icce968fb96545f10a913e07654514643bce96261 Reviewed-on: https://go-review.googlesource.com/32853 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
3df059ece5
commit
ec77b8e09c
|
|
@ -325,12 +325,17 @@ func isRuntimeDepPkg(pkg string) bool {
|
|||
}
|
||||
|
||||
// detect too-far jumps in function s, and add trampolines if necessary
|
||||
// (currently only ARM supports trampoline insertion)
|
||||
// ARM supports trampoline insertion for internal and external linking
|
||||
// PPC64 & PPC64LE support trampoline insertion for internal linking only
|
||||
func trampoline(ctxt *Link, s *Symbol) {
|
||||
if Thearch.Trampoline == nil {
|
||||
return // no need or no support of trampolines on this arch
|
||||
}
|
||||
|
||||
if Linkmode == LinkExternal && SysArch.Family == sys.PPC64 {
|
||||
return
|
||||
}
|
||||
|
||||
for ri := range s.R {
|
||||
r := &s.R[ri]
|
||||
if !r.Type.IsDirectJump() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue