diff options
author | Elliott Hughes <enh@google.com> | 2014-08-29 13:49:57 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-08-29 13:49:57 -0700 |
commit | c3c861957934bc7e2f3cd97b768ae30bd828f591 (patch) | |
tree | 5bccfc355f414c541abb516771b00364f49de75e /scripts/stack_core.py | |
parent | 4123e0886b69fd7ecb91abe1c4ac9bfca1de52e7 (diff) | |
download | android_development-c3c861957934bc7e2f3cd97b768ae30bd828f591.tar.gz android_development-c3c861957934bc7e2f3cd97b768ae30bd828f591.tar.bz2 android_development-c3c861957934bc7e2f3cd97b768ae30bd828f591.zip |
Make 'stack' able to find toolchains regardless of lunch.
This is needed by the internal stack decoding website, which
will be pulling symbols from the build servers anyway (so doesn't
need to be correctly lunched).
Bug: 16734486
Change-Id: I9190065148c0d4bb4eacec28bcc062fa95798917
Diffstat (limited to 'scripts/stack_core.py')
-rwxr-xr-x | scripts/stack_core.py | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/scripts/stack_core.py b/scripts/stack_core.py index 1eb0c29d5..9b7ff2300 100755 --- a/scripts/stack_core.py +++ b/scripts/stack_core.py @@ -44,6 +44,7 @@ class TraceConverter: value_lines = [] last_frame = -1 width = "{8}" + spacing = "" def __init__(self): self.UpdateAbiRegexes() @@ -59,8 +60,10 @@ class TraceConverter: def UpdateAbiRegexes(self): if symbol.ARCH == "arm64" or symbol.ARCH == "mips64" or symbol.ARCH == "x86_64": self.width = "{16}" + self.spacing = " " else: self.width = "{8}" + self.spacing = "" self.register_line = re.compile("(([ ]*\\b(" + self.register_names[symbol.ARCH] + ")\\b +[0-9a-f]" + self.width + "){2,5})") @@ -104,12 +107,9 @@ class TraceConverter: def PrintTraceLines(self, trace_lines): """Print back trace.""" maxlen = max(map(lambda tl: len(tl[1]), trace_lines)) - spacing = "" - if symbol.ARCH == "arm64" or symbol.ARCH == "mips64" or symbol.ARCH == "x86_64": - spacing = " " print print "Stack Trace:" - print " RELADDR " + spacing + "FUNCTION".ljust(maxlen) + " FILE:LINE" + print " RELADDR " + self.spacing + "FUNCTION".ljust(maxlen) + " FILE:LINE" for tl in self.trace_lines: (addr, symbol_with_offset, location) = tl print " %8s %s %s" % (addr, symbol_with_offset.ljust(maxlen), location) @@ -120,7 +120,7 @@ class TraceConverter: maxlen = max(map(lambda tl: len(tl[2]), self.value_lines)) print print "Stack Data:" - print " ADDR VALUE " + "FUNCTION".ljust(maxlen) + " FILE:LINE" + print " ADDR " + self.spacing + "VALUE " + "FUNCTION".ljust(maxlen) + " FILE:LINE" for vl in self.value_lines: (addr, value, symbol_with_offset, location) = vl print " %8s %8s %s %s" % (addr, value, symbol_with_offset.ljust(maxlen), location) @@ -256,12 +256,12 @@ class TraceConverter: class RegisterPatternTests(unittest.TestCase): def assert_register_matches(self, abi, example_crash, stupid_pattern): tc = TraceConverter() - symbol.ARCH = abi - tc.UpdateAbiRegexes() for line in example_crash.split('\n'): + tc.ProcessLine(line) is_register = (re.search(stupid_pattern, line) is not None) matched = (tc.register_line.search(line) is not None) self.assertEquals(matched, is_register, line) + tc.PrintOutput(tc.trace_lines, tc.value_lines) def test_arm_registers(self): self.assert_register_matches("arm", example_crashes.arm, '\\b(r0|r4|r8|ip)\\b') |