From a3a69afff85c94be8b6419b03efd5dc14f2425f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20Chigot?= <clement.chigot@atos.net>
Date: Fri, 28 Sep 2018 14:34:00 +0200
Subject: [PATCH] cmd/dist: add AIX operating system.

This commit adds AIX operating system to cmd/dist package for ppc64
architecture.

The stack guard is increased because of syscalls made inside the runtime
which need a larger stack.

Disable cmd/vet/all tests until aix/ppc64 is fully available.

Change-Id: I7e3caf86724249ae564a152d90c1cbd4de288814
Reviewed-on: https://go-review.googlesource.com/c/138715
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
---
 src/cmd/dist/build.go           | 2 ++
 src/cmd/dist/buildruntime.go    | 4 ++++
 src/cmd/dist/main.go            | 3 +++
 src/cmd/internal/objabi/head.go | 5 +++++
 src/cmd/vet/all/main.go         | 6 ++++++
 5 files changed, 20 insertions(+)

diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
index b27d3aac4de..49f4a5e6a7d 100644
--- a/src/cmd/dist/build.go
+++ b/src/cmd/dist/build.go
@@ -87,6 +87,7 @@ var okgoos = []string{
 	"openbsd",
 	"plan9",
 	"windows",
+	"aix",
 }
 
 // find reports the first index of p in l[0:n], or else -1.
@@ -1388,6 +1389,7 @@ func checkNotStale(goBinary string, targets ...string) {
 // single point of truth for supported platforms. This list is used
 // by 'go tool dist list'.
 var cgoEnabled = map[string]bool{
+	"aix/ppc64":       false,
 	"darwin/386":      true,
 	"darwin/amd64":    true,
 	"darwin/arm":      true,
diff --git a/src/cmd/dist/buildruntime.go b/src/cmd/dist/buildruntime.go
index acf2230cb49..10d1552c944 100644
--- a/src/cmd/dist/buildruntime.go
+++ b/src/cmd/dist/buildruntime.go
@@ -87,6 +87,10 @@ func mkzbootstrap(file string) {
 // stack guard size. Larger multipliers are used for non-optimized
 // builds that have larger stack frames.
 func stackGuardMultiplier() int {
+	// On AIX, a larger stack is needed for syscalls
+	if goos == "aix" {
+		return 2
+	}
 	for _, s := range strings.Split(os.Getenv("GO_GCFLAGS"), " ") {
 		if s == "-N" {
 			return 2
diff --git a/src/cmd/dist/main.go b/src/cmd/dist/main.go
index 37e37e27335..bf08869afb7 100644
--- a/src/cmd/dist/main.go
+++ b/src/cmd/dist/main.go
@@ -81,6 +81,9 @@ func main() {
 		}
 	case "windows":
 		exe = ".exe"
+	case "aix":
+		// uname -m doesn't work under AIX
+		gohostarch = "ppc64"
 	}
 
 	sysinit()
diff --git a/src/cmd/internal/objabi/head.go b/src/cmd/internal/objabi/head.go
index 23c7b62daf6..db2221d6b14 100644
--- a/src/cmd/internal/objabi/head.go
+++ b/src/cmd/internal/objabi/head.go
@@ -48,10 +48,13 @@ const (
 	Hplan9
 	Hsolaris
 	Hwindows
+	Haix
 )
 
 func (h *HeadType) Set(s string) error {
 	switch s {
+	case "aix":
+		*h = Haix
 	case "darwin":
 		*h = Hdarwin
 	case "dragonfly":
@@ -82,6 +85,8 @@ func (h *HeadType) Set(s string) error {
 
 func (h *HeadType) String() string {
 	switch *h {
+	case Haix:
+		return "aix"
 	case Hdarwin:
 		return "darwin"
 	case Hdragonfly:
diff --git a/src/cmd/vet/all/main.go b/src/cmd/vet/all/main.go
index 24dfafd7bf6..7e4a68101f0 100644
--- a/src/cmd/vet/all/main.go
+++ b/src/cmd/vet/all/main.go
@@ -204,6 +204,12 @@ func (p platform) vet() {
 		return
 	}
 
+	if p.os == "aix" && p.arch == "ppc64" {
+		// TODO(aix): enable as soon as the aix/ppc64 port has fully landed
+		fmt.Println("skipping aix/ppc64")
+		return
+	}
+
 	var buf bytes.Buffer
 	fmt.Fprintf(&buf, "go run main.go -p %s\n", p)
 
-- 
GitLab