mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/internal/ld, cmd/6l: external linking for windows/amd64
Change-Id: I2d2ea233f976aab3f356f9b508cdd246d5013e30 Signed-off-by: Shenghou Ma <minux@golang.org> Reviewed-on: https://go-review.googlesource.com/7534 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
484d9399de
commit
e7df053977
4 changed files with 66 additions and 10 deletions
|
|
@ -204,10 +204,16 @@ func adddynrel(s *ld.LSym, r *ld.Reloc) {
|
|||
switch r.Type {
|
||||
case ld.R_CALL,
|
||||
ld.R_PCREL:
|
||||
addpltsym(targ)
|
||||
r.Sym = ld.Linklookup(ld.Ctxt, ".plt", 0)
|
||||
r.Add = int64(targ.Plt)
|
||||
return
|
||||
if ld.HEADTYPE == ld.Hwindows {
|
||||
// nothing to do, the relocation will be laid out in pereloc1
|
||||
return
|
||||
} else {
|
||||
// for both ELF and Mach-O
|
||||
addpltsym(targ)
|
||||
r.Sym = ld.Linklookup(ld.Ctxt, ".plt", 0)
|
||||
r.Add = int64(targ.Plt)
|
||||
return
|
||||
}
|
||||
|
||||
case ld.R_ADDR:
|
||||
if s.Type == ld.STEXT && ld.Iself {
|
||||
|
|
@ -262,6 +268,11 @@ func adddynrel(s *ld.LSym, r *ld.Reloc) {
|
|||
r.Type = 256 // ignore during relocsym
|
||||
return
|
||||
}
|
||||
|
||||
if ld.HEADTYPE == ld.Hwindows {
|
||||
// nothing to do, the relocation will be laid out in pereloc1
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
ld.Ctxt.Cursym = s
|
||||
|
|
@ -393,6 +404,40 @@ func machoreloc1(r *ld.Reloc, sectoff int64) int {
|
|||
return 0
|
||||
}
|
||||
|
||||
func pereloc1(r *ld.Reloc, sectoff int64) bool {
|
||||
var v uint32
|
||||
|
||||
rs := r.Xsym
|
||||
|
||||
if rs.Dynid < 0 {
|
||||
ld.Diag("reloc %d to non-coff symbol %s type=%d", r.Type, rs.Name, rs.Type)
|
||||
return false
|
||||
}
|
||||
|
||||
ld.Thearch.Lput(uint32(sectoff))
|
||||
ld.Thearch.Lput(uint32(rs.Dynid))
|
||||
|
||||
switch r.Type {
|
||||
default:
|
||||
return false
|
||||
|
||||
case ld.R_ADDR:
|
||||
if r.Siz == 8 {
|
||||
v = ld.IMAGE_REL_AMD64_ADDR64
|
||||
} else {
|
||||
v = ld.IMAGE_REL_AMD64_ADDR32
|
||||
}
|
||||
|
||||
case ld.R_CALL,
|
||||
ld.R_PCREL:
|
||||
v = ld.IMAGE_REL_AMD64_REL32
|
||||
}
|
||||
|
||||
ld.Thearch.Wput(uint16(v))
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func archreloc(r *ld.Reloc, s *ld.LSym, val *int64) int {
|
||||
return -1
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue