mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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:
parent
cb0393866a
commit
342f17eaf7
3 changed files with 120 additions and 29 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue