]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: skip arch-specific main function
authorDavid Crawshaw <crawshaw@golang.org>
Fri, 9 Sep 2016 16:04:22 +0000 (12:04 -0400)
committerDavid Crawshaw <crawshaw@golang.org>
Fri, 16 Sep 2016 20:38:38 +0000 (20:38 +0000)
Add some notes to main.go on what happens where.

Change-Id: I4fb0b6c280e5f990ddc5d749267372b86870af6d
Reviewed-on: https://go-review.googlesource.com/28970
TryBot-Result: Gobot Gobot <gobot@golang.org>
Run-TryBot: David Crawshaw <crawshaw@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/link/internal/amd64/obj.go
src/cmd/link/internal/arm/obj.go
src/cmd/link/internal/arm64/obj.go
src/cmd/link/internal/mips64/obj.go
src/cmd/link/internal/ppc64/obj.go
src/cmd/link/internal/s390x/obj.go
src/cmd/link/internal/x86/obj.go
src/cmd/link/main.go

index 056f07d5675d053a4da03fcdc685fd3feaa369fa..729b4371e0cfc76339c6ddf6c239e616845e4017 100644 (file)
@@ -37,14 +37,7 @@ import (
        "fmt"
 )
 
-// Reading object files.
-
-func Main() {
-       linkarchinit()
-       ld.Main()
-}
-
-func linkarchinit() {
+func Init() {
        ld.SysArch = sys.ArchAMD64
        if obj.GOARCH == "amd64p32" {
                ld.SysArch = sys.ArchAMD64P32
index 9e365fd34211b19a601bc6eae5459caba6ded77a..1e0a49752e91831f6da256884a9c984e924a26dd 100644 (file)
@@ -37,14 +37,7 @@ import (
        "fmt"
 )
 
-// Reading object files.
-
-func Main() {
-       linkarchinit()
-       ld.Main()
-}
-
-func linkarchinit() {
+func Init() {
        ld.SysArch = sys.ArchARM
 
        ld.Thearch.Funcalign = FuncAlign
index 17ea9b13098566c372dde125c24f4360e0a0ba13..b2f1e39e3be7c8673ad93010d88bcfd1eaa9d9f5 100644 (file)
@@ -37,14 +37,7 @@ import (
        "fmt"
 )
 
-// Reading object files.
-
-func Main() {
-       linkarchinit()
-       ld.Main()
-}
-
-func linkarchinit() {
+func Init() {
        ld.SysArch = sys.ArchARM64
 
        ld.Thearch.Funcalign = FuncAlign
index ddb30d25ed9ccc0f614f8a3b748f53635c83bb7c..564a10ab517b25c075eced53b929898a976894d7 100644 (file)
@@ -37,14 +37,7 @@ import (
        "fmt"
 )
 
-// Reading object files.
-
-func Main() {
-       linkarchinit()
-       ld.Main()
-}
-
-func linkarchinit() {
+func Init() {
        if obj.GOARCH == "mips64le" {
                ld.SysArch = sys.ArchMIPS64LE
        } else {
index caaa3b87aa5c88c17c340d8b7f83ebaf561ccc08..bfff361328ab346dcfe3c2fe4c663975b8f06fbd 100644 (file)
@@ -37,14 +37,7 @@ import (
        "fmt"
 )
 
-// Reading object files.
-
-func Main() {
-       linkarchinit()
-       ld.Main()
-}
-
-func linkarchinit() {
+func Init() {
        if obj.GOARCH == "ppc64le" {
                ld.SysArch = sys.ArchPPC64LE
        } else {
index 721f2ce5e88afe65c307510d958cf0f6b5ded297..6c1e1939548611d30ef4b129594544b2c129110f 100644 (file)
@@ -37,14 +37,7 @@ import (
        "fmt"
 )
 
-// Reading object files.
-
-func Main() {
-       linkarchinit()
-       ld.Main()
-}
-
-func linkarchinit() {
+func Init() {
        ld.SysArch = sys.ArchS390X
 
        ld.Thearch.Funcalign = FuncAlign
index 49475a7ee6165c86e726fe6745a7f86e9dfd577c..fe43615f16f3ef7e7e1f48efd28f972414ae7c46 100644 (file)
@@ -37,14 +37,7 @@ import (
        "fmt"
 )
 
-// Reading object files.
-
-func Main() {
-       linkarchinit()
-       ld.Main()
-}
-
-func linkarchinit() {
+func Init() {
        ld.SysArch = sys.Arch386
 
        ld.Thearch.Funcalign = FuncAlign
index fd7ea093d3c925b00a08f3fe032d96b055165313..74357d5853a1729281090ae801a4813870a265c1 100644 (file)
@@ -9,6 +9,7 @@ import (
        "cmd/link/internal/amd64"
        "cmd/link/internal/arm"
        "cmd/link/internal/arm64"
+       "cmd/link/internal/ld"
        "cmd/link/internal/mips64"
        "cmd/link/internal/ppc64"
        "cmd/link/internal/s390x"
@@ -17,24 +18,39 @@ import (
        "os"
 )
 
+// The bulk of the linker implementation lives in cmd/link/internal/ld.
+// Architecture-specific code lives in cmd/link/internal/GOARCH.
+//
+// Program initialization:
+//
+// Before any argument parsing is done, the Init function of relevant
+// architecture package is called. The only job done in Init is
+// configuration of the ld.Thearch and ld.SysArch variables.
+//
+// Then control flow passes to ld.Main, which parses flags, makes
+// some configuration decisions, and then gives the architecture
+// packages a second chance to modify the linker's configuration
+// via the ld.Thearch.Archinit function.
+
 func main() {
        switch obj.GOARCH {
        default:
                fmt.Fprintf(os.Stderr, "link: unknown architecture %q\n", obj.GOARCH)
                os.Exit(2)
        case "386":
-               x86.Main()
+               x86.Init()
        case "amd64", "amd64p32":
-               amd64.Main()
+               amd64.Init()
        case "arm":
-               arm.Main()
+               arm.Init()
        case "arm64":
-               arm64.Main()
+               arm64.Init()
        case "mips64", "mips64le":
-               mips64.Main()
+               mips64.Init()
        case "ppc64", "ppc64le":
-               ppc64.Main()
+               ppc64.Init()
        case "s390x":
-               s390x.Main()
+               s390x.Init()
        }
+       ld.Main()
 }