aboutsummaryrefslogtreecommitdiff
path: root/src/internal/trace/parser.go
diff options
context:
space:
mode:
authorHiroshi Ioka <hirochachacha@gmail.com>2017-09-19 18:18:09 +0900
committerIan Lance Taylor <iant@golang.org>2017-09-20 03:54:16 +0000
commitfb54abe9ce3cbec6d464c238406b05502cb34eeb (patch)
tree596ae2eb647e4c2b0b1d023ede6c85d5a55099b7 /src/internal/trace/parser.go
parent88ced021907fb96d5609a3c63db0d9738bf0ac2b (diff)
downloadgo-fb54abe9ce3cbec6d464c238406b05502cb34eeb.tar.xz
all: correct location of go tool
In general, there are no guarantee that `go` command exist on $PATH. This CL tries to get `go` command from $GOROOT/bin instead. There are three kinds of code we should handle: For normal code, the CL implements goCmd() or goCmdName(). For unit tests, the CL uses testenv.GoTool() or testenv.GoToolPath(). For integration tests, the CL sets PATH=$GOROOT/bin:$PATH in cmd/dist. Note that make.bash sets PATH=$GOROOT/bin:$PATH in the build process. So this change is only useful when we use toolchain manually. Updates #21875 Change-Id: I963b9f22ea732dd735363ececde4cf94a5db5ca2 Reviewed-on: https://go-review.googlesource.com/64650 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/internal/trace/parser.go')
-rw-r--r--src/internal/trace/parser.go16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/internal/trace/parser.go b/src/internal/trace/parser.go
index 2e145129eb..a774bf14c9 100644
--- a/src/internal/trace/parser.go
+++ b/src/internal/trace/parser.go
@@ -12,11 +12,25 @@ import (
"math/rand"
"os"
"os/exec"
+ "path/filepath"
+ "runtime"
"strconv"
"strings"
_ "unsafe"
)
+func goCmd() string {
+ var exeSuffix string
+ if runtime.GOOS == "windows" {
+ exeSuffix = ".exe"
+ }
+ path := filepath.Join(runtime.GOROOT(), "bin", "go"+exeSuffix)
+ if _, err := os.Stat(path); err == nil {
+ return path
+ }
+ return "go"
+}
+
// Event describes one event in the trace.
type Event struct {
Off int // offset in input file (for debugging and error reporting)
@@ -757,7 +771,7 @@ func symbolize(events []*Event, bin string) error {
}
// Start addr2line.
- cmd := exec.Command("go", "tool", "addr2line", bin)
+ cmd := exec.Command(goCmd(), "tool", "addr2line", bin)
in, err := cmd.StdinPipe()
if err != nil {
return fmt.Errorf("failed to pipe addr2line stdin: %v", err)