Skip to content
Snippets Groups Projects
Commit b065bcd1 authored by Tomasz Grabiec's avatar Tomasz Grabiec Committed by Pekka Enberg
Browse files

trace: fix symbol resolving for addr2line v2.23


The script did not parse the response properly in case the symbol is
unknown. That version of addr2line responds in two lines:

 ??
 ??:0

but the script was assuming one line ?? ??:0, as returned by addr2line v2.24

Reported-by: default avatarAsias He <asias@cloudius-systems.com>
Signed-off-by: default avatarTomasz Grabiec <tgrabiec@cloudius-systems.com>
Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
parent b4a2237d
No related branches found
No related tags found
No related merge requests found
...@@ -45,18 +45,22 @@ class SymbolResolver(object): ...@@ -45,18 +45,22 @@ class SymbolResolver(object):
def next_line(self): def next_line(self):
return self.addr2line.stdout.readline().rstrip('\n') return self.addr2line.stdout.readline().rstrip('\n')
def parse_line(self, addr, line): def consume_unknown(self, line):
# addr2line ver. 2.23.2 (Ubuntu) # addr2line ver. 2.23.2 (Ubuntu)
m = re.match(r'^\?\?$', line) m = re.match(r'^\?\?$', line)
if m: if m:
line = self.next_line() line = self.next_line()
if not re.match(r'^\?\?:0$', line): if not re.match(r'^\?\?:0$', line):
raise Exception('Unexpected response: ' + line) raise Exception('Unexpected response: ' + line)
return SourceAddress(addr) return True
# addr2line ver. 2.23.52.0.1-9.fc19 # addr2line ver. 2.23.52.0.1-9.fc19
m = re.match(r'^\?\? \?\?:0$', line) m = re.match(r'^\?\? \?\?:0$', line)
if m: if m:
return True
def parse_line(self, addr, line):
if self.consume_unknown(line):
return SourceAddress(addr) return SourceAddress(addr)
m = re.match(r'(?P<name>.*) at ((?P<file>.*?)|\?+):((?P<line>\d+)|\?+)', line) m = re.match(r'(?P<name>.*) at ((?P<file>.*?)|\?+):((?P<line>\d+)|\?+)', line)
...@@ -85,6 +89,7 @@ class SymbolResolver(object): ...@@ -85,6 +89,7 @@ class SymbolResolver(object):
while line.startswith(self.inline_prefix): while line.startswith(self.inline_prefix):
result.append(self.parse_line(addr, line[len(self.inline_prefix):])) result.append(self.parse_line(addr, line[len(self.inline_prefix):]))
line = self.next_line() line = self.next_line()
self.consume_unknown(line)
self.cache[addr] = result self.cache[addr] = result
return result return result
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment