[dev.link] cmd/link: port asmb2 pe generation over to generic functions
Change-Id: I09ab68e1fa99bf0260b7e820b8747d5d418fd581
Reviewed-on: https://go-review.googlesource.com/c/go/+/234890
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
diff --git a/src/cmd/link/internal/amd64/asm.go b/src/cmd/link/internal/amd64/asm.go
index 514edad..849095d 100644
--- a/src/cmd/link/internal/amd64/asm.go
+++ b/src/cmd/link/internal/amd64/asm.go
@@ -686,6 +686,9 @@
if ctxt.IsElf() {
panic("elf should be generic")
}
+ if ctxt.IsWindows() {
+ panic("pe should be generic")
+ }
switch ctxt.HeadType {
default:
@@ -693,7 +696,6 @@
fallthrough
case objabi.Hplan9:
- case objabi.Hwindows:
break
}
@@ -701,24 +703,15 @@
ld.Spsize = 0
ld.Lcsize = 0
if !*ld.FlagS {
- if ctxt.HeadType == objabi.Hplan9 {
- *ld.FlagS = true
- symo := int64(ld.Segdata.Fileoff + ld.Segdata.Filelen)
- ctxt.Out.SeekSet(symo)
- ld.Asmplan9sym(ctxt)
- }
+ *ld.FlagS = true
+ symo := int64(ld.Segdata.Fileoff + ld.Segdata.Filelen)
+ ctxt.Out.SeekSet(symo)
+ ld.Asmplan9sym(ctxt)
}
ctxt.Out.SeekSet(0)
- switch ctxt.HeadType {
- default:
- case objabi.Hplan9: /* plan9 */
- magic := uint32(4*26*26 + 7)
- ld.WritePlan9Header(ctxt.Out, magic, ld.Entryvalue(ctxt), true)
-
- case objabi.Hwindows:
- ld.Asmbpe(ctxt)
- }
+ magic := uint32(4*26*26 + 7)
+ ld.WritePlan9Header(ctxt.Out, magic, ld.Entryvalue(ctxt), true)
}
func tlsIEtoLE(P []byte, off, size int) {
diff --git a/src/cmd/link/internal/arm/asm.go b/src/cmd/link/internal/arm/asm.go
index 8197fb9..3515a60 100644
--- a/src/cmd/link/internal/arm/asm.go
+++ b/src/cmd/link/internal/arm/asm.go
@@ -675,27 +675,20 @@
if ctxt.IsElf() {
panic("elf should be generic")
}
+ if ctxt.IsWindows() {
+ panic("pe should be generic")
+ }
/* output symbol table */
ld.Symsize = 0
ld.Lcsize = 0
if !*ld.FlagS {
- if ctxt.IsPlan9() {
- symo := uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
- ctxt.Out.SeekSet(int64(symo))
- ld.Asmplan9sym(ctxt)
- }
+ symo := uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
+ ctxt.Out.SeekSet(int64(symo))
+ ld.Asmplan9sym(ctxt)
}
- ctxt.Out.SeekSet(0)
- switch ctxt.HeadType {
- default:
- case objabi.Hplan9: /* plan 9 */
- ld.WritePlan9Header(ctxt.Out, 0x647, ld.Entryvalue(ctxt), false)
-
- case objabi.Hwindows:
- ld.Asmbpe(ctxt)
- }
+ ld.WritePlan9Header(ctxt.Out, 0x647, ld.Entryvalue(ctxt), false)
if *ld.FlagC {
fmt.Printf("textsize=%d\n", ld.Segtext.Filelen)
diff --git a/src/cmd/link/internal/ld/asmb.go b/src/cmd/link/internal/ld/asmb.go
index eccd3e5..aebd1d2 100644
--- a/src/cmd/link/internal/ld/asmb.go
+++ b/src/cmd/link/internal/ld/asmb.go
@@ -108,6 +108,13 @@
Asmbelf(ctxt, symo)
return true
}
+ if ctxt.IsWindows() {
+ Symsize = 0
+ Spsize = 0
+ Lcsize = 0
+ Asmbpe(ctxt)
+ return true
+ }
return false
}
diff --git a/src/cmd/link/internal/x86/asm.go b/src/cmd/link/internal/x86/asm.go
index dc5b56a..746661a 100644
--- a/src/cmd/link/internal/x86/asm.go
+++ b/src/cmd/link/internal/x86/asm.go
@@ -517,26 +517,20 @@
if ctxt.IsElf() {
panic("elf should be generic")
}
+ if ctxt.IsWindows() {
+ panic("pe should be generic")
+ }
ld.Symsize = 0
ld.Spsize = 0
ld.Lcsize = 0
if !*ld.FlagS {
- if ctxt.HeadType == objabi.Hplan9 {
- symo := uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
- ctxt.Out.SeekSet(int64(symo))
- ld.Asmplan9sym(ctxt)
- }
+ symo := uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
+ ctxt.Out.SeekSet(int64(symo))
+ ld.Asmplan9sym(ctxt)
}
ctxt.Out.SeekSet(0)
- switch ctxt.HeadType {
- default:
- case objabi.Hplan9: /* plan9 */
- magic := uint32(4*11*11 + 7)
- ld.WritePlan9Header(ctxt.Out, magic, ld.Entryvalue(ctxt), false)
-
- case objabi.Hwindows:
- ld.Asmbpe(ctxt)
- }
+ magic := uint32(4*11*11 + 7)
+ ld.WritePlan9Header(ctxt.Out, magic, ld.Entryvalue(ctxt), false)
}