aboutsummaryrefslogtreecommitdiff
path: root/src/internal/trace/parser.go
diff options
context:
space:
mode:
authorHana Kim <hyangah@gmail.com>2016-06-15 12:53:05 -0400
committerHyang-Ah Hana Kim <hyangah@gmail.com>2016-06-16 16:22:03 +0000
commitc3818e56d0f60493a63b2bb03a09f261d3e0ada2 (patch)
treeaa7d13e6c9b04ad44f43a211fd146490cb67f8e9 /src/internal/trace/parser.go
parentea2ac3fe5fb2011b077809e60bc018e0c6caa66c (diff)
downloadgo-c3818e56d0f60493a63b2bb03a09f261d3e0ada2.tar.xz
internal/trace: err if binary is not supplied for old trace
Change-Id: Id25c90993c4cbb7449d7031301b6d214a67d7633 Reviewed-on: https://go-review.googlesource.com/24134 Reviewed-by: Dmitry Vyukov <dvyukov@google.com> Run-TryBot: Dmitry Vyukov <dvyukov@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/internal/trace/parser.go')
-rw-r--r--src/internal/trace/parser.go25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/internal/trace/parser.go b/src/internal/trace/parser.go
index 843d0eaf63..c31517f683 100644
--- a/src/internal/trace/parser.go
+++ b/src/internal/trace/parser.go
@@ -60,21 +60,34 @@ const (
// Parse parses, post-processes and verifies the trace.
func Parse(r io.Reader, bin string) ([]*Event, error) {
- ver, rawEvents, strings, err := readTrace(r)
+ ver, events, err := parse(r, bin)
if err != nil {
return nil, err
}
+ if ver < 1007 && bin == "" {
+ return nil, fmt.Errorf("for traces produced by go 1.6 or below, the binary argument must be provided")
+ }
+ return events, nil
+}
+
+// parse parses, post-processes and verifies the trace. It returns the
+// trace version and the list of events.
+func parse(r io.Reader, bin string) (int, []*Event, error) {
+ ver, rawEvents, strings, err := readTrace(r)
+ if err != nil {
+ return 0, nil, err
+ }
events, stacks, err := parseEvents(ver, rawEvents, strings)
if err != nil {
- return nil, err
+ return 0, nil, err
}
events, err = removeFutile(events)
if err != nil {
- return nil, err
+ return 0, nil, err
}
err = postProcessTrace(ver, events)
if err != nil {
- return nil, err
+ return 0, nil, err
}
// Attach stack traces.
for _, ev := range events {
@@ -84,10 +97,10 @@ func Parse(r io.Reader, bin string) ([]*Event, error) {
}
if ver < 1007 && bin != "" {
if err := symbolize(events, bin); err != nil {
- return nil, err
+ return 0, nil, err
}
}
- return events, nil
+ return ver, events, nil
}
// rawEvent is a helper type used during parsing.