From 28ed2b0cd9ad6e2015f073931c05c08e8bf7b247 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Fri, 9 Sep 2016 12:04:22 -0400 Subject: [PATCH] cmd/link: skip arch-specific main function 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 Run-TryBot: David Crawshaw Reviewed-by: Ian Lance Taylor --- src/cmd/link/internal/amd64/obj.go | 9 +-------- src/cmd/link/internal/arm/obj.go | 9 +-------- src/cmd/link/internal/arm64/obj.go | 9 +-------- src/cmd/link/internal/mips64/obj.go | 9 +-------- src/cmd/link/internal/ppc64/obj.go | 9 +-------- src/cmd/link/internal/s390x/obj.go | 9 +-------- src/cmd/link/internal/x86/obj.go | 9 +-------- src/cmd/link/main.go | 30 ++++++++++++++++++++++------- 8 files changed, 30 insertions(+), 63 deletions(-) diff --git a/src/cmd/link/internal/amd64/obj.go b/src/cmd/link/internal/amd64/obj.go index 056f07d567..729b4371e0 100644 --- a/src/cmd/link/internal/amd64/obj.go +++ b/src/cmd/link/internal/amd64/obj.go @@ -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 diff --git a/src/cmd/link/internal/arm/obj.go b/src/cmd/link/internal/arm/obj.go index 9e365fd342..1e0a49752e 100644 --- a/src/cmd/link/internal/arm/obj.go +++ b/src/cmd/link/internal/arm/obj.go @@ -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 diff --git a/src/cmd/link/internal/arm64/obj.go b/src/cmd/link/internal/arm64/obj.go index 17ea9b1309..b2f1e39e3b 100644 --- a/src/cmd/link/internal/arm64/obj.go +++ b/src/cmd/link/internal/arm64/obj.go @@ -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 diff --git a/src/cmd/link/internal/mips64/obj.go b/src/cmd/link/internal/mips64/obj.go index ddb30d25ed..564a10ab51 100644 --- a/src/cmd/link/internal/mips64/obj.go +++ b/src/cmd/link/internal/mips64/obj.go @@ -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 { diff --git a/src/cmd/link/internal/ppc64/obj.go b/src/cmd/link/internal/ppc64/obj.go index caaa3b87aa..bfff361328 100644 --- a/src/cmd/link/internal/ppc64/obj.go +++ b/src/cmd/link/internal/ppc64/obj.go @@ -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 { diff --git a/src/cmd/link/internal/s390x/obj.go b/src/cmd/link/internal/s390x/obj.go index 721f2ce5e8..6c1e193954 100644 --- a/src/cmd/link/internal/s390x/obj.go +++ b/src/cmd/link/internal/s390x/obj.go @@ -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 diff --git a/src/cmd/link/internal/x86/obj.go b/src/cmd/link/internal/x86/obj.go index 49475a7ee6..fe43615f16 100644 --- a/src/cmd/link/internal/x86/obj.go +++ b/src/cmd/link/internal/x86/obj.go @@ -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 diff --git a/src/cmd/link/main.go b/src/cmd/link/main.go index fd7ea093d3..74357d5853 100644 --- a/src/cmd/link/main.go +++ b/src/cmd/link/main.go @@ -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() } -- 2.48.1