Chromium Code Reviews| Index: build/android/pylib/symbols/mock_addr2line/mock_addr2line |
| diff --git a/build/android/pylib/symbols/mock_addr2line/mock_addr2line b/build/android/pylib/symbols/mock_addr2line/mock_addr2line |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..fd3195af4b4d49a8b930935f61f17e741245d9f1 |
| --- /dev/null |
| +++ b/build/android/pylib/symbols/mock_addr2line/mock_addr2line |
| @@ -0,0 +1,62 @@ |
| +#!/usr/bin/env python |
| +# Copyright 2014 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +"""Simple mock for addr2line. |
| + |
| +Outputs mock symbol information, with each symbol being a function of the |
| +original address (so it is easy to double-check consistency in unittests). |
| +""" |
| + |
| +import optparse |
| +import os |
| +import posixpath |
| +import sys |
| +import time |
| + |
| + |
| +def main(argv): |
| + parser = optparse.OptionParser() |
| + parser.add_option('-e') # Path of the debug-library.so. |
| + # Silently swallow the other unnecessary arguments. |
| + parser.add_option('-C') |
| + parser.add_option('-f') |
| + options, _ = parser.parse_args(argv[1:]) |
| + lib_file_name = posixpath.basename(options.e) |
| + processed_sym_count = 0 |
| + sim_crash_period = int(os.environ.get('MOCK_A2L_CRASH_EVERY', 0)) |
| + sim_hang_period = int(os.environ.get('MOCK_A2L_HANG_EVERY', 0)) |
|
bulach
2014/02/20 17:35:58
nit: keep it more consistent with the env, i.e., c
|
| + |
| + while(True): |
| + line = sys.stdin.readline() |
| + if not line: |
| + break |
| + addr = int(line, 16) |
| + |
| + processed_sym_count += 1 |
| + if sim_crash_period and processed_sym_count % sim_crash_period == 0: |
| + sys.exit(1) |
| + if sim_hang_period and processed_sym_count % sim_hang_period == 0: |
| + time.sleep(1) |
| + |
| + # Addresses < 1M will return good mock symbol information. |
| + if addr < 1024 * 1024: |
| + print 'mock_sym_for_addr_%d' % addr |
| + print 'mock_src/%s.c:%d' % (lib_file_name, addr) |
| + |
| + # Addresses 1M < x < 2M will return symbols with a name but a missing path. |
| + elif addr < 2 * 1024 * 1024: |
| + print 'mock_sym_for_addr_%d' % addr |
| + print '??:0' |
| + |
| + # Addresses 2M < x < 3M will return unknown symbol information. |
| + elif addr < 3 * 1024 * 1024: |
| + print '??' |
| + print '??' |
| + |
| + sys.stdout.flush() |
| + |
| + |
| +if __name__ == '__main__': |
| + main(sys.argv) |