]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.link] cmd/link: move plan9 header out of architectures
authorJeremy Faller <jeremy@golang.org>
Thu, 21 May 2020 17:13:20 +0000 (13:13 -0400)
committerJeremy Faller <jeremy@golang.org>
Tue, 26 May 2020 17:45:23 +0000 (17:45 +0000)
Change-Id: I7ccd14e8faa84085e976d23f83b822c05ee6a0ee
Reviewed-on: https://go-review.googlesource.com/c/go/+/234877
Run-TryBot: Jeremy Faller <jeremy@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/link/internal/amd64/asm.go
src/cmd/link/internal/arm/asm.go
src/cmd/link/internal/arm64/asm.go
src/cmd/link/internal/ld/asmb.go
src/cmd/link/internal/mips64/asm.go
src/cmd/link/internal/ppc64/asm.go
src/cmd/link/internal/x86/asm.go

index 6e784b59f4b89c47db3b13ddd10f2051cbdb7d76..43601563e1118d0f0d96596f5241bdfa8e539c52 100644 (file)
@@ -766,19 +766,8 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
        switch ctxt.HeadType {
        default:
        case objabi.Hplan9: /* plan9 */
-               magic := int32(4*26*26 + 7)
-
-               magic |= 0x00008000                           /* fat header */
-               ctxt.Out.Write32b(uint32(magic))              /* magic */
-               ctxt.Out.Write32b(uint32(ld.Segtext.Filelen)) /* sizes */
-               ctxt.Out.Write32b(uint32(ld.Segdata.Filelen))
-               ctxt.Out.Write32b(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
-               ctxt.Out.Write32b(uint32(ld.Symsize)) /* nsyms */
-               vl := ld.Entryvalue(ctxt)
-               ctxt.Out.Write32b(PADDR(uint32(vl))) /* va of entry */
-               ctxt.Out.Write32b(uint32(ld.Spsize)) /* sp offsets */
-               ctxt.Out.Write32b(uint32(ld.Lcsize)) /* line offsets */
-               ctxt.Out.Write64b(uint64(vl))        /* va of entry */
+               magic := uint32(4*26*26 + 7)
+               ld.WritePlan9Header(ctxt.Out, magic, ld.Entryvalue(ctxt), true)
 
        case objabi.Hdarwin:
                ld.Asmbmacho(ctxt)
index db2e2cf69af965ccd70da5c4895532edde15bf60..d9e0df5192899e656092532872f1a040d54ca193 100644 (file)
@@ -718,14 +718,7 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
        switch ctxt.HeadType {
        default:
        case objabi.Hplan9: /* plan 9 */
-               ctxt.Out.Write32b(0x647)                      /* magic */
-               ctxt.Out.Write32b(uint32(ld.Segtext.Filelen)) /* sizes */
-               ctxt.Out.Write32b(uint32(ld.Segdata.Filelen))
-               ctxt.Out.Write32b(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
-               ctxt.Out.Write32b(uint32(ld.Symsize))          /* nsyms */
-               ctxt.Out.Write32b(uint32(ld.Entryvalue(ctxt))) /* va of entry */
-               ctxt.Out.Write32b(0)
-               ctxt.Out.Write32b(uint32(ld.Lcsize))
+               ld.WritePlan9Header(ctxt.Out, 0x647, ld.Entryvalue(ctxt), false)
 
        case objabi.Hlinux,
                objabi.Hfreebsd,
index 94c86e0b46c20dd0c3cd3559d8ea9d847918ff1b..1822d29f2807a99e026eab4230ce586b2b6bf9a3 100644 (file)
@@ -816,9 +816,6 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
                                symo = uint32(ld.Rnd(int64(symo), int64(*ld.FlagRound)))
                        }
 
-               case objabi.Hplan9:
-                       symo = uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
-
                case objabi.Hdarwin:
                        symo = uint32(ld.Segdwarf.Fileoff + uint64(ld.Rnd(int64(ld.Segdwarf.Filelen), int64(*ld.FlagRound))) + uint64(machlink))
                }
@@ -835,9 +832,6 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
                                }
                        }
 
-               case objabi.Hplan9:
-                       ld.Asmplan9sym(ctxt)
-
                case objabi.Hdarwin:
                        if ctxt.LinkMode == ld.LinkExternal {
                                ld.Machoemitreloc(ctxt)
@@ -848,16 +842,6 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
        ctxt.Out.SeekSet(0)
        switch ctxt.HeadType {
        default:
-       case objabi.Hplan9: /* plan 9 */
-               ctxt.Out.Write32(0x647)                      /* magic */
-               ctxt.Out.Write32(uint32(ld.Segtext.Filelen)) /* sizes */
-               ctxt.Out.Write32(uint32(ld.Segdata.Filelen))
-               ctxt.Out.Write32(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
-               ctxt.Out.Write32(uint32(ld.Symsize))          /* nsyms */
-               ctxt.Out.Write32(uint32(ld.Entryvalue(ctxt))) /* va of entry */
-               ctxt.Out.Write32(0)
-               ctxt.Out.Write32(uint32(ld.Lcsize))
-
        case objabi.Hlinux,
                objabi.Hfreebsd,
                objabi.Hnetbsd,
index ede4f91664c950a09a5a6648461efe01b7d37a38..6d553e8ccb3f8bdf00feac29ea8ea69ac2214e12 100644 (file)
@@ -68,3 +68,26 @@ func asmb(ctxt *Link, ldr *loader.Loader) {
 
        wg.Wait()
 }
+
+// WritePlan9Header writes out the plan9 header at the present position in the OutBuf.
+func WritePlan9Header(buf *OutBuf, magic uint32, entry int64, is64Bit bool) {
+       if is64Bit {
+               magic |= 0x00008000
+       }
+       buf.Write32b(magic)
+       buf.Write32b(uint32(Segtext.Filelen))
+       buf.Write32b(uint32(Segdata.Filelen))
+       buf.Write32b(uint32(Segdata.Length - Segdata.Filelen))
+       buf.Write32b(uint32(Symsize))
+       if is64Bit {
+               buf.Write32b(uint32(entry &^ 0x80000000))
+       } else {
+               buf.Write32b(uint32(entry))
+       }
+       buf.Write32b(uint32(Spsize))
+       buf.Write32b(uint32(Lcsize))
+       // amd64 includes the entry at the beginning of the symbol table.
+       if is64Bit {
+               buf.Write64b(uint64(entry))
+       }
+}
index c10bbb4fec11f149ff4e81b060ff1a66f18be964..7719377e2f5da0e96f2f0b2892f67fd457086405 100644 (file)
@@ -172,9 +172,6 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
                                symo = uint32(ld.Segdwarf.Fileoff + ld.Segdwarf.Filelen)
                                symo = uint32(ld.Rnd(int64(symo), int64(*ld.FlagRound)))
                        }
-
-               case objabi.Hplan9:
-                       symo = uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
                }
 
                ctxt.Out.SeekSet(int64(symo))
@@ -188,29 +185,12 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
                                        ld.Elfemitreloc(ctxt)
                                }
                        }
-
-               case objabi.Hplan9:
-                       ld.Asmplan9sym(ctxt)
                }
        }
 
        ctxt.Out.SeekSet(0)
        switch ctxt.HeadType {
        default:
-       case objabi.Hplan9: /* plan 9 */
-               magic := uint32(4*18*18 + 7)
-               if ctxt.Arch == sys.ArchMIPS64LE {
-                       magic = uint32(4*26*26 + 7)
-               }
-               ctxt.Out.Write32(magic)                      /* magic */
-               ctxt.Out.Write32(uint32(ld.Segtext.Filelen)) /* sizes */
-               ctxt.Out.Write32(uint32(ld.Segdata.Filelen))
-               ctxt.Out.Write32(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
-               ctxt.Out.Write32(uint32(ld.Symsize))          /* nsyms */
-               ctxt.Out.Write32(uint32(ld.Entryvalue(ctxt))) /* va of entry */
-               ctxt.Out.Write32(0)
-               ctxt.Out.Write32(uint32(ld.Lcsize))
-
        case objabi.Hlinux,
                objabi.Hfreebsd,
                objabi.Hnetbsd,
index 74c4c4d05d50f219ffc97f2998a1b497a46b6003..dd1b2b463cf35eb4f03ea351e85ab474dc1c95c4 100644 (file)
@@ -1095,9 +1095,6 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
                                symo = uint32(ld.Rnd(int64(symo), int64(*ld.FlagRound)))
                        }
 
-               case objabi.Hplan9:
-                       symo = uint32(ld.Segdata.Fileoff + ld.Segdata.Filelen)
-
                case objabi.Haix:
                        // Nothing to do
                }
@@ -1114,9 +1111,6 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
                                }
                        }
 
-               case objabi.Hplan9:
-                       ld.Asmplan9sym(ctxt)
-
                case objabi.Haix:
                        // symtab must be added once sections have been created in ld.Asmbxcoff
                }
@@ -1125,16 +1119,6 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
        ctxt.Out.SeekSet(0)
        switch ctxt.HeadType {
        default:
-       case objabi.Hplan9: /* plan 9 */
-               ctxt.Out.Write32(0x647)                      /* magic */
-               ctxt.Out.Write32(uint32(ld.Segtext.Filelen)) /* sizes */
-               ctxt.Out.Write32(uint32(ld.Segdata.Filelen))
-               ctxt.Out.Write32(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
-               ctxt.Out.Write32(uint32(ld.Symsize))          /* nsyms */
-               ctxt.Out.Write32(uint32(ld.Entryvalue(ctxt))) /* va of entry */
-               ctxt.Out.Write32(0)
-               ctxt.Out.Write32(uint32(ld.Lcsize))
-
        case objabi.Hlinux,
                objabi.Hfreebsd,
                objabi.Hnetbsd,
index 967261a8cd5d2ebc9e5cc2cad1d7ebf4d89b9b3d..6e2d18f5183beeaece013b13021802899ba3ee21 100644 (file)
@@ -569,16 +569,8 @@ func asmb2(ctxt *ld.Link, _ *loader.Loader) {
        switch ctxt.HeadType {
        default:
        case objabi.Hplan9: /* plan9 */
-               magic := int32(4*11*11 + 7)
-
-               ctxt.Out.Write32b(uint32(magic))              /* magic */
-               ctxt.Out.Write32b(uint32(ld.Segtext.Filelen)) /* sizes */
-               ctxt.Out.Write32b(uint32(ld.Segdata.Filelen))
-               ctxt.Out.Write32b(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
-               ctxt.Out.Write32b(uint32(ld.Symsize))          /* nsyms */
-               ctxt.Out.Write32b(uint32(ld.Entryvalue(ctxt))) /* va of entry */
-               ctxt.Out.Write32b(uint32(ld.Spsize))           /* sp offsets */
-               ctxt.Out.Write32b(uint32(ld.Lcsize))           /* line offsets */
+               magic := uint32(4*11*11 + 7)
+               ld.WritePlan9Header(ctxt.Out, magic, ld.Entryvalue(ctxt), false)
 
        case objabi.Hdarwin:
                ld.Asmbmacho(ctxt)