Commit ec77b8e0 authored by Lynn Boger's avatar Lynn Boger Committed by David Chase

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: default avatarCherry Zhang <cherryyz@google.com>
Reviewed-by: default avatarDavid Chase <drchase@google.com>
parent 3df059ec
...@@ -325,12 +325,17 @@ func isRuntimeDepPkg(pkg string) bool { ...@@ -325,12 +325,17 @@ func isRuntimeDepPkg(pkg string) bool {
} }
// detect too-far jumps in function s, and add trampolines if necessary // 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) { func trampoline(ctxt *Link, s *Symbol) {
if Thearch.Trampoline == nil { if Thearch.Trampoline == nil {
return // no need or no support of trampolines on this arch return // no need or no support of trampolines on this arch
} }
if Linkmode == LinkExternal && SysArch.Family == sys.PPC64 {
return
}
for ri := range s.R { for ri := range s.R {
r := &s.R[ri] r := &s.R[ri]
if !r.Type.IsDirectJump() { if !r.Type.IsDirectJump() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment