Skip adding value lines for accidental matches.
If the value_line regex matches, and the symbol file happens to exist
as a directory, we'd call addr2line and crash. Fix this so that calling
addr2line on a directory doesn't happen.
There isn't an easy way to test this, but I added a single new unit test. The
real test was to use a tombstone file that used to crash, but no longer crashes.
Test: Wrote new unit test, ran over a tombstone file that used to crash.
Change-Id: I4331e3b032cee8d697d1b7f409638750c61971d6
diff --git a/scripts/stack_core.py b/scripts/stack_core.py
index 688d391..e3910ff 100755
--- a/scripts/stack_core.py
+++ b/scripts/stack_core.py
@@ -409,19 +409,21 @@
else:
info = symbol.SymbolInformation(area, value)
(source_symbol, source_location, object_symbol_with_offset) = info.pop()
- if not source_symbol:
- if symbol_present:
- source_symbol = symbol.CallCppFilt(symbol_name)
- else:
- source_symbol = "<unknown>"
- if not source_location:
- source_location = area
- if not object_symbol_with_offset:
- object_symbol_with_offset = source_symbol
- self.value_lines.append((addr,
- value,
- object_symbol_with_offset,
- source_location))
+ # If there is no information, skip this.
+ if source_symbol or source_location or object_symbol_with_offset:
+ if not source_symbol:
+ if symbol_present:
+ source_symbol = symbol.CallCppFilt(symbol_name)
+ else:
+ source_symbol = "<unknown>"
+ if not source_location:
+ source_location = area
+ if not object_symbol_with_offset:
+ object_symbol_with_offset = source_symbol
+ self.value_lines.append((addr,
+ value,
+ object_symbol_with_offset,
+ source_location))
return ret
@@ -499,5 +501,13 @@
self.assertGreater(trace_line_count, 10)
tc.PrintOutput(tc.trace_lines, tc.value_lines)
+class ValueLinesTest(unittest.TestCase):
+ def test_value_line_skipped(self):
+ tc = TraceConverter()
+ symbol.SetAbi(["ABI: 'arm'"])
+ tc.UpdateAbiRegexes()
+ tc.ProcessLine(" 12345678 00001000 .")
+ self.assertEqual([], tc.value_lines)
+
if __name__ == '__main__':
unittest.main()
diff --git a/scripts/symbol.py b/scripts/symbol.py
index ddb947a..280c95f 100755
--- a/scripts/symbol.py
+++ b/scripts/symbol.py
@@ -189,6 +189,10 @@
if not os.path.exists(symbols):
return None
+ # Make sure the symbols path is not a directory.
+ if os.path.isdir(symbols):
+ return None
+
cmd = [ToolPath("addr2line"), "--functions", "--inlines",
"--demangle", "--exe=" + symbols]
child = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)