From ecaaca55fc28b2a149c8c44aa021855b46da3151 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 3 Sep 2016 11:58:52 +0200 Subject: symbolizer: support discriminators in addr2line output --- symbolizer/symbolizer.go | 6 +++++- symbolizer/symbolizer_test.go | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'symbolizer') 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. -- cgit mrf-deployment