diff --git a/src/cmd/compile/internal/amd64/galign.go b/src/cmd/compile/internal/amd64/galign.go
index 9813f6ac830b55bf9c7ca920be4a7d717bedbb49..9d67812a9267c1f59c4353f19b2fc3d954d41d9b 100644
--- a/src/cmd/compile/internal/amd64/galign.go
+++ b/src/cmd/compile/internal/amd64/galign.go
@@ -12,7 +12,7 @@ import (
 
 var leaptr = x86.ALEAQ
 
-func Main() {
+func Init() {
 	gc.Thearch.LinkArch = &x86.Linkamd64
 	if obj.GOARCH == "amd64p32" {
 		gc.Thearch.LinkArch = &x86.Linkamd64p32
@@ -28,7 +28,4 @@ func Main() {
 	gc.Thearch.SSAMarkMoves = ssaMarkMoves
 	gc.Thearch.SSAGenValue = ssaGenValue
 	gc.Thearch.SSAGenBlock = ssaGenBlock
-
-	gc.Main()
-	gc.Exit(0)
 }
diff --git a/src/cmd/compile/internal/arm/galign.go b/src/cmd/compile/internal/arm/galign.go
index 3d36b827f073e3fc513c3e1d2d119f7684135858..1533f6cf594a8c0bdc06a336fcbc6100c28ff4ef 100644
--- a/src/cmd/compile/internal/arm/galign.go
+++ b/src/cmd/compile/internal/arm/galign.go
@@ -10,7 +10,7 @@ import (
 	"cmd/internal/obj/arm"
 )
 
-func Main() {
+func Init() {
 	gc.Thearch.LinkArch = &arm.Linkarm
 	gc.Thearch.REGSP = arm.REGSP
 	gc.Thearch.REGCTXT = arm.REGCTXT
@@ -22,7 +22,4 @@ func Main() {
 	gc.Thearch.SSAMarkMoves = func(s *gc.SSAGenState, b *ssa.Block) {}
 	gc.Thearch.SSAGenValue = ssaGenValue
 	gc.Thearch.SSAGenBlock = ssaGenBlock
-
-	gc.Main()
-	gc.Exit(0)
 }
diff --git a/src/cmd/compile/internal/arm64/galign.go b/src/cmd/compile/internal/arm64/galign.go
index 6449b111c958e5a438709aa104decf1258f88310..587186f446a2d01bd0e95e30927e09f2f6ccd1f1 100644
--- a/src/cmd/compile/internal/arm64/galign.go
+++ b/src/cmd/compile/internal/arm64/galign.go
@@ -10,7 +10,7 @@ import (
 	"cmd/internal/obj/arm64"
 )
 
-func Main() {
+func Init() {
 	gc.Thearch.LinkArch = &arm64.Linkarm64
 	gc.Thearch.REGSP = arm64.REGSP
 	gc.Thearch.REGCTXT = arm64.REGCTXT
@@ -22,7 +22,4 @@ func Main() {
 	gc.Thearch.SSAMarkMoves = func(s *gc.SSAGenState, b *ssa.Block) {}
 	gc.Thearch.SSAGenValue = ssaGenValue
 	gc.Thearch.SSAGenBlock = ssaGenBlock
-
-	gc.Main()
-	gc.Exit(0)
 }
diff --git a/src/cmd/compile/internal/mips64/galign.go b/src/cmd/compile/internal/mips64/galign.go
index 02d9e466724e1b22ea32fce4e3b0198ae30782dc..007938c0968d88389a5da0817b07540030d05e0c 100644
--- a/src/cmd/compile/internal/mips64/galign.go
+++ b/src/cmd/compile/internal/mips64/galign.go
@@ -11,7 +11,7 @@ import (
 	"cmd/internal/obj/mips"
 )
 
-func Main() {
+func Init() {
 	gc.Thearch.LinkArch = &mips.Linkmips64
 	if obj.GOARCH == "mips64le" {
 		gc.Thearch.LinkArch = &mips.Linkmips64le
@@ -26,7 +26,4 @@ func Main() {
 	gc.Thearch.SSAMarkMoves = func(s *gc.SSAGenState, b *ssa.Block) {}
 	gc.Thearch.SSAGenValue = ssaGenValue
 	gc.Thearch.SSAGenBlock = ssaGenBlock
-
-	gc.Main()
-	gc.Exit(0)
 }
diff --git a/src/cmd/compile/internal/ppc64/galign.go b/src/cmd/compile/internal/ppc64/galign.go
index 6ce732c21da931c134a93ae5a81d0d7d62b76f0c..94d338ed6b254e99f9554a5471becd07529ac200 100644
--- a/src/cmd/compile/internal/ppc64/galign.go
+++ b/src/cmd/compile/internal/ppc64/galign.go
@@ -10,7 +10,7 @@ import (
 	"cmd/internal/obj/ppc64"
 )
 
-func Main() {
+func Init() {
 	gc.Thearch.LinkArch = &ppc64.Linkppc64
 	if obj.GOARCH == "ppc64le" {
 		gc.Thearch.LinkArch = &ppc64.Linkppc64le
@@ -28,7 +28,4 @@ func Main() {
 
 	initvariants()
 	initproginfo()
-
-	gc.Main()
-	gc.Exit(0)
 }
diff --git a/src/cmd/compile/internal/s390x/galign.go b/src/cmd/compile/internal/s390x/galign.go
index 8e51d0f866c5374b03c564beb7ba423629a9f69b..eb2a51a46d69f402526e6df8fd68396c9b7ffa7d 100644
--- a/src/cmd/compile/internal/s390x/galign.go
+++ b/src/cmd/compile/internal/s390x/galign.go
@@ -9,7 +9,7 @@ import (
 	"cmd/internal/obj/s390x"
 )
 
-func Main() {
+func Init() {
 	gc.Thearch.LinkArch = &s390x.Links390x
 	gc.Thearch.REGSP = s390x.REGSP
 	gc.Thearch.REGCTXT = s390x.REGCTXT
@@ -21,7 +21,4 @@ func Main() {
 	gc.Thearch.SSAMarkMoves = ssaMarkMoves
 	gc.Thearch.SSAGenValue = ssaGenValue
 	gc.Thearch.SSAGenBlock = ssaGenBlock
-
-	gc.Main()
-	gc.Exit(0)
 }
diff --git a/src/cmd/compile/internal/x86/galign.go b/src/cmd/compile/internal/x86/galign.go
index 01115cb934b1d093d872e99a8abda28e4d551b87..4b021b643a9d78f5006d08496ee9d6cf9e76d806 100644
--- a/src/cmd/compile/internal/x86/galign.go
+++ b/src/cmd/compile/internal/x86/galign.go
@@ -12,7 +12,7 @@ import (
 	"os"
 )
 
-func Main() {
+func Init() {
 	gc.Thearch.LinkArch = &x86.Link386
 	gc.Thearch.REGSP = x86.REGSP
 	gc.Thearch.REGCTXT = x86.REGCTXT
@@ -32,7 +32,4 @@ func Main() {
 	gc.Thearch.SSAMarkMoves = ssaMarkMoves
 	gc.Thearch.SSAGenValue = ssaGenValue
 	gc.Thearch.SSAGenBlock = ssaGenBlock
-
-	gc.Main()
-	gc.Exit(0)
 }
diff --git a/src/cmd/compile/main.go b/src/cmd/compile/main.go
index 892383f3cc4c09c323be2d68e2e0d49420766afe..4376eda6a99f3e0494d8d0bcd34696fcc5208e07 100644
--- a/src/cmd/compile/main.go
+++ b/src/cmd/compile/main.go
@@ -8,6 +8,7 @@ import (
 	"cmd/compile/internal/amd64"
 	"cmd/compile/internal/arm"
 	"cmd/compile/internal/arm64"
+	"cmd/compile/internal/gc"
 	"cmd/compile/internal/mips64"
 	"cmd/compile/internal/ppc64"
 	"cmd/compile/internal/s390x"
@@ -28,18 +29,21 @@ func main() {
 		fmt.Fprintf(os.Stderr, "compile: 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()
 	}
+
+	gc.Main()
+	gc.Exit(0)
 }