aboutsummaryrefslogtreecommitdiffstats
path: root/symbolizer
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-09-03 11:58:52 +0200
committerDmitry Vyukov <dvyukov@google.com>2016-09-05 12:49:47 +0200
commitecaaca55fc28b2a149c8c44aa021855b46da3151 (patch)
tree75ae0d1375e32eca11acb9c192a81012dab359ad /symbolizer
parent2c881152ef59f54cdd748501e7c6179c8376a796 (diff)
symbolizer: support discriminators in addr2line output
Diffstat (limited to 'symbolizer')
-rw-r--r--symbolizer/symbolizer.go6
-rw-r--r--symbolizer/symbolizer_test.go15
2 files changed, 20 insertions, 1 deletions
diff --git a/symbolizer/symbolizer.go b/symbolizer/symbolizer.go
index 7138c86ae..07356a48a 100644
--- a/symbolizer/symbolizer.go
+++ b/symbolizer/symbolizer.go
@@ -164,8 +164,12 @@ func parse(s *bufio.Scanner) ([]Frame, error) {
if colon == -1 {
return nil, fmt.Errorf("failed to parse file:line in addr2line output: %v", ln)
}
+ lineEnd := colon + 1
+ for lineEnd < len(ln) && ln[lineEnd] >= '0' && ln[lineEnd] <= '9' {
+ lineEnd++
+ }
file := ln[:colon]
- line, err := strconv.Atoi(ln[colon+1:])
+ line, err := strconv.Atoi(ln[colon+1 : lineEnd])
if err != nil || fn == "" || fn == "??" || file == "" || file == "??" || line <= 0 {
continue
}
diff --git a/symbolizer/symbolizer_test.go b/symbolizer/symbolizer_test.go
index 3fd87e2a8..c7aeb48cb 100644
--- a/symbolizer/symbolizer_test.go
+++ b/symbolizer/symbolizer_test.go
@@ -85,6 +85,21 @@ func TestParse(t *testing.T) {
"??:0\n",
nil,
},
+ {
+ 0xffffffff81a2aff9,
+ "0xffffffff81a2aff9\n" +
+ "devpts_get_priv\n" +
+ "fs/devpts/inode.c:588 (discriminator 3)\n",
+ []Frame{
+ Frame{
+ PC: 0xffffffff81a2aff9,
+ Func: "devpts_get_priv",
+ File: "fs/devpts/inode.c",
+ Line: 588,
+ Inline: false,
+ },
+ },
+ },
}
// Stub addr2line.