From 8be90d1ca0779e5acd91e7ee877e0d97d2088ee2 Mon Sep 17 00:00:00 2001 From: Benny Halevy Date: Wed, 7 Sep 2022 07:58:00 +0300 Subject: [PATCH] seastar-addr2line: support more flexible syslog-style backtraces Some may contain space characters around the '+' operator in, e.g.: ``` #1 0x00007fd2dab4f950 abort (libc.so.6 + 0x26950) ``` Fixes #1206 Signed-off-by: Benny Halevy --- scripts/addr2line.py | 2 +- scripts/seastar-addr2line | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/addr2line.py b/scripts/addr2line.py index 05489a3b61a..1d03a9fdfe4 100755 --- a/scripts/addr2line.py +++ b/scripts/addr2line.py @@ -94,7 +94,7 @@ def __init__(self): addr = "0x[0-9a-f]+" path = "\S+" token = f"(?:{path}\+)?{addr}" - full_addr_match = f"(?:(?P{path})\+)?(?P{addr})" + full_addr_match = f"(?:(?P{path})\s*\+\s*)?(?P{addr})" self.oneline_re = re.compile(f"^((?:.*(?:(?:at|backtrace):?|:))?(?:\s+))?({token}(?:\s+{token})*)(?:\).*|\s*)$", flags=re.IGNORECASE) self.address_re = re.compile(full_addr_match, flags=re.IGNORECASE) self.asan_re = re.compile(f"^(?:.*\s+)\({full_addr_match}\)\s*$", flags=re.IGNORECASE) diff --git a/scripts/seastar-addr2line b/scripts/seastar-addr2line index 00b2d8c8e90..4dd834f98a4 100755 --- a/scripts/seastar-addr2line +++ b/scripts/seastar-addr2line @@ -213,7 +213,14 @@ if args.test: ('[2022-04-19T23:09:28.311Z] 0x461bbb8', {'type': BacktraceResolver.BacktraceParser.Type.ADDRESS, 'prefix': None, 'addresses': [{'path': None, 'addr': '0x461bbb8'}]}), ('[2022-04-19T23:09:28.311Z] /lib64/libpthread.so.0+0x92a4', - {'type': BacktraceResolver.BacktraceParser.Type.ADDRESS, 'prefix': None, 'addresses': [{'path': '/lib64/libpthread.so.0', 'addr': '0x92a4'}]}) + {'type': BacktraceResolver.BacktraceParser.Type.ADDRESS, 'prefix': None, 'addresses': [{'path': '/lib64/libpthread.so.0', 'addr': '0x92a4'}]}), + + ('#0 0x19c01681 (/path/to/scylla+0x19c01681)', + {'type': BacktraceResolver.BacktraceParser.Type.ADDRESS, 'prefix': None, 'addresses': [{'path': '/path/to/scylla', 'addr': '0x19c01681'}]}), + ('#1 0x00007fd2dab4f950 abort (libc.so.6 + 0x26950)', + {'type': BacktraceResolver.BacktraceParser.Type.ADDRESS, 'prefix': None, 'addresses': [{'path': 'libc.so.6', 'addr': '0x26950'}]}), + ('#2 0x00000000015c4cd3 n/a (/path/to/scylla + 0x15c4cd3)', + {'type': BacktraceResolver.BacktraceParser.Type.ADDRESS, 'prefix': None, 'addresses': [{'path': '/path/to/scylla', 'addr': '0x15c4cd3'}]}), ] parser = BacktraceResolver.BacktraceParser() for line, expected in data: