mirror of
https://github.com/golang/go
synced 2024-11-05 17:36:15 -07:00
cmd/internal/obj, cmd/link: darwin dynlink support
This makes it possible for cmd/compile, when run with -dynlink on darwin/amd64, to generate TLS_LE relocations which the linker then turns into the appropriate PC-relative GOT load. Change-Id: I1a71da432608bdb108ff66c22de600100209c873 Reviewed-on: https://go-review.googlesource.com/29393 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
1d3fae461c
commit
e9fddf8f86
@ -2769,7 +2769,7 @@ func vaddr(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, r *obj.Reloc) int64 {
|
||||
log.Fatalf("reloc")
|
||||
}
|
||||
|
||||
if !ctxt.Flag_shared || isAndroid {
|
||||
if !ctxt.Flag_shared || isAndroid || ctxt.Headtype == obj.Hdarwin {
|
||||
r.Type = obj.R_TLS_LE
|
||||
r.Siz = 4
|
||||
r.Off = -1 // caller must fill in
|
||||
|
@ -425,7 +425,7 @@ func machoreloc1(s *ld.Symbol, r *ld.Reloc, sectoff int64) int {
|
||||
|
||||
rs := r.Xsym
|
||||
|
||||
if rs.Type == obj.SHOSTOBJ || r.Type == obj.R_PCREL {
|
||||
if rs.Type == obj.SHOSTOBJ || r.Type == obj.R_PCREL || r.Type == obj.R_GOTPCREL {
|
||||
if rs.Dynid < 0 {
|
||||
ld.Errorf(s, "reloc %d to non-macho symbol %s type=%d", r.Type, rs.Name, rs.Type)
|
||||
return -1
|
||||
@ -456,6 +456,9 @@ func machoreloc1(s *ld.Symbol, r *ld.Reloc, sectoff int64) int {
|
||||
case obj.R_PCREL:
|
||||
v |= 1 << 24 // pc-relative bit
|
||||
v |= ld.MACHO_X86_64_RELOC_SIGNED << 28
|
||||
case obj.R_GOTPCREL:
|
||||
v |= 1 << 24 // pc-relative bit
|
||||
v |= ld.MACHO_X86_64_RELOC_GOT_LOAD << 28
|
||||
}
|
||||
|
||||
switch r.Siz {
|
||||
|
Loading…
Reference in New Issue
Block a user