diff options
| author | Shenghou Ma <minux@golang.org> | 2015-03-09 03:05:40 -0400 |
|---|---|---|
| committer | Minux Ma <minux@golang.org> | 2015-03-24 03:23:16 +0000 |
| commit | 04642e92aca42076662edd3eedc57873bb1568dd (patch) | |
| tree | cd939db093c6a26a638dd636dc58164226de640f /src/cmd/8l | |
| parent | b6ed943bef2c984fe9ca48b5f80594bf7ba2a6e5 (diff) | |
| download | go-04642e92aca42076662edd3eedc57873bb1568dd.tar.xz | |
cmd/internal/ld, cmd/8l: external linking for windows/386
Update #4069: this CL fixes the issue on windows/386.
Signed-off-by: Shenghou Ma <minux@golang.org>
Change-Id: I2d2ea233f976aab3f356f9b508cdd246d5013e2e
Reviewed-on: https://go-review.googlesource.com/7283
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/cmd/8l')
| -rw-r--r-- | src/cmd/8l/asm.go | 35 | ||||
| -rw-r--r-- | src/cmd/8l/obj.go | 4 |
2 files changed, 38 insertions, 1 deletions
diff --git a/src/cmd/8l/asm.go b/src/cmd/8l/asm.go index 59543fdb1a..49ff0808ae 100644 --- a/src/cmd/8l/asm.go +++ b/src/cmd/8l/asm.go @@ -235,6 +235,11 @@ func adddynrel(s *ld.LSym, r *ld.Reloc) { r.Type = 256 // ignore during relocsym return } + + if ld.HEADTYPE == ld.Hwindows && s.Size == PtrSize { + // nothing to do, the relocation will be laid out in pereloc1 + return + } } ld.Ctxt.Cursym = s @@ -332,6 +337,36 @@ 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: + v = ld.IMAGE_REL_I386_DIR32 + + case ld.R_CALL, + ld.R_PCREL: + v = ld.IMAGE_REL_I386_REL32 + } + + ld.Thearch.Wput(uint16(v)) + + return true +} + func archreloc(r *ld.Reloc, s *ld.LSym, val *int64) int { if ld.Linkmode == ld.LinkExternal { return -1 diff --git a/src/cmd/8l/obj.go b/src/cmd/8l/obj.go index 3e0e478363..938a77700a 100644 --- a/src/cmd/8l/obj.go +++ b/src/cmd/8l/obj.go @@ -68,6 +68,7 @@ func linkarchinit() { ld.Thearch.Elfsetupplt = elfsetupplt ld.Thearch.Gentext = gentext ld.Thearch.Machoreloc1 = machoreloc1 + ld.Thearch.PEreloc1 = pereloc1 ld.Thearch.Lput = ld.Lputl ld.Thearch.Wput = ld.Wputl ld.Thearch.Vput = ld.Vputl @@ -99,7 +100,8 @@ func archinit() { ld.Hfreebsd, ld.Hlinux, ld.Hnetbsd, - ld.Hopenbsd: + ld.Hopenbsd, + ld.Hwindows: break } |
