test/run: use correct $PWD to make os.Getwd less expensive

The commands being run are 'go tool this' and 'go tool that',
and the go command will call Getwd during its init.

R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/7336045
diff --git a/test/run.go b/test/run.go
index 36c8b7a..5e167d6 100644
--- a/test/run.go
+++ b/test/run.go
@@ -433,6 +433,7 @@
 		cmd.Stderr = &buf
 		if useTmp {
 			cmd.Dir = t.tempDir
+			cmd.Env = envForDir(cmd.Dir)
 		}
 		err := cmd.Run()
 		if err != nil {
@@ -828,3 +829,20 @@
 	assertNot(shouldTest("// +build arm 386", "linux", "amd64"))
 	assert(shouldTest("// This is a test.", "os", "arch"))
 }
+
+// envForDir returns a copy of the environment
+// suitable for running in the given directory.
+// The environment is the current process's environment
+// but with an updated $PWD, so that an os.Getwd in the
+// child will be faster.
+func envForDir(dir string) []string {
+	env := os.Environ()
+	for i, kv := range env {
+		if strings.HasPrefix(kv, "PWD=") {
+			env[i] = "PWD=" + dir
+			return env
+		}
+	}
+	env = append(env, "PWD="+dir)
+	return env
+}