cmd/internal/obj/x86, cmd/link: enable access to global data via GOT when -dynlink on 386

Change-Id: I97504a11291ee60e656efb7704e37387e864d74f
Reviewed-on: https://go-review.googlesource.com/16385
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Michael Hudson-Doyle 2015-11-18 12:30:23 +13:00
parent cb0393866a
commit 342f17eaf7
3 changed files with 120 additions and 29 deletions

View file

@ -267,8 +267,29 @@ func elfreloc1(r *ld.Reloc, sectoff int64) int {
return -1
}
case obj.R_CALL,
obj.R_PCREL:
case obj.R_GOTPCREL:
if r.Siz == 4 {
ld.Thearch.Lput(ld.R_386_GOTPC)
if r.Xsym.Name != "_GLOBAL_OFFSET_TABLE_" {
ld.Thearch.Lput(uint32(sectoff))
ld.Thearch.Lput(ld.R_386_GOT32 | uint32(elfsym)<<8)
}
} else {
return -1
}
case obj.R_CALL:
if r.Siz == 4 {
if r.Xsym.Type == obj.SDYNIMPORT {
ld.Thearch.Lput(ld.R_386_PLT32 | uint32(elfsym)<<8)
} else {
ld.Thearch.Lput(ld.R_386_PC32 | uint32(elfsym)<<8)
}
} else {
return -1
}
case obj.R_PCREL:
if r.Siz == 4 {
ld.Thearch.Lput(ld.R_386_PC32 | uint32(elfsym)<<8)
} else {