From e481aac0e1f7c26ce5c86c5771bcd4ca81e90765 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aram=20H=C4=83v=C4=83rneanu?= Date: Mon, 30 Mar 2015 13:46:28 +0200 Subject: [PATCH] cmd/6l: use .plt instead of .got on Solaris Solaris requires all external procedures to be accessed through the PLT. If 6l won't do it, /bin/ld will, so all the code written with .GOT in mind won't work with the external linker. This CL makes external linking work, opening the path to cgo support on Solaris. This CL breaks the Solaris build, this is fixed in subsequent CLs in this series. Change-Id: If370a79f49fdbe66d28b89fa463b4f3e91685f69 Reviewed-on: https://go-review.googlesource.com/8214 Reviewed-by: Ian Lance Taylor Reviewed-by: Minux Ma --- src/cmd/6l/asm.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cmd/6l/asm.go b/src/cmd/6l/asm.go index 4df8ac7196..a025ce6ea6 100644 --- a/src/cmd/6l/asm.go +++ b/src/cmd/6l/asm.go @@ -272,6 +272,12 @@ func adddynrel(s *ld.LSym, r *ld.Reloc) { case obj.R_ADDR: if s.Type == obj.STEXT && ld.Iself { + if ld.HEADTYPE == obj.Hsolaris { + addpltsym(targ) + r.Sym = ld.Linklookup(ld.Ctxt, ".plt", 0) + r.Add += int64(targ.Plt) + return + } // The code is asking for the address of an external // function. We provide it with the address of the // correspondent GOT symbol. -- 2.48.1