From 19e40f4864c7f49f6b216de33b25a5401a507b8d Mon Sep 17 00:00:00 2001 From: "Jiao, Joey" Date: Fri, 21 Mar 2025 08:00:28 +0530 Subject: pkg/symbolizer: retain the frame if line number is 0 There are numerous line_entries with a line number of 0 for __sanitizer_cov_trace_pc. Currently, if only one program counter (PC) is hit in the function and the line number is 0 for that PC, the frame is ignored. To accurately report function coverage, we should include the function in such cases. --- pkg/symbolizer/addr2line.go | 5 ++++- pkg/symbolizer/addr2line_test.go | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'pkg') diff --git a/pkg/symbolizer/addr2line.go b/pkg/symbolizer/addr2line.go index 5187f72ed..bb4e4a3fa 100644 --- a/pkg/symbolizer/addr2line.go +++ b/pkg/symbolizer/addr2line.go @@ -163,9 +163,12 @@ func parse(interner *Interner, s *bufio.Scanner) ([]Frame, error) { } file := ln[:colon] line, err := strconv.Atoi(ln[colon+1 : lineEnd]) - if err != nil || fn == "" || fn == "??" || file == "" || file == "??" || line <= 0 { + if err != nil || fn == "" || fn == "??" || file == "" || file == "??" || line < 0 { continue } + if line == 0 { + line = -1 + } frames = append(frames, Frame{ PC: pc, Func: interner.Do(fn), diff --git a/pkg/symbolizer/addr2line_test.go b/pkg/symbolizer/addr2line_test.go index f6445367e..dbb29de6d 100644 --- a/pkg/symbolizer/addr2line_test.go +++ b/pkg/symbolizer/addr2line_test.go @@ -72,6 +72,21 @@ func TestParse(t *testing.T) { }, }, }, + { + 0xffffffff82fdbe1b, + "0xffffffff82fdbe1b\n" + + "fbcon_invert_region\n" + + "drivers/video/console/fbcon.c:0\n", + []Frame{ + { + PC: 0xffffffff82fdbe1b, + Func: "fbcon_invert_region", + File: "drivers/video/console/fbcon.c", + Line: -1, + Inline: false, + }, + }, + }, { 0x123124, "0x0000000000123124\n" + -- cgit mrf-deployment