diff options
| author | Hiroshi Ioka <hirochachacha@gmail.com> | 2017-09-19 18:18:09 +0900 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2017-09-20 03:54:16 +0000 |
| commit | fb54abe9ce3cbec6d464c238406b05502cb34eeb (patch) | |
| tree | 596ae2eb647e4c2b0b1d023ede6c85d5a55099b7 /src/internal/trace/parser.go | |
| parent | 88ced021907fb96d5609a3c63db0d9738bf0ac2b (diff) | |
| download | go-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.go | 16 |
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) |
