runtime, crypto/x509: add -target flag.

--- src/crypto/x509/x509_test.go
+++ src/crypto/x509/x509_test.go
@@ -19,6 +19,7 @@ import (
 	"encoding/hex"
 	"encoding/pem"
 	"fmt"
+	"flag"
 	"internal/testenv"
 	"math/big"
 	"net"
@@ -28,6 +29,8 @@ import (
 	"time"
 )
 
+var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
+
 func TestParsePKCS1PrivateKey(t *testing.T) {
 	block, _ := pem.Decode([]byte(pemPrivateKey))
 	priv, err := ParsePKCS1PrivateKey(block.Bytes)
@@ -862,7 +865,13 @@ func TestParsePEMCRL(t *testing.T) {
 func TestImports(t *testing.T) {
 	testenv.MustHaveGoRun(t)
 
-	if err := exec.Command("go", "run", "x509_test_import.go").Run(); err != nil {
+	var cmd *exec.Cmd
+	if *target == "" {
+		cmd = exec.Command("go", "run", "x509_test_import.go")
+	} else {
+		cmd = exec.Command("go_"+*target, "run", "-exec", "go_"+*target+"_exec", "x509_test_import.go")
+	}
+	if err := cmd.Run(); err != nil {
 		t.Errorf("failed to run x509_test_import.go: %s", err)
 	}
 }
--- src/runtime/crash_test.go
+++ src/runtime/crash_test.go
@@ -5,6 +5,7 @@
 package runtime_test
 
 import (
+	"flag"
 	"fmt"
 	"internal/testenv"
 	"io/ioutil"
@@ -18,6 +19,25 @@ import (
 	"testing"
 )
 
+var target = flag.String("target", "", "if non empty, use 'go_target' to compile test files and 'go_target_exec' to run the binaries")
+
+func goCmd() string {
+	if *target != "" {
+		return "go_" + *target
+	}
+	return "go"
+}
+
+func goExecCmd(name string, arg ...string) *exec.Cmd {
+	var cmd []string
+	if *target != "" {
+		cmd = append(cmd, "go_"+*target+"_exec")
+	}
+	cmd = append(cmd, name)
+	cmd = append(cmd, arg...)
+	return exec.Command(cmd[0], cmd[1:]...)
+}
+
 var toRemove []string
 
 func TestMain(m *testing.M) {
@@ -65,7 +85,7 @@ func runTestProg(t *testing.T, binary, name string) string {
 	if err != nil {
 		t.Fatal(err)
 	}
-	got, _ := testEnv(exec.Command(exe, name)).CombinedOutput()
+	got, _ := testEnv(goExecCmd(exe, name)).CombinedOutput()
 	return string(got)
 }
 
@@ -92,7 +112,7 @@ func buildTestProg(t *testing.T, binary string) (string, error) {
 	}
 
 	exe := filepath.Join(testprog.dir, binary+".exe")
-	cmd := exec.Command("go", "build", "-o", exe)
+	cmd := exec.Command(goCmd(), "build", "-o", exe)
 	cmd.Dir = "testdata/" + binary
 	out, err := testEnv(cmd).CombinedOutput()
 	if err != nil {
--- src/runtime/crash_unix_test.go
+++ src/runtime/crash_unix_test.go
@@ -157,7 +157,7 @@ func TestSignalExitStatus(t *testing.T) {
 	if err != nil {
 		t.Fatal(err)
 	}
-	err = testEnv(exec.Command(exe, "SignalExitStatus")).Run()
+	err = testEnv(goExecCmd(exe, "SignalExitStatus")).Run()
 	if err == nil {
 		t.Error("test program succeeded unexpectedly")
 	} else if ee, ok := err.(*exec.ExitError); !ok {
