unix: use os.Executable rather than os.Args[0] in tests

Change-Id: I67a063d747c6e34dcd0292fdb3a9a0d965a6e133
Reviewed-on: https://go-review.googlesource.com/c/sys/+/607875
Commit-Queue: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
diff --git a/unix/darwin_test.go b/unix/darwin_test.go
index 8edde10..f8fea55 100644
--- a/unix/darwin_test.go
+++ b/unix/darwin_test.go
@@ -35,10 +35,14 @@
 	//
 	// In an ideal world each syscall would have its own test, so this test
 	// would be unnecessary. Unfortunately, we do not live in that world.
+	exe, err := os.Executable()
+	if err != nil {
+		t.Fatal(err)
+	}
 	for _, test := range darwinTests {
 		// Call the test binary recursively, giving it a magic argument
 		// (see init below) and the name of the test to run.
-		cmd := exec.Command(os.Args[0], "testDarwinLoader", test.name)
+		cmd := exec.Command(exe, "testDarwinLoader", test.name)
 
 		// Run subprocess, collect results. Note that we expect the subprocess
 		// to fail somehow, so the error is irrelevant.
diff --git a/unix/openbsd_test.go b/unix/openbsd_test.go
index 8ca0524..cd36c43 100644
--- a/unix/openbsd_test.go
+++ b/unix/openbsd_test.go
@@ -43,7 +43,7 @@
 // testCmd generates a proper command that, when executed, runs the test
 // corresponding to the given key.
 func testCmd(procName string) (*exec.Cmd, error) {
-	exe, err := filepath.Abs(os.Args[0])
+	exe, err := os.Executable()
 	if err != nil {
 		return nil, err
 	}
diff --git a/unix/syscall_freebsd_test.go b/unix/syscall_freebsd_test.go
index cbe3d36..46b48d6 100644
--- a/unix/syscall_freebsd_test.go
+++ b/unix/syscall_freebsd_test.go
@@ -53,7 +53,7 @@
 }
 
 func testCmd(procName string, procArg string) (*exec.Cmd, error) {
-	exe, err := filepath.Abs(os.Args[0])
+	exe, err := os.Executable()
 	if err != nil {
 		return nil, err
 	}
diff --git a/unix/syscall_unix_test.go b/unix/syscall_unix_test.go
index 29c158f..3bb5c7a 100644
--- a/unix/syscall_unix_test.go
+++ b/unix/syscall_unix_test.go
@@ -205,7 +205,11 @@
 	defer writeFile.Close()
 	defer readFile.Close()
 
-	cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", t.TempDir())
+	exe, err := os.Executable()
+	if err != nil {
+		t.Fatal(err)
+	}
+	cmd := exec.Command(exe, "-test.run=^TestPassFD$", "--", t.TempDir())
 	cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"}
 	if lp := os.Getenv("LD_LIBRARY_PATH"); lp != "" {
 		cmd.Env = append(cmd.Env, "LD_LIBRARY_PATH="+lp)