From 81c7beb04eda3ecc97e723793e11c61732ff37e8 Mon Sep 17 00:00:00 2001
From: Elias Naur <mail@eliasnaur.com>
Date: Sun, 7 Apr 2019 16:58:13 +0200
Subject: [PATCH] cmd/dist: set buildmode=pie on Android

Android refuses to run non-PIE binaries, a restriction already
encoded in the cmd/go tool's buildModeInit function. This CL adds
the necessary flags to cmd/dist to make ./make.bash run on an
Android device.

Change-Id: I162084f573befaa41dcb47a2b78448bce5b83d35
Reviewed-on: https://go-review.googlesource.com/c/go/+/170943
Run-TryBot: Elias Naur <mail@eliasnaur.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
---
 src/cmd/dist/build.go | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
index e5d4b2458a2..fec3b2cedc8 100644
--- a/src/cmd/dist/build.go
+++ b/src/cmd/dist/build.go
@@ -657,7 +657,11 @@ func runInstall(dir string, ch chan struct{}) {
 		if elem == "go" {
 			elem = "go_bootstrap"
 		}
-		link = []string{pathf("%s/link", tooldir), "-o", pathf("%s/%s%s", tooldir, elem, exe)}
+		link = []string{pathf("%s/link", tooldir)}
+		if goos == "android" {
+			link = append(link, "-buildmode=pie")
+		}
+		link = append(link, "-o", pathf("%s/%s%s", tooldir, elem, exe))
 		targ = len(link) - 1
 	}
 	ttarg := mtime(link[targ])
@@ -862,6 +866,9 @@ func runInstall(dir string, ch chan struct{}) {
 		// compiler to generate ABI wrappers for everything.
 		compile = append(compile, "-allabis")
 	}
+	if goos == "android" {
+		compile = append(compile, "-shared")
+	}
 
 	compile = append(compile, gofiles...)
 	var wg sync.WaitGroup
-- 
GitLab